diff options
| author | Roland McGrath <roland@gnu.org> | 1996-07-26 04:35:31 +0000 |
|---|---|---|
| committer | Roland McGrath <roland@gnu.org> | 1996-07-26 04:35:31 +0000 |
| commit | 036cc82fbc47a632c1ed3a310a1a29365fe48d3d (patch) | |
| tree | 3822092b5e9f64de600329bca9d6b0a0bbadf0eb | |
| parent | 1e16111cf1abdcc2d6a617e7ba48a80ce1556797 (diff) | |
| download | glibc-036cc82fbc47a632c1ed3a310a1a29365fe48d3d.tar.xz glibc-036cc82fbc47a632c1ed3a310a1a29365fe48d3d.zip | |
Fri Jul 26 04:41:28 1996 Ulrich Drepper <drepper@cygnus.com>
* intl/libintl.h: Define optimizing macros if __OPTIMIZE__ is
defined, not __OPTIMIZED.
(_nl_msg_cat_cntr): Move declaration outside macro definition
to prevent "nested extern" warning.
(dcgettext): Rename local variable `result' to `__result'.
Thu Jul 25 22:46:30 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* locale/programs/localedef.c (__progname): Remove decl.
(main): Use program_invocation_short_name instead of __progname.
(usage): Use program_invocation_name instead of __progname.
Fri Jul 26 03:46:08 1996 Ulrich Drepper <drepper@cygnus.com>
* catgets/gencat.c: Use "libc" instead of PACKAGE.
* locale/localedef.c: Ditto.
* locale/locale.c: Ditto.
* locale/findlocale.c (_nl_find_locale): Little optimization.
Use new function `strndup'.
* locale/loadlocale.c: Little optimization. Use constant value
from `_nl_category_num_items' instead of byte-order dependend
value from file.
* locale/programs/ld-time.c (time_add): Correct string constant.
* locale/programs/locale-spec.c: New file.
* locale/programs/locale.c: Call `locale_special' function if
no other field matches.
* locale/programs/localedef.c: No need to define `program_name'.
Use global variable `__progname'.
* locale/programs/locfile.c (write_locale_data): Always write
LC_MESSAGES data in LC_MESSAGES/SYS_LC_MESSAGES file. This is
necessary since message catalogs are also installed in the
LC_MESSAGES/ directory.
* locale/programs/stringtrans.c (ADDC): Correctly use `encode_char'
function instead of writing single bytes.
(encode_char): Also handle little endian.
* locale/setlocale.c (new_composite_name): Little optimization.
Use return value of `memcpy'.
* misc/ttyent.h: Pretty print prototypes, add missing parameter
names, prepend parameter names with __ and use `__const' instead
of `const'.
* posix/unistd.h: Ditto.
* stdlib/stdlib.h: Ditto.
* string/string.h: Ditto.
* posix/getconf.c: De-ASNI-fy. Recognize POSIX.2 constant names.
Use `error' function instead of doing it by hand.
* sysdeps/posix/sysconf.c: De-ANSI-fy.
Handle _SC_COLL_WEIGHTS_MAX.
* sysdeps/stub/sysconf.c: Handle _SC_CHARCLASS_NAME_MAX,
_SC_COLL_WEIGHTS_MAX, _SC_EQUIV_CLASS_MAX, _SC_2_LOCALEDEF
since these do depend on the platform.
Add POSIX.4 symbols.
* posix/posix2_lim.h: Add missing definition of
_POSIX2_COLL_WEIGHTS_MAX.
Change _POSIX2_EQUIV_CLASS_MAX and _POSIX2_CHARCLASS_NAME_MAX
to high values since we have no fixed limit.
* sysdeps/generic/confname.h: Add _SC_PAGE_SIZE as alias for
_SC_PAGESIZE for buggy systems (= HP UX) out there.
* wcsmbs/Makefile (routines): Add mbsnrtowcs and wcsnrtombs.
* wcsmbs/mbsnrtowcs.c: New file. Non-standard implementation.
* wcsmbs/wcsnrtombs.c: Ditto.
* wcsmbs/wchar.h [__USE_GNU]: Add prototypes for mbsnrtowcs and
wcsnrtombs.
Thu Jul 25 00:25:54 Richard Henderson <rth@tamu.edu>
* nss/nss_db/db-XXX.c: Kill trailing ; from lock defn as a matter of
course.
* nss/getXXent_r.c: Likewise.
* nss/nsswitch.c: Likewise.
* nss/nss_files/files-XXX.c: Likewise.
* sysdeps/mach/hurd/dirstream.h (struct __dirstream): Likewise.
* sysdeps/unix/bsd/telldir.c (struct record): Likewise.
* sysdeps/unix/dirstream.h (struct __dirstream): Likewise.
| -rw-r--r-- | ChangeLog | 89 | ||||
| -rw-r--r-- | catgets/gencat.c | 2 | ||||
| -rw-r--r-- | intl/libintl.h | 37 | ||||
| -rw-r--r-- | locale/findlocale.c | 12 | ||||
| -rw-r--r-- | locale/loadlocale.c | 9 | ||||
| -rw-r--r-- | locale/programs/ld-time.c | 2 | ||||
| -rw-r--r-- | locale/programs/locale-spec.c | 95 | ||||
| -rw-r--r-- | locale/programs/locale.c | 32 | ||||
| -rw-r--r-- | locale/programs/localedef.c | 16 | ||||
| -rw-r--r-- | locale/programs/locfile.c | 21 | ||||
| -rw-r--r-- | locale/programs/stringtrans.c | 58 | ||||
| -rw-r--r-- | locale/setlocale.c | 11 | ||||
| -rw-r--r-- | misc/ttyent.h | 10 | ||||
| -rw-r--r-- | posix/getconf.c | 69 | ||||
| -rw-r--r-- | posix/posix2_lim.h | 18 | ||||
| -rw-r--r-- | posix/unistd.h | 21 | ||||
| -rw-r--r-- | stdlib/stdlib.h | 26 | ||||
| -rw-r--r-- | string/string.h | 38 | ||||
| -rw-r--r-- | sysdeps/generic/confname.h | 1 | ||||
| -rw-r--r-- | sysdeps/posix/sysconf.c | 15 | ||||
| -rw-r--r-- | sysdeps/stub/sysconf.c | 48 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/configure | 25 | ||||
| -rw-r--r-- | wcsmbs/Makefile | 1 | ||||
| -rw-r--r-- | wcsmbs/mbsnrtowcs.c | 143 | ||||
| -rw-r--r-- | wcsmbs/wchar.h | 27 | ||||
| -rw-r--r-- | wcsmbs/wcsnrtombs.c | 129 |
26 files changed, 756 insertions, 199 deletions
@@ -1,3 +1,92 @@ +Fri Jul 26 04:41:28 1996 Ulrich Drepper <drepper@cygnus.com> + + * intl/libintl.h: Define optimizing macros if __OPTIMIZE__ is + defined, not __OPTIMIZED. + (_nl_msg_cat_cntr): Move declaration outside macro definition + to prevent "nested extern" warning. + (dcgettext): Rename local variable `result' to `__result'. + +Thu Jul 25 22:46:30 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + + * locale/programs/localedef.c (__progname): Remove decl. + (main): Use program_invocation_short_name instead of __progname. + (usage): Use program_invocation_name instead of __progname. + +Fri Jul 26 03:46:08 1996 Ulrich Drepper <drepper@cygnus.com> + + * catgets/gencat.c: Use "libc" instead of PACKAGE. + * locale/localedef.c: Ditto. + * locale/locale.c: Ditto. + + * locale/findlocale.c (_nl_find_locale): Little optimization. + Use new function `strndup'. + + * locale/loadlocale.c: Little optimization. Use constant value + from `_nl_category_num_items' instead of byte-order dependend + value from file. + + * locale/programs/ld-time.c (time_add): Correct string constant. + + * locale/programs/locale-spec.c: New file. + * locale/programs/locale.c: Call `locale_special' function if + no other field matches. + + * locale/programs/localedef.c: No need to define `program_name'. + Use global variable `__progname'. + + * locale/programs/locfile.c (write_locale_data): Always write + LC_MESSAGES data in LC_MESSAGES/SYS_LC_MESSAGES file. This is + necessary since message catalogs are also installed in the + LC_MESSAGES/ directory. + + * locale/programs/stringtrans.c (ADDC): Correctly use `encode_char' + function instead of writing single bytes. + (encode_char): Also handle little endian. + + * locale/setlocale.c (new_composite_name): Little optimization. + Use return value of `memcpy'. + + * misc/ttyent.h: Pretty print prototypes, add missing parameter + names, prepend parameter names with __ and use `__const' instead + of `const'. + * posix/unistd.h: Ditto. + * stdlib/stdlib.h: Ditto. + * string/string.h: Ditto. + + * posix/getconf.c: De-ASNI-fy. Recognize POSIX.2 constant names. + Use `error' function instead of doing it by hand. + * sysdeps/posix/sysconf.c: De-ANSI-fy. + Handle _SC_COLL_WEIGHTS_MAX. + * sysdeps/stub/sysconf.c: Handle _SC_CHARCLASS_NAME_MAX, + _SC_COLL_WEIGHTS_MAX, _SC_EQUIV_CLASS_MAX, _SC_2_LOCALEDEF + since these do depend on the platform. + Add POSIX.4 symbols. + + * posix/posix2_lim.h: Add missing definition of + _POSIX2_COLL_WEIGHTS_MAX. + Change _POSIX2_EQUIV_CLASS_MAX and _POSIX2_CHARCLASS_NAME_MAX + to high values since we have no fixed limit. + + * sysdeps/generic/confname.h: Add _SC_PAGE_SIZE as alias for + _SC_PAGESIZE for buggy systems (= HP UX) out there. + + * wcsmbs/Makefile (routines): Add mbsnrtowcs and wcsnrtombs. + * wcsmbs/mbsnrtowcs.c: New file. Non-standard implementation. + * wcsmbs/wcsnrtombs.c: Ditto. + * wcsmbs/wchar.h [__USE_GNU]: Add prototypes for mbsnrtowcs and + wcsnrtombs. + +Thu Jul 25 00:25:54 Richard Henderson <rth@tamu.edu> + + * nss/nss_db/db-XXX.c: Kill trailing ; from lock defn as a matter of + course. + * nss/getXXent_r.c: Likewise. + * nss/nsswitch.c: Likewise. + * nss/nss_files/files-XXX.c: Likewise. + * sysdeps/mach/hurd/dirstream.h (struct __dirstream): Likewise. + * sysdeps/unix/bsd/telldir.c (struct record): Likewise. + * sysdeps/unix/dirstream.h (struct __dirstream): Likewise. + Thu Jul 25 00:53:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): New diff --git a/catgets/gencat.c b/catgets/gencat.c index 9924cb9161..a193606027 100644 --- a/catgets/gencat.c +++ b/catgets/gencat.c @@ -165,7 +165,7 @@ main (int argc, char *argv[]) if (do_version) { fprintf (stderr, "%s - GNU %s %s\n", program_invocation_name, - PACKAGE, VERSION); + "libc", VERSION); exit (EXIT_SUCCESS); } diff --git a/intl/libintl.h b/intl/libintl.h index effb7c2e81..dca41df647 100644 --- a/intl/libintl.h +++ b/intl/libintl.h @@ -1,6 +1,6 @@ -/* libgettext.h -- Message catalogs for internationalization. -Copyright (C) 1995 Free Software Foundation, Inc. -Contributed by Ulrich Drepper. +/* libintl.h -- Message catalogs for internationalization. +Copyright (C) 1995, 1996 Free Software Foundation, Inc. +Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. This file is derived from the file libgettext.h in the GNU gettext package. This file is part of the GNU C Library. Its master source is NOT part of @@ -22,14 +22,10 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _LIBINTL_H + #define _LIBINTL_H 1 #include <features.h> -#include <locale.h> - -#define __need_NULL -#include <stddef.h> - /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 @@ -72,8 +68,16 @@ extern char *__bindtextdomain __P ((__const char *__domainname, /* Optimized version of the function above. */ -#if defined __OPTIMIZED -/* These must be a macro. Inlined functions are useless because the +#if defined __OPTIMIZE__ + +/* We need NULL for `gettext'. */ +#define __need_NULL +#include <stddef.h> + +/* We need LC_MESSAGES for `dgettext'. */ +# include <locale.h> + +/* These must be macros. Inlined functions are useless because the `__builtin_constant_p' predicate in dcgettext would always return false. */ @@ -83,13 +87,16 @@ extern char *__bindtextdomain __P ((__const char *__domainname, dcgettext (domainname, msgid, LC_MESSAGES) # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +/* Variable defined in loadmsgcat.c which gets incremented every time a + new catalog is loaded. */ +extern int _nl_msg_cat_cntr; + # define dcgettext(domainname, msgid, category) \ (__extension__ \ ({ \ - char *result; \ + char *__result; \ if (__builtin_constant_p (msgid)) \ { \ - extern int _nl_msg_cat_cntr; \ static char *__translation__; \ static int __catalog_counter__; \ if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ @@ -98,11 +105,11 @@ extern char *__bindtextdomain __P ((__const char *__domainname, __dcgettext ((domainname), (msgid), (category)); \ __catalog_counter__ = _nl_msg_cat_cntr; \ } \ - result = __translation__; \ + __result = __translation__; \ } \ else \ - result = __dcgettext ((domainname), (msgid), (category)); \ - result; \ + __result = __dcgettext ((domainname), (msgid), (category)); \ + __result; \ })) # endif #endif /* Optimizing. */ diff --git a/locale/findlocale.c b/locale/findlocale.c index 5e87a33886..2bcc11193f 100644 --- a/locale/findlocale.c +++ b/locale/findlocale.c @@ -170,21 +170,17 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len, /* Determine the locale name for which loading succeeded. This information comes from the file name. The form is - <path>/<locale>/LC_foo. We must extract this <locale> part. */ + <path>/<locale>/LC_foo. We must extract the <locale> part. */ if (((struct locale_data *) locale_file->data)->name == NULL) { - char *newp, *cp, *endp; + char *cp, *endp; endp = strrchr (locale_file->filename, '/'); cp = endp - 1; while (cp[-1] != '/') --cp; - newp = (char *) malloc (endp - cp + 1); - if (newp == NULL) - return NULL; - memcpy (newp, cp, endp - cp); - newp[endp - cp] = '\0'; - ((struct locale_data *) locale_file->data)->name = newp; + ((struct locale_data *) locale_file->data)->name = __strndup (cp, + endp - cp); } *name = (char *) ((struct locale_data *) locale_file->data)->name; diff --git a/locale/loadlocale.c b/locale/loadlocale.c index b7eee2e735..464f8ba33f 100644 --- a/locale/loadlocale.c +++ b/locale/loadlocale.c @@ -94,7 +94,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) /* LOCALE/LC_foo is a directory; open LOCALE/LC_foo/SYS_LC_foo instead. */ char *newp; - + __close (fd); newp = (char *) alloca (strlen (file->filename) @@ -189,14 +189,15 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) } newdata = malloc (sizeof *newdata + - W (filedata->nstrings) * sizeof (union locale_data_value)); + (_nl_category_num_items[category] + * sizeof (union locale_data_value))); if (! newdata) goto puntmap; newdata->name = NULL; /* This will be filled if necessary in findlocale.c. */ newdata->filedata = (void *) filedata; newdata->filesize = st.st_size; - newdata->nstrings = W (filedata->nstrings); + newdata->nstrings = _nl_category_num_items[category]; for (cnt = 0; cnt < newdata->nstrings; ++cnt) { off_t idx = W (filedata->strindex[cnt]); @@ -234,5 +235,3 @@ _nl_free_locale (const struct locale_data *data) } free ((void *) data); } - - diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c index e031b24edc..00f288f69b 100644 --- a/locale/programs/ld-time.c +++ b/locale/programs/ld-time.c @@ -257,7 +257,7 @@ time_add (struct linereader *lr, struct localedef_t *locale, #define STRARR_ELEM(cat, max) \ case tok_##cat: \ if (time->cur_num_##cat >= max) \ - lr_error (lr, _(" \ + lr_error (lr, _("\ too many values for field `%s' in category `LC_TIME'"), \ #cat, "LC_TIME"); \ else if (code->val.str.start == NULL) \ diff --git a/locale/programs/locale-spec.c b/locale/programs/locale-spec.c new file mode 100644 index 0000000000..e408421656 --- /dev/null +++ b/locale/programs/locale-spec.c @@ -0,0 +1,95 @@ +/* Handle special requests. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. + +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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> +#include <string.h> +#include <wchar.h> + +#include "localeinfo.h" + + +/* We provide support for some special names. This helps debugging + and may be useful for advanced usage of the provided information + outside C. */ +void +locale_special (const char *name, int show_category_name, + int show_keyword_name) +{ + /* "collate-elements": print collation elements of locale. */ + if (strcmp (name, "collate-elements") == 0) + { + size_t nelem = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_ELEM_HASH_SIZE); + + if (show_category_name) + puts ("LC_COLLATE"); + if (show_keyword_name) + fputs ("collate-elements=", stdout); + + if (nelem != 0) + { + int first = 1; + size_t cnt; + + for (cnt = 0; cnt < nelem; ++cnt) + if (__collate_element_hash[2 * cnt] != (~((u_int32_t) 0))) + { + size_t idx = __collate_element_hash[2 * cnt]; + + printf ("%s<%s>", first ? "" : ";", + &__collate_element_strings[idx]); + +#if 0 + /* We don't print the string. This is only confusing + because only the programs have to know the + encoding. The code is left in place because it + shows how to get the information. */ + { + const wchar_t *wp; + + idx = __collate_element_hash[2 * cnt + 1]; + wp = &__collate_element_values[idx]; + while (*wp != L'\0') + { + /********************************************\ + |* XXX The element values are really wide *| + |* chars. But we are currently not able to *| + |* print these so fake here. *| + \********************************************/ + int ch = wctob (*wp++); + if (ch != EOF) + putchar (ch); + else + fputs ("<???>", stdout); + } + + putchar ('"'); + } +#endif + first = 0; + } + } + putchar ('\n'); + return; + } +} diff --git a/locale/programs/locale.c b/locale/programs/locale.c index 5196fa51fe..a9e415d6b7 100644 --- a/locale/programs/locale.c +++ b/locale/programs/locale.c @@ -1,4 +1,7 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. +/* locale - Implementation of the locale program according to POSIX 1003.2 +Copyright (C) 1995, 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. 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 @@ -12,8 +15,8 @@ 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., 675 Mass Ave, -Cambridge, MA 02139, USA. */ +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> @@ -105,14 +108,21 @@ struct category static struct category category[] = { #define DEFINE_CATEGORY(category, name, items, postload, in, check, out) \ - { _NL_NUM_##category, name, NELEMS (category##_desc) - 1, \ - category##_desc }, + [category] = { _NL_NUM_##category, name, NELEMS (category##_desc), \ + category##_desc }, #include "categories.def" #undef DEFINE_CATEGORY }; #define NCATEGORIES NELEMS (category) +/* Automatically set variable. */ +extern const char *__progname; |
