Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
4152a9e5
Commit
4152a9e5
authored
Apr 27, 1998
by
Jeff Law
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial revision
From-SVN: r19441
parent
122bfcd5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
188 additions
and
0 deletions
+188
-0
gcc/intl/explodename.c
+188
-0
No files found.
gcc/intl/explodename.c
0 → 100644
View file @
4152a9e5
/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#endif
#if defined HAVE_STRING_H || defined _LIBC
# include <string.h>
#else
# include <strings.h>
#endif
#include <sys/types.h>
#include "loadinfo.h"
/* On some strange systems still no definition of NULL is found. Sigh! */
#ifndef NULL
# if defined __STDC__ && __STDC__
# define NULL ((void *) 0)
# else
# define NULL 0
# endif
#endif
/* @@ end of prolog @@ */
int
_nl_explode_name
(
name
,
language
,
modifier
,
territory
,
codeset
,
normalized_codeset
,
special
,
sponsor
,
revision
)
char
*
name
;
const
char
**
language
;
const
char
**
modifier
;
const
char
**
territory
;
const
char
**
codeset
;
const
char
**
normalized_codeset
;
const
char
**
special
;
const
char
**
sponsor
;
const
char
**
revision
;
{
enum
{
undecided
,
xpg
,
cen
}
syntax
;
char
*
cp
;
int
mask
;
*
modifier
=
NULL
;
*
territory
=
NULL
;
*
codeset
=
NULL
;
*
normalized_codeset
=
NULL
;
*
special
=
NULL
;
*
sponsor
=
NULL
;
*
revision
=
NULL
;
/* Now we determine the single parts of the locale name. First
look for the language. Termination symbols are `_' and `@' if
we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
mask
=
0
;
syntax
=
undecided
;
*
language
=
cp
=
name
;
while
(
cp
[
0
]
!=
'\0'
&&
cp
[
0
]
!=
'_'
&&
cp
[
0
]
!=
'@'
&&
cp
[
0
]
!=
'+'
&&
cp
[
0
]
!=
','
)
++
cp
;
if
(
*
language
==
cp
)
/* This does not make sense: language has to be specified. Use
this entry as it is without exploding. Perhaps it is an alias. */
cp
=
strchr
(
*
language
,
'\0'
);
else
if
(
cp
[
0
]
==
'_'
)
{
/* Next is the territory. */
cp
[
0
]
=
'\0'
;
*
territory
=
++
cp
;
while
(
cp
[
0
]
!=
'\0'
&&
cp
[
0
]
!=
'.'
&&
cp
[
0
]
!=
'@'
&&
cp
[
0
]
!=
'+'
&&
cp
[
0
]
!=
','
&&
cp
[
0
]
!=
'_'
)
++
cp
;
mask
|=
TERRITORY
;
if
(
cp
[
0
]
==
'.'
)
{
/* Next is the codeset. */
syntax
=
xpg
;
cp
[
0
]
=
'\0'
;
*
codeset
=
++
cp
;
while
(
cp
[
0
]
!=
'\0'
&&
cp
[
0
]
!=
'@'
)
++
cp
;
mask
|=
XPG_CODESET
;
if
(
*
codeset
!=
cp
&&
(
*
codeset
)[
0
]
!=
'\0'
)
{
*
normalized_codeset
=
_nl_normalize_codeset
(
*
codeset
,
cp
-
*
codeset
);
if
(
strcmp
(
*
codeset
,
*
normalized_codeset
)
==
0
)
free
((
char
*
)
*
normalized_codeset
);
else
mask
|=
XPG_NORM_CODESET
;
}
}
}
if
(
cp
[
0
]
==
'@'
||
(
syntax
!=
xpg
&&
cp
[
0
]
==
'+'
))
{
/* Next is the modifier. */
syntax
=
cp
[
0
]
==
'@'
?
xpg
:
cen
;
cp
[
0
]
=
'\0'
;
*
modifier
=
++
cp
;
while
(
syntax
==
cen
&&
cp
[
0
]
!=
'\0'
&&
cp
[
0
]
!=
'+'
&&
cp
[
0
]
!=
','
&&
cp
[
0
]
!=
'_'
)
++
cp
;
mask
|=
XPG_MODIFIER
|
CEN_AUDIENCE
;
}
if
(
syntax
!=
xpg
&&
(
cp
[
0
]
==
'+'
||
cp
[
0
]
==
','
||
cp
[
0
]
==
'_'
))
{
syntax
=
cen
;
if
(
cp
[
0
]
==
'+'
)
{
/* Next is special application (CEN syntax). */
cp
[
0
]
=
'\0'
;
*
special
=
++
cp
;
while
(
cp
[
0
]
!=
'\0'
&&
cp
[
0
]
!=
','
&&
cp
[
0
]
!=
'_'
)
++
cp
;
mask
|=
CEN_SPECIAL
;
}
if
(
cp
[
0
]
==
','
)
{
/* Next is sponsor (CEN syntax). */
cp
[
0
]
=
'\0'
;
*
sponsor
=
++
cp
;
while
(
cp
[
0
]
!=
'\0'
&&
cp
[
0
]
!=
'_'
)
++
cp
;
mask
|=
CEN_SPONSOR
;
}
if
(
cp
[
0
]
==
'_'
)
{
/* Next is revision (CEN syntax). */
cp
[
0
]
=
'\0'
;
*
revision
=
++
cp
;
mask
|=
CEN_REVISION
;
}
}
/* For CEN syntax values it might be important to have the
separator character in the file name, not for XPG syntax. */
if
(
syntax
==
xpg
)
{
if
(
*
territory
!=
NULL
&&
(
*
territory
)[
0
]
==
'\0'
)
mask
&=
~
TERRITORY
;
if
(
*
codeset
!=
NULL
&&
(
*
codeset
)[
0
]
==
'\0'
)
mask
&=
~
XPG_CODESET
;
if
(
*
modifier
!=
NULL
&&
(
*
modifier
)[
0
]
==
'\0'
)
mask
&=
~
XPG_MODIFIER
;
}
return
mask
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment