2000-04-27  Ulrich Drepper  <drepper@redhat.com>

	* hesiod/nss_hesiod/hesiod-grp.c (_nss_hesiod_initgroups): Handle
	overflows in conversion from ASCII.

2000-04-26  Jakub Jelinek  <jakub@redhat.com>

	* Makeconfig (full_config_sysdirs): Renamed from full-config-sysdirs.
	* Makerules (full_config_sysdirs): Likewise.
	* MakeTAGS (full_config_sysdirs): Likewise.

2000-04-26  Jakub Jelinek  <jakub@redhat.com>

	* .cvsignore: Remove linuxthreads.
	* po/.cvsignore: Remove *.pot.
	* posix/glob/.cvsignore: Removed.
	* sysdeps/unix/bsd/osf/.cvsignore: Removed.

2000-04-25  Andreas Jaeger  <aj@suse.de>

	* 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  <jakub@redhat.com>

	* 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  <kukuk@suse.de>

	* nscd/grpcache.c: Fix gr_name pointer [PR/1702].

2000-04-23  Bruno Haible  <clisp.cons.org>

	* intl/dcigettext.c: Define _GNU_SOURCE as early as possible.
	* intl/l10nflist.c: Likewise.

2000-04-23  Bruno Haible  <clisp.cons.org>

	* 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  <clisp.cons.org>

	* 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.
This commit is contained in:
Ulrich Drepper 2000-04-28 05:12:30 +00:00
parent 0e4ee106c2
commit 0a55a28475
23 changed files with 329 additions and 324 deletions

View file

@ -19,8 +19,6 @@ analysis
docs
releases
linuxthreads
libc.prj .libc.prcs_aux
libc.proj .snprj

View file

@ -1,3 +1,68 @@
2000-04-27 Ulrich Drepper <drepper@redhat.com>
* hesiod/nss_hesiod/hesiod-grp.c (_nss_hesiod_initgroups): Handle
overflows in conversion from ASCII.
2000-04-26 Jakub Jelinek <jakub@redhat.com>
* Makeconfig (full_config_sysdirs): Renamed from full-config-sysdirs.
* Makerules (full_config_sysdirs): Likewise.
* MakeTAGS (full_config_sysdirs): Likewise.
2000-04-26 Jakub Jelinek <jakub@redhat.com>
* .cvsignore: Remove linuxthreads.
* po/.cvsignore: Remove *.pot.
* posix/glob/.cvsignore: Removed.
* sysdeps/unix/bsd/osf/.cvsignore: Removed.
2000-04-25 Andreas Jaeger <aj@suse.de>
* 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 <jakub@redhat.com>
* 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 <kukuk@suse.de>
* nscd/grpcache.c: Fix gr_name pointer [PR/1702].
2000-04-23 Bruno Haible <clisp.cons.org>
* intl/dcigettext.c: Define _GNU_SOURCE as early as possible.
* intl/l10nflist.c: Likewise.
2000-04-23 Bruno Haible <clisp.cons.org>
* 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 <clisp.cons.org>
* 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 <Jes.Sorensen@cern.ch>
* shlib-versions: Rename ia64 dynamic linker to ld-linux-ia64.so.1

View file

@ -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.

View file

@ -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,%,\

View file

@ -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))

View file

@ -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)

View file

@ -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 <kettenis@phys.uva.nl>, 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;
}

View file

@ -52,9 +52,9 @@ void free ();
# include <bits/libc-lock.h>
#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 @@ */

View file

@ -16,6 +16,13 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Tell glibc's <string.h> to provide a prototype for mempcpy().
This must come before <config.h> because <config.h> may include
<features.h>, and once <features.h> has been included, it's too late. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@ -59,9 +66,6 @@ void free ();
#endif
#if defined HAVE_STRING_H || defined _LIBC
# ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
# endif
# include <string.h>
#else
# include <strings.h>
@ -98,9 +102,12 @@ void free ();
# include <bits/libc-lock.h>
#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 */
}
/* Now we try the default method: binary search in the sorted
array of messages. */
bottom = 0;
top = domain->nstrings;
while (bottom < top)
else
{
int cmp_val;
/* Try the default method: binary search in the sorted array of
messages. */
size_t top, bottom;
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;
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;
}
/* If an translation is found return this. */
return bottom >= top ? NULL : ((char *) domain->data
+ W (domain->must_swap,
domain->trans_tab[act].offset));
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
)
{
/* 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;
}
return result;
}

View file

@ -16,15 +16,19 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Tell glibc's <string.h> to provide a prototype for stpcpy().
This must come before <config.h> because <config.h> may include
<features.h>, and once <features.h> has been included, it's too late. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#if defined HAVE_STRING_H || defined _LIBC
# ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
# endif
# include <string.h>
#else
# include <strings.h>

View file

@ -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=");

View file

@ -46,9 +46,9 @@
# include <bits/libc-lock.h>
#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 @@ */

View file

@ -17,6 +17,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <alloca.h>
#include <string.h>
#include <libintl.h>
#include <rpcsvc/nis.h>

View file

@ -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 <drepper@cygnus.com>, 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)

View file

@ -1,2 +1,2 @@
[a-z]*.pot *.mo
*.mo
ttt

View file

@ -1 +0,0 @@
ChangeLog

View file

@ -1,4 +0,0 @@
crtbegin.S
crtbeginS.S
crtend.S
crtendS.S

View file

@ -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

View file

@ -1,68 +0,0 @@
/* Destructor cleanup code for elf64-sparc
Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 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

View file

@ -1 +0,0 @@
#include "crtbegin.S"

View file

@ -1,69 +0,0 @@
/* Constructor startup code for elf64-sparc
Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 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

View file

@ -1 +0,0 @@
#include "crtend.S"

View file

@ -1 +0,0 @@
=*