From 0a55a284756cef31b9f0a25d9c6a0fc74c7a626f Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 28 Apr 2000 05:12:30 +0000 Subject: [PATCH] Update. 2000-04-27 Ulrich Drepper * hesiod/nss_hesiod/hesiod-grp.c (_nss_hesiod_initgroups): Handle overflows in conversion from ASCII. 2000-04-26 Jakub Jelinek * Makeconfig (full_config_sysdirs): Renamed from full-config-sysdirs. * Makerules (full_config_sysdirs): Likewise. * MakeTAGS (full_config_sysdirs): Likewise. 2000-04-26 Jakub Jelinek * .cvsignore: Remove linuxthreads. * po/.cvsignore: Remove *.pot. * posix/glob/.cvsignore: Removed. * sysdeps/unix/bsd/osf/.cvsignore: Removed. 2000-04-25 Andreas Jaeger * conform/Makefile (distribute): Also distribute contents of subdirectories. * Makerules (no_deps): Remove abi-versions.h. * nis/nis_print_group_entry.c: Include alloca.h for alloca prototype. 2000-04-25 Jakub Jelinek * sysdeps/sparc/sparc64/elf/Dist: Remove. * sysdeps/sparc/sparc64/elf/crtbegin.S: Remove. * sysdeps/sparc/sparc64/elf/crtbeginS.S: Remove. * sysdeps/sparc/sparc64/elf/crtend.S: Remove. * sysdeps/sparc/sparc64/elf/crtendS.S: Remove. * sysdeps/sparc/sparc64/elf/Makefile: Don't build crtbegin/crtend objects. 2000-04-25 Thorsten Kukuk * nscd/grpcache.c: Fix gr_name pointer [PR/1702]. 2000-04-23 Bruno Haible * intl/dcigettext.c: Define _GNU_SOURCE as early as possible. * intl/l10nflist.c: Likewise. 2000-04-23 Bruno Haible * intl/bindtextdom.c [!_LIBC]: Define __libc_rwlock_define, __libc_rwlock_wrlock, __libc_rwlock_unlock as empty. * intl/textdomain.c [!_LIBC]: Likewise. * intl/dcigettext.c [!_LIBC]: Define __libc_rwlock_define_initialized, __libc_rwlock_rdlock, __libc_rwlock_unlock as empty. * intl/loadmsgcat.c (_nl_load_domain) [!_LIBC, !HAVE_ICONV]: Avoid syntax error. 2000-04-23 Bruno Haible * intl/dcigettext.c (_nl_find_msg): Do the plural treatment and character set conversion also in the case the translation was found after a hash collision or through binary search. Store the maximum index together with the converted message. Use iconv() when available. In case of out of memory during conversion, return the unconverted translated string, not NULL. --- .cvsignore | 2 - ChangeLog | 65 +++++ MakeTAGS | 2 +- Makeconfig | 4 +- Makerules | 6 +- conform/Makefile | 5 +- hesiod/nss_hesiod/hesiod-grp.c | 37 +-- intl/bindtextdom.c | 6 +- intl/dcigettext.c | 328 ++++++++++++++++---------- intl/l10nflist.c | 10 +- intl/loadmsgcat.c | 19 +- intl/textdomain.c | 6 +- nis/nis_print_group_entry.c | 1 + nscd/grpcache.c | 5 +- po/.cvsignore | 2 +- posix/glob/.cvsignore | 1 - sysdeps/sparc/sparc64/elf/Dist | 4 - sysdeps/sparc/sparc64/elf/Makefile | 10 +- sysdeps/sparc/sparc64/elf/crtbegin.S | 68 ------ sysdeps/sparc/sparc64/elf/crtbeginS.S | 1 - sysdeps/sparc/sparc64/elf/crtend.S | 69 ------ sysdeps/sparc/sparc64/elf/crtendS.S | 1 - sysdeps/unix/bsd/osf/.cvsignore | 1 - 23 files changed, 329 insertions(+), 324 deletions(-) delete mode 100644 posix/glob/.cvsignore delete mode 100644 sysdeps/sparc/sparc64/elf/Dist delete mode 100644 sysdeps/sparc/sparc64/elf/crtbegin.S delete mode 100644 sysdeps/sparc/sparc64/elf/crtbeginS.S delete mode 100644 sysdeps/sparc/sparc64/elf/crtend.S delete mode 100644 sysdeps/sparc/sparc64/elf/crtendS.S delete mode 100644 sysdeps/unix/bsd/osf/.cvsignore diff --git a/.cvsignore b/.cvsignore index 2f8a931382..e9b99fe5fb 100644 --- a/.cvsignore +++ b/.cvsignore @@ -19,8 +19,6 @@ analysis docs releases -linuxthreads - libc.prj .libc.prcs_aux libc.proj .snprj diff --git a/ChangeLog b/ChangeLog index 9bd6674f43..97c0d43985 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,68 @@ +2000-04-27 Ulrich Drepper + + * hesiod/nss_hesiod/hesiod-grp.c (_nss_hesiod_initgroups): Handle + overflows in conversion from ASCII. + +2000-04-26 Jakub Jelinek + + * Makeconfig (full_config_sysdirs): Renamed from full-config-sysdirs. + * Makerules (full_config_sysdirs): Likewise. + * MakeTAGS (full_config_sysdirs): Likewise. + +2000-04-26 Jakub Jelinek + + * .cvsignore: Remove linuxthreads. + * po/.cvsignore: Remove *.pot. + * posix/glob/.cvsignore: Removed. + * sysdeps/unix/bsd/osf/.cvsignore: Removed. + +2000-04-25 Andreas Jaeger + + * conform/Makefile (distribute): Also distribute contents of + subdirectories. + + * Makerules (no_deps): Remove abi-versions.h. + + * nis/nis_print_group_entry.c: Include alloca.h for alloca prototype. + +2000-04-25 Jakub Jelinek + + * sysdeps/sparc/sparc64/elf/Dist: Remove. + * sysdeps/sparc/sparc64/elf/crtbegin.S: Remove. + * sysdeps/sparc/sparc64/elf/crtbeginS.S: Remove. + * sysdeps/sparc/sparc64/elf/crtend.S: Remove. + * sysdeps/sparc/sparc64/elf/crtendS.S: Remove. + * sysdeps/sparc/sparc64/elf/Makefile: Don't build crtbegin/crtend + objects. + +2000-04-25 Thorsten Kukuk + + * nscd/grpcache.c: Fix gr_name pointer [PR/1702]. + +2000-04-23 Bruno Haible + + * intl/dcigettext.c: Define _GNU_SOURCE as early as possible. + * intl/l10nflist.c: Likewise. + +2000-04-23 Bruno Haible + + * intl/bindtextdom.c [!_LIBC]: Define __libc_rwlock_define, + __libc_rwlock_wrlock, __libc_rwlock_unlock as empty. + * intl/textdomain.c [!_LIBC]: Likewise. + * intl/dcigettext.c [!_LIBC]: Define __libc_rwlock_define_initialized, + __libc_rwlock_rdlock, __libc_rwlock_unlock as empty. + * intl/loadmsgcat.c (_nl_load_domain) [!_LIBC, !HAVE_ICONV]: Avoid + syntax error. + +2000-04-23 Bruno Haible + + * intl/dcigettext.c (_nl_find_msg): Do the plural treatment and + character set conversion also in the case the translation was found + after a hash collision or through binary search. Store the maximum + index together with the converted message. Use iconv() when available. + In case of out of memory during conversion, return the unconverted + translated string, not NULL. + 2000-04-25 Jes Sorensen * shlib-versions: Rename ia64 dynamic linker to ld-linux-ia64.so.1 diff --git a/MakeTAGS b/MakeTAGS index f6546e8f3c..ac028d70c9 100644 --- a/MakeTAGS +++ b/MakeTAGS @@ -39,7 +39,7 @@ tags_sources = $(all-sources) $(all-headers) $(all-dist) endif # ctype endif # No tags_sources -sysdep-dirs := $(full-config-sysdirs) +sysdep-dirs := $(full_config_sysdirs) ifndef sysdep_dirs # Find all sysdep directories. diff --git a/Makeconfig b/Makeconfig index 8a7f94849b..c4f682968c 100644 --- a/Makeconfig +++ b/Makeconfig @@ -93,7 +93,7 @@ binfmt-subdir = aout endif # Complete path to sysdep dirs. -export full-config-sysdirs := $(addprefix $(..),$(config-sysdirs)) +export full_config_sysdirs := $(addprefix $(..),$(config-sysdirs)) # Run config.status to update config.make and config.h. We don't show the # dependence of config.h to Make, because it is only touched when it @@ -107,7 +107,7 @@ $(common-objpfx)config.make: $(common-objpfx)config.status \ # Find all the sysdeps configure fragments, to make sure we re-run # configure when any of them changes. $(common-objpfx)config.status: $(..)version.h $(..)configure \ - $(foreach dir,$(full-config-sysdirs),\ + $(foreach dir,$(full_config_sysdirs),\ $(wildcard \ $(dir)/Implies) \ $(patsubst %.in,%,\ diff --git a/Makerules b/Makerules index 731ad0e873..baeb9b6ab0 100644 --- a/Makerules +++ b/Makerules @@ -58,13 +58,13 @@ include $(..)Makeconfig endif # `configure' writes a definition of `config-sysdirs' in `config.make'. -sysdirs = $(strip $(full-config-sysdirs)) +sysdirs = $(strip $(full_config_sysdirs)) +sysdir_pfx = $(common-objpfx) export sysdirs := $(sysdirs) -+sysdep_dirs := $(full-config-sysdirs) ++sysdep_dirs := $(full_config_sysdirs) ifdef objdir +sysdep_dirs := $(objdir) $(+sysdep_dirs) endif @@ -283,7 +283,7 @@ ifeq ($(versioning),yes) -include $(common-objpfx)sysd-versions $(addprefix $(common-objpfx),$(version-maps)): $(common-objpfx)sysd-versions common-generated += $(version-maps) -postclean-generated += sysd-versions Versions.all +postclean-generated += sysd-versions Versions.all abi-versions.h ifndef avoid-generated ifneq ($(sysd-versions-subdirs),$(all-subdirs) $(config-sysdirs)) diff --git a/conform/Makefile b/conform/Makefile index bfa860b44f..af8f2a033a 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1999 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -21,4 +21,5 @@ # subdir := conform -distribute = conformtest.pl $(wildcard data/*.h-data) +distribute = conformtest.pl $(wildcard data/*.h-data) \ + $(wildcard data/*/*.h-data) diff --git a/hesiod/nss_hesiod/hesiod-grp.c b/hesiod/nss_hesiod/hesiod-grp.c index c0b56ac214..a973fab80f 100644 --- a/hesiod/nss_hesiod/hesiod-grp.c +++ b/hesiod/nss_hesiod/hesiod-grp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Mark Kettenis , 1997. @@ -188,14 +188,19 @@ internal_gid_from_group (void *context, const char *groupname, gid_t *group) { char *endp; char *q = ++p; + long int val; q = p; while (*q != '\0' && *q != ':') ++q; - *group = strtol (p, &endp, 10); - if (endp == q && endp != p) - status = NSS_STATUS_SUCCESS; + val = strtol (p, &endp, 10); + if (sizeof (gid_t) == sizeof (long int) || (gid_t) val == val) + { + *group = val; + if (endp == q && endp != p) + status = NSS_STATUS_SUCCESS; + } } hesiod_free_list (context, grp_res); } @@ -219,7 +224,7 @@ _nss_hesiod_initgroups (const char *user, gid_t group, long int *start, if (list == NULL) { - hesiod_end(context); + hesiod_end (context); return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL; } @@ -231,6 +236,7 @@ _nss_hesiod_initgroups (const char *user, gid_t group, long int *start, { char *endp; char *q; + long int val; status = NSS_STATUS_NOTFOUND; @@ -241,21 +247,24 @@ _nss_hesiod_initgroups (const char *user, gid_t group, long int *start, if (*q != '\0') *q++ = '\0'; - group = strtol (p, &endp, 10); - if (*endp == '\0' && endp != p) - status = NSS_STATUS_SUCCESS; - else - status = internal_gid_from_group (context, p, &group); + val = strtol (p, &endp, 10); + if (sizeof (gid_t) == sizeof (long int) || (gid_t) val == val) + { + if (*endp == '\0' && endp != p) + status = NSS_STATUS_SUCCESS; + else + status = internal_gid_from_group (context, p, &group); - if (status == NSS_STATUS_SUCCESS - && !internal_gid_in_list (groups, group, *start)) - groups[(*start)++] = group; + if (status == NSS_STATUS_SUCCESS + && !internal_gid_in_list (groups, group, *start)) + groups[(*start)++] = group; + } p = q; } hesiod_free_list (context, list); - hesiod_end(context); + hesiod_end (context); return NSS_STATUS_SUCCESS; } diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c index dde7eb131d..c5d4901a85 100644 --- a/intl/bindtextdom.c +++ b/intl/bindtextdom.c @@ -52,9 +52,9 @@ void free (); # include #else /* Provide dummy implementation if this is outside glibc. */ -# define __libc_lock_define_initialized (CLASS, NAME) -# define __libc_lock_lock(NAME) -# define __libc_lock_unlock(NAME) +# define __libc_rwlock_define(CLASS, NAME) +# define __libc_rwlock_wrlock(NAME) +# define __libc_rwlock_unlock(NAME) #endif /* @@ end of prolog @@ */ diff --git a/intl/dcigettext.c b/intl/dcigettext.c index be312ce967..4f27cbb3d8 100644 --- a/intl/dcigettext.c +++ b/intl/dcigettext.c @@ -16,6 +16,13 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* Tell glibc's to provide a prototype for mempcpy(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + #ifdef HAVE_CONFIG_H # include #endif @@ -59,9 +66,6 @@ void free (); #endif #if defined HAVE_STRING_H || defined _LIBC -# ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -# endif # include #else # include @@ -98,9 +102,12 @@ void free (); # include #else /* Provide dummy implementation if this is outside glibc. */ -# define __libc_lock_define_initialized (CLASS, NAME) +# define __libc_lock_define_initialized(CLASS, NAME) # define __libc_lock_lock(NAME) # define __libc_lock_unlock(NAME) +# define __libc_rwlock_define_initialized(CLASS, NAME) +# define __libc_rwlock_rdlock(NAME) +# define __libc_rwlock_unlock(NAME) #endif /* @@ end of prolog @@ */ @@ -626,9 +633,9 @@ _nl_find_msg (domain_file, msgid, index) const char *msgid; unsigned long int index; { - size_t act = 0; - size_t top, bottom; struct loaded_domain *domain; + size_t act; + char *result; if (domain_file->decided == 0) _nl_load_domain (domain_file); @@ -657,103 +664,8 @@ _nl_find_msg (domain_file, msgid, index) domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0) { - /* We found an entry. If we have to convert the string to use - a different character set this is the time. */ - char *result = - (char *) domain->data + W (domain->must_swap, - domain->trans_tab[nstr - 1].offset); - - /* Now skip some strings. How much depends on the index passed - in. */ - while (index-- > 0) - { -#ifdef _LIBC - result = __rawmemchr (result, '\0'); -#else - result = strchr (result, '\0'); -#endif - /* And skip over the NUL byte. */ - ++result; - } - - if ( -#ifdef _LIBC - domain->conv != (__gconv_t) -1 -#else -# if HAVE_ICONV - domain->conv != (iconv_t) -1 -# endif -#endif - ) - { - /* We are supposed to do a conversion. First allocate an - appropriate table with the same structure as the hash - table in the file where we can put the pointers to the - converted strings in. */ - if (domain->conv_tab == NULL - && ((domain->conv_tab = (char **) calloc (domain->hash_size, - sizeof (char *))) - == NULL)) - /* Mark that we didn't succeed allocating a table. */ - domain->conv_tab = (char **) -1; - - if (domain->conv_tab == (char **) -1) - /* Nothing we can do, no more memory. */ - return NULL; - - if (domain->conv_tab[idx] == NULL) - { - /* We haven't used this string so far, so it is not - translated yet. Do this now. */ -#ifdef _LIBC - /* For glibc we use a bit more efficient memory handling. - We allocate always larger blocks which get used over - time. This is faster than many small allocations. */ - __libc_lock_define_initialized (static, lock) - static unsigned char *freemem; - static size_t freemem_size; - /* Note that we include the NUL byte. */ - size_t resultlen = strlen (result) + 1; - const unsigned char *inbuf = result; - unsigned char *outbuf = freemem; - size_t written; - int res; - - __libc_lock_lock (lock); - - while ((res = __gconv (domain->conv, - &inbuf, inbuf + resultlen, - &outbuf, outbuf + freemem_size, - &written)) == __GCONV_OK) - { - if (res != __GCONV_FULL_OUTPUT) - goto out; - - /* We must resize the buffer. */ - freemem_size = MAX (2 * freemem_size, 4064); - freemem = (char *) malloc (freemem_size); - if (freemem == NULL) - goto out; - - inbuf = result; - outbuf = freemem; - } - - /* We have now in our buffer a converted string. Put this - in the hash table */ - domain->conv_tab[idx] = freemem; - freemem_size -= outbuf - freemem; - freemem = outbuf; - - out: - __libc_lock_unlock (lock); -#endif - } - - result = domain->conv_tab[idx]; - } - - return result; + act = nstr - 1; + goto found; } while (1) @@ -773,37 +685,199 @@ _nl_find_msg (domain_file, msgid, index) domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0)) - return ((char *) domain->data - + W (domain->must_swap, - domain->trans_tab[nstr - 1].offset)); + { + act = nstr - 1; + goto found; + } } /* NOTREACHED */ } + else + { + /* Try the default method: binary search in the sorted array of + messages. */ + size_t top, bottom; + + bottom = 0; + top = domain->nstrings; + while (bottom < top) + { + int cmp_val; + + act = (bottom + top) / 2; + cmp_val = strcmp (msgid, (domain->data + + W (domain->must_swap, + domain->orig_tab[act].offset))); + if (cmp_val < 0) + top = act; + else if (cmp_val > 0) + bottom = act + 1; + else + goto found; + } + /* No translation was found. */ + return NULL; + } - /* Now we try the default method: binary search in the sorted - array of messages. */ - bottom = 0; - top = domain->nstrings; - while (bottom < top) + found: + /* The translation was found at index ACT. If we have to convert the + string to use a different character set, this is the time. */ + result = (char *) domain->data + + W (domain->must_swap, domain->trans_tab[act].offset); + +#if defined _LIBC || HAVE_ICONV + if ( +# ifdef _LIBC + domain->conv != (__gconv_t) -1 +# else +# if HAVE_ICONV + domain->conv != (iconv_t) -1 +# endif +# endif + ) { - int cmp_val; - - act = (bottom + top) / 2; - cmp_val = strcmp (msgid, (domain->data - + W (domain->must_swap, - domain->orig_tab[act].offset))); - if (cmp_val < 0) - top = act; - else if (cmp_val > 0) - bottom = act + 1; - else - break; + /* We are supposed to do a conversion. First allocate an + appropriate table with the same structure as the table + of translations in the file, where we can put the pointers + to the converted strings in. + The is a slight complication with the INDEX: We don't know + a priori which entries are plural entries. Therefore at any + moment we can only translate the variants 0 .. INDEX. */ + + if (domain->conv_tab == NULL + && ((domain->conv_tab = (char **) calloc (domain->nstrings, + sizeof (char *))) + == NULL)) + /* Mark that we didn't succeed allocating a table. */ + domain->conv_tab = (char **) -1; + + if (domain->conv_tab == (char **) -1) + /* Nothing we can do, no more memory. */ + goto converted; + + if (domain->conv_tab[act] == NULL + || *(nls_uint32 *) domain->conv_tab[act] < index) + { + /* We haven't used this string so far, so it is not + translated yet. Do this now. */ + /* We use a bit more efficient memory handling. + We allocate always larger blocks which get used over + time. This is faster than many small allocations. */ + __libc_lock_define_initialized (static, lock) + static unsigned char *freemem; + static size_t freemem_size; + + size_t resultlen; + const unsigned char *inbuf; + unsigned char *outbuf; + + /* Note that we translate (index + 1) consecutive strings at + once, including the final NUL byte. */ + { + unsigned long int i = index; + char *p = result; + do + p += strlen (p) + 1; + while (i-- > 0); + resultlen = p - result; + } + + inbuf = result; + outbuf = freemem + 4; + + __libc_lock_lock (lock); + +# ifdef _LIBC + { + size_t written; + int res; + + while ((res = __gconv (domain->conv, + &inbuf, inbuf + resultlen, + &outbuf, outbuf + freemem_size, + &written)) == __GCONV_OK) + { + if (res != __GCONV_FULL_OUTPUT) + goto out; + + /* We must resize the buffer. */ + freemem_size = MAX (2 * freemem_size, 4064); + freemem = (char *) malloc (freemem_size); + if (freemem == NULL) + goto out; + + inbuf = result; + outbuf = freemem + 4; + } + } +# else +# if HAVE_ICONV + for (;;) + { + const char *inptr = (const char *) inbuf; + size_t inleft = resultlen; + char *outptr = (char *) outbuf; + size_t outleft = freemem_size; + + if (iconv (domain->conv, &inptr, &inleft, &outptr, &outleft) + != (size_t)(-1)) + { + outbuf = (unsigned char *) outptr; + break; + } + if (errno != E2BIG) + goto out; + + /* We must resize the buffer. */ + freemem_size = 2 * freemem_size; + if (freemem_size < 4064) + freemem_size = 4064; + freemem = (char *) malloc (freemem_size); + if (freemem == NULL) + goto out; + + outbuf = freemem + 4; + } +# endif +# endif + + /* We have now in our buffer a converted string. Put this + into the table of conversions. */ + *(nls_uint32 *) freemem = index; + domain->conv_tab[act] = freemem; + /* Shrink freemem, but keep it aligned. */ + freemem_size -= outbuf - freemem; + freemem = outbuf; + freemem += freemem_size & 3; + freemem_size = freemem_size & ~3; + + out: + __libc_lock_unlock (lock); + } + + /* Now domain->conv_tab[act] contains the translation of at least + the variants 0 .. INDEX. */ + result = domain->conv_tab[act] + 4; + } + + converted: + /* The result string is converted. */ + +#endif /* _LIBC || HAVE_ICONV */ + + /* Now skip some strings. How much depends on the index passed in. */ + while (index-- > 0) + { +#ifdef _LIBC + result = __rawmemchr (result, '\0'); +#else + result = strchr (result, '\0'); +#endif + /* And skip over the NUL byte. */ + ++result; } - /* If an translation is found return this. */ - return bottom >= top ? NULL : ((char *) domain->data - + W (domain->must_swap, - domain->trans_tab[act].offset)); + return result; } diff --git a/intl/l10nflist.c b/intl/l10nflist.c index ef599361a9..01e7e74956 100644 --- a/intl/l10nflist.c +++ b/intl/l10nflist.c @@ -16,15 +16,19 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* Tell glibc's to provide a prototype for stpcpy(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + #ifdef HAVE_CONFIG_H # include #endif #if defined HAVE_STRING_H || defined _LIBC -# ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -# endif # include #else # include diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c index a03fe0d809..75265c84a8 100644 --- a/intl/loadmsgcat.c +++ b/intl/loadmsgcat.c @@ -257,10 +257,12 @@ _nl_load_domain (domain_file) nullentry = _nl_find_msg (domain_file, "", 0); if (nullentry != NULL) { - const char *charsetstr = strstr (nullentry, "charset="); + const char *charsetstr; const char *plural; const char *nplurals; +#if defined _LIBC || HAVE_ICONV + charsetstr = strstr (nullentry, "charset="); if (charsetstr != NULL) { size_t len; @@ -271,12 +273,12 @@ _nl_load_domain (domain_file) len = strcspn (charsetstr, " \t\n"); charset = (char *) alloca (len + 1); -#if defined _LIBC || HAVE_MEMPCPY +# if defined _LIBC || HAVE_MEMPCPY *((char *) mempcpy (charset, charsetstr, len)) = '\0'; -#else +# else memcpy (charset, charsetstr, len); charset[len] = '\0'; -#endif +# endif /* The output charset should normally be determined by the locale. But sometimes the locale is not used or not correctly @@ -285,17 +287,18 @@ _nl_load_domain (domain_file) if (outcharset == NULL || outcharset[0] == '\0') outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; -#ifdef _LIBC +# ifdef _LIBC if (__gconv_open (outcharset, charset, &domain->conv, GCONV_AVOID_NOCONV) != __GCONV_OK) domain->conv = (__gconv_t) -1; -#else -# if HAVE_ICONV +# else +# if HAVE_ICONV domain->conv = iconv_open (outcharset, charset); +# endif # endif -#endif } +#endif /* _LIBC || HAVE_ICONV */ /* Also look for a plural specification. */ plural = strstr (nullentry, "plural="); diff --git a/intl/textdomain.c b/intl/textdomain.c index 726b5bb8e3..2a4b67c564 100644 --- a/intl/textdomain.c +++ b/intl/textdomain.c @@ -46,9 +46,9 @@ # include #else /* Provide dummy implementation if this is outside glibc. */ -# define __libc_lock_define_initialized (CLASS, NAME) -# define __libc_lock_lock(NAME) -# define __libc_lock_unlock(NAME) +# define __libc_rwlock_define(CLASS, NAME) +# define __libc_rwlock_wrlock(NAME) +# define __libc_rwlock_unlock(NAME) #endif /* @@ end of prolog @@ */ diff --git a/nis/nis_print_group_entry.c b/nis/nis_print_group_entry.c index c5aa2abb88..7f50c85a8e 100644 --- a/nis/nis_print_group_entry.c +++ b/nis/nis_print_group_entry.c @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include diff --git a/nscd/grpcache.c b/nscd/grpcache.c index 7a591c81ae..983b297ad2 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -1,5 +1,5 @@ /* Cache handling for group lookup. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -158,7 +158,8 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key, /* This is the member string length array. */ cp = mempcpy (cp, gr_mem_len, gr_mem_cnt * sizeof (size_t)); - gr_name = cp = mempcpy (cp, grp->gr_name, gr_name_len); + gr_name = cp; + cp = mempcpy (cp, grp->gr_name, gr_name_len); cp = mempcpy (cp, grp->gr_passwd, gr_passwd_len); for (cnt = 0; cnt < gr_mem_cnt; ++cnt) diff --git a/po/.cvsignore b/po/.cvsignore index 6733a7efc3..db953980d5 100644 --- a/po/.cvsignore +++ b/po/.cvsignore @@ -1,2 +1,2 @@ -[a-z]*.pot *.mo +*.mo ttt diff --git a/posix/glob/.cvsignore b/posix/glob/.cvsignore deleted file mode 100644 index 56631abf19..0000000000 --- a/posix/glob/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -ChangeLog diff --git a/sysdeps/sparc/sparc64/elf/Dist b/sysdeps/sparc/sparc64/elf/Dist deleted file mode 100644 index d9338c8fd6..0000000000 --- a/sysdeps/sparc/sparc64/elf/Dist +++ /dev/null @@ -1,4 +0,0 @@ -crtbegin.S -crtbeginS.S -crtend.S -crtendS.S diff --git a/sysdeps/sparc/sparc64/elf/Makefile b/sysdeps/sparc/sparc64/elf/Makefile index 8da8a88c1b..a995e6cdf1 100644 --- a/sysdeps/sparc/sparc64/elf/Makefile +++ b/sysdeps/sparc/sparc64/elf/Makefile @@ -1,10 +1,4 @@ +# Sparc/ELF specific definitions. + # The assembler on SPARC needs the -fPIC flag even when it's assembler code. ASFLAGS-.os = -fPIC - -ifeq ($(subdir), csu) -extra-objs += crtbegin.o crtend.o crtbeginS.o crtendS.o -install-lib += crtbegin.o crtend.o crtbeginS.o crtendS.o - -CPPFLAGS-crtbeginS.S = -fPIC -DPIC -CPPFLAGS-crtendS.S = -fPIC -DPIC -endif diff --git a/sysdeps/sparc/sparc64/elf/crtbegin.S b/sysdeps/sparc/sparc64/elf/crtbegin.S deleted file mode 100644 index c2fe01f6b0..0000000000 --- a/sysdeps/sparc/sparc64/elf/crtbegin.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Destructor cleanup code for elf64-sparc - Copyright (C) 1997 Free Software Foundation, Inc. - Contributed by Richard Henderson , 1997. - - 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. */ - - -.section ".ctors",#alloc,#write - - .align 8 -__CTOR_LIST__: - .xword -1 - -.section ".dtors",#alloc,#write - - .align 8 -__DTOR_LIST__: - .xword -1 - -.section ".fini",#alloc,#execinstr - - call __do_global_dtors_aux - nop - -.text - - .align 4 - .type __do_global_dtors_aux,#function -__do_global_dtors_aux: - save %sp,-192,%sp - -#ifdef PIC -1: call 11f - sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 -11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 - add %l7, %o7, %l7 - sethi %hi(__DTOR_LIST__), %l0 - or %l0, %lo(__DTOR_LIST__), %l0 - ldx [%l7+%l0], %l0 -#else - sethi %hi(__DTOR_LIST__), %l0 - or %l0, %lo(__DTOR_LIST__), %l0 -#endif - - ba 3f - ldx [%l0+8], %l1 -2: jmpl %l1, %o7 - ldx [%l0+8], %l1 -3: brnz,pt %l1, 2b - add %l0, 8, %l0 - - ret - restore - - .size __do_global_dtors_aux,.-__do_global_dtors_aux diff --git a/sysdeps/sparc/sparc64/elf/crtbeginS.S b/sysdeps/sparc/sparc64/elf/crtbeginS.S deleted file mode 100644 index 7db4bc590e..0000000000 --- a/sysdeps/sparc/sparc64/elf/crtbeginS.S +++ /dev/null @@ -1 +0,0 @@ -#include "crtbegin.S" diff --git a/sysdeps/sparc/sparc64/elf/crtend.S b/sysdeps/sparc/sparc64/elf/crtend.S deleted file mode 100644 index db0ac87ecd..0000000000 --- a/sysdeps/sparc/sparc64/elf/crtend.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Constructor startup code for elf64-sparc - Copyright (C) 1997 Free Software Foundation, Inc. - Contributed by Richard Henderson , 1997. - - 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. */ - - -.section ".ctors",#alloc,#write - - .align 8 -__CTOR_END__: - .xword 0 - -.section ".dtors",#alloc,#write - - .align 8 -__DTOR_END__: - .xword 0 - -.section ".init",#alloc,#execinstr - - call __do_global_ctors_aux - nop - -.text - - .align 4 - .type __do_global_ctors_aux,#function -__do_global_ctors_aux: - save %sp,-192,%sp - -#ifdef PIC -1: call 11f - sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 -11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 - add %l7, %o7, %l7 - sethi %hi(__CTOR_END__), %l0 - or %l0, %lo(__CTOR_END__), %l0 - ldx [%l7+%l0], %l0 -#else - sethi %hi(__CTOR_END__), %l0 - or %l0, %lo(__CTOR_END__), %l0 -#endif - - ba 3f - ldx [%l0+8], %l1 -2: jmpl %l1, %o7 - ldx [%l0+8], %l1 -3: addcc %l1, 1, %g0 - bnz,pt %xcc, 2b - add %l0, 8, %l0 - - ret - restore - - .size __do_global_ctors_aux,.-__do_global_ctors_aux diff --git a/sysdeps/sparc/sparc64/elf/crtendS.S b/sysdeps/sparc/sparc64/elf/crtendS.S deleted file mode 100644 index 56532f567d..0000000000 --- a/sysdeps/sparc/sparc64/elf/crtendS.S +++ /dev/null @@ -1 +0,0 @@ -#include "crtend.S" diff --git a/sysdeps/unix/bsd/osf/.cvsignore b/sysdeps/unix/bsd/osf/.cvsignore deleted file mode 100644 index c9147fd335..0000000000 --- a/sysdeps/unix/bsd/osf/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -=*