aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog46
-rw-r--r--iconv/gconv_charset.h60
-rw-r--r--iconv/gconv_db.c39
-rw-r--r--locale/C-address.c7
-rw-r--r--locale/C-collate.c8
-rw-r--r--locale/C-ctype.c4
-rw-r--r--locale/C-identification.c7
-rw-r--r--locale/C-measurement.c7
-rw-r--r--locale/C-messages.c7
-rw-r--r--locale/C-monetary.c7
-rw-r--r--locale/C-name.c7
-rw-r--r--locale/C-numeric.c7
-rw-r--r--locale/C-paper.c7
-rw-r--r--locale/C-telephone.c7
-rw-r--r--locale/C-time.c7
-rw-r--r--locale/C_name.c3
-rw-r--r--locale/categories.def15
-rw-r--r--locale/findlocale.c52
-rw-r--r--locale/langinfo.h12
-rw-r--r--locale/localeinfo.h3
-rw-r--r--locale/programs/ld-address.c5
-rw-r--r--locale/programs/ld-collate.c6
-rw-r--r--locale/programs/ld-identification.c12
-rw-r--r--locale/programs/ld-measurement.c5
-rw-r--r--locale/programs/ld-messages.c5
-rw-r--r--locale/programs/ld-monetary.c5
-rw-r--r--locale/programs/ld-name.c5
-rw-r--r--locale/programs/ld-numeric.c5
-rw-r--r--locale/programs/ld-paper.c5
-rw-r--r--locale/programs/ld-telephone.c5
-rw-r--r--locale/programs/ld-time.c6
-rw-r--r--localedata/tests-mbwc/tst_funcs.h1
-rw-r--r--string/Makefile1
-rw-r--r--sysdeps/unix/sysv/linux/ia64/getcontext.S4
34 files changed, 329 insertions, 53 deletions
diff --git a/ChangeLog b/ChangeLog
index 3d4a9cf44f..d9dc6f3999 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,49 @@
+2001-04-06 Ulrich Drepper <drepper@redhat.com>
+
+ * iconv/iconv_open.c: Move strip and upstr definitions...
+ * iconv/gconv_charset.h: ...here. New file.
+ * iconv/gconv_db.c (once): Move to file level.
+ (do_lookup_alias): Split out from __gconv_find_transform.
+ (__gconv_find_transform): Call do_lookup_alias.
+ (__gconv_loopup_alias): New function.
+ * locale/langinfo.h: Define _NL_*_CODESET values for all categories
+ but LC_CTYPE.
+ * locale/categories.def: Add entries for new _NL_*_CODESET values.
+ * locale/C-ctype.c: Use _nl_C_codeset to initialize CODESET entry.
+ * locale/C-address.c: Initialize _NL_*_CODESET element.
+ * locale/C-collate.c: Likewise.
+ * locale/C-identification.c: Likewise.
+ * locale/C-measurement.c: Likewise.
+ * locale/C-messages.c: Likewise.
+ * locale/C-monetary.c: Likewise.
+ * locale/C-name.c: Likewise.
+ * locale/C-numeric.c: Likewise.
+ * locale/C-paper.c: Likewise.
+ * locale/C-telephone.c: Likewise.
+ * locale/C-time.c: Likewise.
+ * locale/localeinfo.h: Declare _nl_C_codeset.
+ * locale/C_name.c: Define _nl_C_codeset.
+ * locale/findlocale.c: Before accepting locale check that the used
+ charset does not conflict with what the locale name said.
+ * locale/programs/ld-address.c: Emit codeset information.
+ * locale/programs/ld-collate.c: Likewise.
+ * locale/programs/ld-identification.c: Likewise.
+ * locale/programs/ld-measurement.c: Likewise.
+ * locale/programs/ld-messages.c: Likewise.
+ * locale/programs/ld-monetary.c: Likewise.
+ * locale/programs/ld-name.c: Likewise.
+ * locale/programs/ld-numeric.c: Likewise.
+ * locale/programs/ld-paper.c: Likewise.
+ * locale/programs/ld-telephone.c: Likewise.
+ * locale/programs/ld-time.c: Likewise.
+
+ * localedata/tests-mbwc/tst_funcs.h (TST_HEAD_LOCALE): It is an error
+ if the locale data couldn't be found.
+
+ * string/Makefile: Define tst-strxfrm-ENV.
+
+ * ysdeps/unix/sysv/linux/ia64/getcontext.S: Fix comment.
+
2001-04-06 Andreas Jaeger <aj@suse.de>
* include/sys/profil.h: New file.
diff --git a/iconv/gconv_charset.h b/iconv/gconv_charset.h
new file mode 100644
index 0000000000..334bb5f1d0
--- /dev/null
+++ b/iconv/gconv_charset.h
@@ -0,0 +1,60 @@
+/* Charset name normalization.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <ctype.h>
+
+
+static inline void
+strip (char *wp, const char *s)
+{
+ int slash_count = 0;
+
+ while (*s != '\0')
+ {
+ if (isalnum (*s) || *s == '_' || *s == '-' || *s == '.')
+ *wp++ = toupper (*s);
+ else if (*s == '/')
+ {
+ if (++slash_count == 3)
+ break;
+ *wp++ = '/';
+ }
+ ++s;
+ }
+
+ while (slash_count++ < 2)
+ *wp++ = '/';
+
+ *wp = '\0';
+}
+
+
+static char *
+upstr (char *dst, const char *str)
+{
+ char *cp = dst;
+ while ((*cp++ = toupper (*str++)) != '\0')
+ /* nothing */;
+ return dst;
+}
+
+
+/* If NAME is an codeset alias expand it. */
+extern const char *__gconv_lookup_alias (const char *name);
diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c
index c4ebc4f096..71d64b493e 100644
--- a/iconv/gconv_db.c
+++ b/iconv/gconv_db.c
@@ -614,13 +614,38 @@ find_derivation (const char *toset, const char *toset_expand,
}
+/* Control of initialization. */
+__libc_once_define (static, once);
+
+
+static const char *
+do_lookup_alias (const char *name)
+{
+ struct gconv_alias key;
+ struct gconv_alias **found;
+
+ key.fromname = (char *) name;
+ found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare);
+ return found != NULL ? (*found)->toname : NULL;
+}
+
+
+const char *
+__gconv_lookup_alias (const char *name)
+{
+ /* Ensure that the configuration data is read. */
+ __libc_once (once, __gconv_read_conf);
+
+ return do_lookup_alias (name) ?: name;
+}
+
+
int
internal_function
__gconv_find_transform (const char *toset, const char *fromset,
struct __gconv_step **handle, size_t *nsteps,
int flags)
{
- __libc_once_define (static, once);
const char *fromset_expand = NULL;
const char *toset_expand = NULL;
int result;
@@ -641,16 +666,8 @@ __gconv_find_transform (const char *toset, const char *fromset,
/* See whether the names are aliases. */
if (__gconv_alias_db != NULL)
{
- struct gconv_alias key;
- struct gconv_alias **found;
-
- key.fromname = (char *) fromset;
- found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare);
- fromset_expand = found != NULL ? (*found)->toname : NULL;
-
- key.fromname = (char *) toset;
- found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare);
- toset_expand = found != NULL ? (*found)->toname : NULL;
+ fromset_expand = do_lookup_alias (fromset);
+ toset_expand = do_lookup_alias (toset);
}
if (__builtin_expect (flags & GCONV_AVOID_NOCONV, 0)
diff --git a/locale/C-address.c b/locale/C-address.c
index 75a51d276b..0d93cb9f95 100644
--- a/locale/C-address.c
+++ b/locale/C-address.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -31,7 +31,7 @@ const struct locale_data _nl_C_LC_ADDRESS =
UNDELETABLE,
0,
NULL,
- 12,
+ 13,
{
{ string: "%a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N" },
{ string: "" },
@@ -44,6 +44,7 @@ const struct locale_data _nl_C_LC_ADDRESS =
{ string: "" },
{ string: "" },
{ string: "" },
- { string: "" }
+ { string: "" },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-collate.c b/locale/C-collate.c
index 964ea50113..575dda7206 100644
--- a/locale/C-collate.c
+++ b/locale/C-collate.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,1999,2000,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -105,7 +105,7 @@ const struct locale_data _nl_C_LC_COLLATE =
UNDELETABLE,
0,
NULL,
- 18,
+ 19,
{
/* _NL_COLLATE_NRULES */
{ word: 0 },
@@ -142,6 +142,8 @@ const struct locale_data _nl_C_LC_COLLATE =
/* _NL_COLLATE_COLLSEQMB */
{ string: collseqmb },
/* _NL_COLLATE_COLLSEQWC */
- { string: (const char *) collseqwc }
+ { string: (const char *) collseqwc },
+ /* _NL_COLLATE_CODESET */
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-ctype.c b/locale/C-ctype.c
index 6e036f6266..12ac7c1490 100644
--- a/locale/C-ctype.c
+++ b/locale/C-ctype.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -590,7 +590,7 @@ const struct locale_data _nl_C_LC_CTYPE =
/* _NL_CTYPE_MB_CUR_MAX */
{ word: 1 },
/* _NL_CTYPE_CODESET_NAME */
- { string: "ANSI_X3.4-1968" },
+ { string: _nl_C_codeset },
/* _NL_CTYPE_TOUPPER32 */
{ string: (const char *) &_nl_C_LC_CTYPE_toupper[128] },
/* _NL_CTYPE_TOLOWER32 */
diff --git a/locale/C-identification.c b/locale/C-identification.c
index 89ebf3149e..6eef07d30b 100644
--- a/locale/C-identification.c
+++ b/locale/C-identification.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -31,7 +31,7 @@ const struct locale_data _nl_C_LC_IDENTIFICATION =
UNDELETABLE,
0,
NULL,
- 15,
+ 16,
{
{ string: "ISO/IEC 14652 i18n FDCC-set" },
{ string: "ISO/IEC JTC1/SC22/WG20 - internationalization" },
@@ -51,6 +51,7 @@ const struct locale_data _nl_C_LC_IDENTIFICATION =
"i18n:1999\0" "i18n:1999\0" "\0" "i18n:1999\0"
"i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0"
"i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0"
- "i18n:1999" }
+ "i18n:1999" },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-measurement.c b/locale/C-measurement.c
index 92de2a9eb5..eddd549408 100644
--- a/locale/C-measurement.c
+++ b/locale/C-measurement.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -31,8 +31,9 @@ const struct locale_data _nl_C_LC_MEASUREMENT =
UNDELETABLE,
0,
NULL,
- 1,
+ 2,
{
- { string: "\1" }
+ { string: "\1" },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-messages.c b/locale/C-messages.c
index 3f96bb0f2f..c2d7cbe59d 100644
--- a/locale/C-messages.c
+++ b/locale/C-messages.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
@@ -31,11 +31,12 @@ const struct locale_data _nl_C_LC_MESSAGES =
UNDELETABLE,
0,
NULL,
- 4,
+ 5,
{
{ string: "^[yY]" },
{ string: "^[nN]" },
{ string: "" },
- { string: "" }
+ { string: "" },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-monetary.c b/locale/C-monetary.c
index e04b2de4f0..6704aa1aa1 100644
--- a/locale/C-monetary.c
+++ b/locale/C-monetary.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -35,7 +35,7 @@ const struct locale_data _nl_C_LC_MONETARY =
UNDELETABLE,
0,
NULL,
- 45,
+ 46,
{
{ string: "" },
{ string: "" },
@@ -81,6 +81,7 @@ const struct locale_data _nl_C_LC_MONETARY =
{ word: 99991231 },
{ word: 1 },
{ word: (unsigned int) L'\0' },
- { word: (unsigned int) L'\0' }
+ { word: (unsigned int) L'\0' },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-name.c b/locale/C-name.c
index fdce4cb3cc..a34f7dc4aa 100644
--- a/locale/C-name.c
+++ b/locale/C-name.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -31,13 +31,14 @@ const struct locale_data _nl_C_LC_NAME =
UNDELETABLE,
0,
NULL,
- 6,
+ 7,
{
{ string: "%p%t%g%t%m%t%f" },
{ string: "" },
{ string: "" },
{ string: "" },
{ string: "" },
- { string: "" }
+ { string: "" },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-numeric.c b/locale/C-numeric.c
index 822780dcdd..6afcd68d83 100644
--- a/locale/C-numeric.c
+++ b/locale/C-numeric.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -28,12 +28,13 @@ const struct locale_data _nl_C_LC_NUMERIC =
UNDELETABLE,
0,
NULL,
- 5,
+ 6,
{
{ string: "." },
{ string: "" },
{ string: "" },
{ word: (unsigned int) L'.' },
- { word: (unsigned int) L'\0' }
+ { word: (unsigned int) L'\0' },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-paper.c b/locale/C-paper.c
index 19f847c22f..21f9c99ec0 100644
--- a/locale/C-paper.c
+++ b/locale/C-paper.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -31,9 +31,10 @@ const struct locale_data _nl_C_LC_PAPER =
UNDELETABLE,
0,
NULL,
- 2,
+ 3,
{
{ word: 297 },
- { word: 210 }
+ { word: 210 },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-telephone.c b/locale/C-telephone.c
index adf407db2c..6d40b6f0b8 100644
--- a/locale/C-telephone.c
+++ b/locale/C-telephone.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -31,11 +31,12 @@ const struct locale_data _nl_C_LC_TELEPHONE =
UNDELETABLE,
0,
NULL,
- 4,
+ 5,
{
{ string: "+%c %a %l" },
{ string: "" },
{ string: "" },
- { string: "" }
+ { string: "" },
+ { string: _nl_C_codeset }
}
};
diff --git a/locale/C-time.c b/locale/C-time.c
index 17eed63ae1..184dde1fc2 100644
--- a/locale/C-time.c
+++ b/locale/C-time.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
@@ -30,7 +30,7 @@ const struct locale_data _nl_C_LC_TIME =
UNDELETABLE,
0,
NULL,
- 110,
+ 111,
{
{ string: "Sun" },
{ string: "Mon" },
@@ -141,6 +141,7 @@ const struct locale_data _nl_C_LC_TIME =
{ string: "\1" },
{ string: "" },
{ string: "%a %b %e %H:%M:%S %Z %Y" },
- { wstr: (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y" }
+ { wstr: (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y" },
+ { string: _nl_C_codeset }