diff options
48 files changed, 1830 insertions, 316 deletions
@@ -1,3 +1,120 @@ +1999-12-17 Ulrich Drepper <drepper@cygnus.com> + + * string/bits/string2.h (__strtok_r_1c): Help gcc optimizing string + access. + + * locale/programs/ld-collate.c: Implement handling of absolute + ellipsis. Parsing of file and constructing the internal data + structures should now be complete. + (collate_finish): Start adding support to generate the data + structures which are written out to the file. + + * intl/dcgettext.c: Rewrite to handle caching of previous results here + instead of in the dcgettext macro. + * intl/libintl.h (dcgettext): Don't define for systems using this + glibc or systems with tsearch. + + * sysdeps/generic/mathdef.h: Protect definitions for math.h + against double inclusion. + * sysdeps/alpha/fpu/bits/mathdef.h: Likewise. + * sysdeps/i386/fpu/bits/mathdef.h: Likewise. + * sysdeps/m68k/fpu/bits/mathdef.h: Likewise. + * sysdeps/powerpc/fpu/bits/mathdef.h: Likewise. + + * sysdeps/i386/fpu/libm-test-ulps: Add more deltas (are mobile PIIs + that different?). + +1999-12-17 Andreas Jaeger <aj@suse.de> + + * rt/aio.h (struct aiocb64): Add member __next_prio to sync the + struct with aiocb. + + * rt/Makefile (tests): Added tst-aio64. + Added dependency rules for tst-aio64. + + * rt/tst-aio64.c: New file, copied from tst-aio.c and changed for + 64bit tests. + +1999-12-15 Thorsten Kukuk <kukuk@suse.de> + + * sysdeps/unix/sysv/linux/alpha/oldgetrlimit64.c: Removed. + * sysdeps/unix/sysv/linux/alpha/oldsetrlimit64.c: Removed. + * sysdeps/unix/sysv/linux/bits/resource.h: Change RLIM_INFINITY back to + old value (signed long). + * sysdeps/unix/sysv/linux/i386/bits/resource.h: New, with unsigned + long RLIM_INFINITY. + * sysdeps/unix/sysv/linux/getrlimit.c: Moved from here to ... + * sysdeps/unix/sysv/linux/i386/getrlimit.c: ... here. + * sysdeps/unix/sysv/linux/getrlimit64.c: Moved from here to ... + * sysdeps/unix/sysv/linux/i386/getrlimit64.c: ... here. + * sysdeps/unix/sysv/linux/oldgetrlimit64.c: Moved from here to ... + * sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c: ... here. + * sysdeps/unix/sysv/linux/oldsetrlimit64.c: Moved from here to ... + * sysdeps/unix/sysv/linux/i386/oldsetrlimit64.c: ... here. + * sysdeps/unix/sysv/linux/setrlimit.c: Moved from here to ... + * sysdeps/unix/sysv/linux/i386/setrlimit.c: ... here. + * sysdeps/unix/sysv/linux/setrlimit64.c: Moved from here to ... + * sysdeps/unix/sysv/linux/i386/setrlimit64.c: ... here. + * sysdeps/unix/sysv/linux/sparc/bits/resource.h: New. + * sysdeps/unix/sysv/linux/sparc/sparc64/oldgetrlimit64.c: Removed. + * sysdeps/unix/sysv/linux/sparc/sparc64/oldsetrlimit64.c: Removed. + +1999-12-17 Andreas Jaeger <aj@suse.de> + + * elf/ldconfig.c: Add new option -l to manualy link shared + libraries. + (options): Added option. + (parse_opt): Set option. + (main): Handle option. + (manual_link): New function. + +1999-12-17 Thorsten Kukuk <kukuk@suse.de> + + * string/bits/string2.h: Fix patch from 1999-12-07. + +1999-12-16 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/generic/strsep.c: If delim string has only one character + don't run over end of string. + + * locale/programs/ld-collate.c (insert_weights): Also update next + pointer of last cursor element. + (insert_value): Return nonzero value if nothing got inserted. + (handle_ellipsis): Don't do anything if to-value cannot be inserted. + +1999-12-10 Jakub Jelinek <jakub@redhat.com> + + * stdlib/longlong.h (__sparc_v9__): Use %rDIGIT instead of %DIGIT + where appropriate. + +1999-12-10 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction): + Copy sa_flags into kernel sigaction structure. + +1999-12-14 Andreas Jaeger <aj@suse.de> + + * string/tester.c (test_strsep): More tests for access beyond + the final NUL. The first two tests come from PR libc/1486 by + martinea@iro.umontreal.ca. + +1999-12-14 Thorsten Kukuk <kukuk@suse.de> + + * nis/ypclnt.c: Correct handling of cached client handles. + (__xdr_ypresp_all): Call callback function for errors, too, + like Solaris does. + * nis/nss_compat/compat-grp.c: Make sure errno is always set correct. + * nis/nss_compat/compat-initgroups.c: Likewise. + * nis/nss_compat/compat-spwd.c: Likewise. + * nis/nss_nis/nis-alias.c: Likewise. + * nis/nss_nis/nis-ethers.c: Likewise. + * nis/nss_nis/nis-grp.c: Likewise. + * nis/nss_nis/nis-hosts.c: Likewise. + * nis/nss_nis/nis-netgrp.c: Likewise. + * nis/nss_nis/nis-publickey.c: Likewise. + * nis/nss_nis/nis-service.c: Likewise. Also use services.byservicename + Map if available, optimize query if name/port and protocol is known. + 1999-12-12 Ulrich Drepper <drepper@cygnus.com> * locale/programs/ld-collate.c (collate_read): Make symbolic diff --git a/bits/mathdef.h b/bits/mathdef.h index d306e54366..0c30b01f52 100644 --- a/bits/mathdef.h +++ b/bits/mathdef.h @@ -20,7 +20,9 @@ # error "Never use <bits/mathdef.h> directly; include <math.h> instead" #endif -#if defined __USE_ISOC99 && defined _MATH_H +#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF +# define _MATH_H_MATHDEF 1 + /* Normally, there is no long double type and the `float' and `double' expressions are evaluated as `double'. */ typedef double float_t; /* `float' expressions are evaluated as diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 6c2bcb2d4f..98a4817202 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -97,6 +97,9 @@ static int opt_only_cline = 0; /* Path to root for chroot. */ static char *opt_chroot; +/* Manually link given shared libraries. */ +static int opt_manual_link = 0; + /* Cache file to use. */ static const char *cache_file; @@ -119,6 +122,7 @@ static const struct argp_option options[] = { NULL, 'C', "CACHE", 0, N_("Use CACHE as cache file"), 0}, { NULL, 'f', "CONF", 0, N_("Use CONF as configuration file"), 0}, { NULL, 'n', NULL, 0, N_("Only process directories specified on the command line. Don't build cache."), 0}, + { NULL, 'l', NULL, 0, N_("Manually link individual libraries."), 0}, { NULL, 0, NULL, 0, NULL, 0 } }; @@ -148,6 +152,9 @@ parse_opt (int key, char *arg, struct argp_state *state) case 'f': config_file = arg; break; + case 'l': + opt_manual_link = 1; + break; case 'N': opt_build_cache = 0; break; @@ -323,6 +330,75 @@ create_links (const char *path, const char *libname, const char *soname) fputs ("\n", stdout); } +/* Manually link the given library. */ +static void +manual_link (char *library) +{ + char *path; + char *libname; + char *soname; + struct stat stat_buf; + int flag; + + /* Prepare arguments for create_links call. Split library name in + directory and filename first. Since path is allocated, we've got + to be careful to free at the end. */ + path = xstrdup (library); + libname = strrchr (path, '/'); + + if (libname) + { + /* Successfully split names. Check if path is just "/" to avoid + an empty path. */ + if (libname == path) + { + libname = library + 1; + path = xrealloc (path, 2); + strcpy (path, "/"); + } + else + { + *libname = '\0'; + ++libname; + } + } + else + { + /* There's no path, construct one. */ + libname = library; + path = xrealloc (path, 2); + strcpy (path, "."); + } + + /* Do some sanity checks first. */ + if (lstat (library, &stat_buf)) + { + error (0, errno, _("Can't lstat %s"), library); + free (path); + return; + } + /* We don't want links here! */ + else if (!S_ISREG (stat_buf.st_mode)) + { + error (0, 0, _("Ignored file %s since it is not a regular file."), + library); + free (path); + return; + } + libname = basename (library); + if (process_file (library, libname, &flag, &soname, 0)) + { + error (0, 0, _("No link created since soname could not be found for %s"), + library); + free (path); + return; + } + create_links (path, libname, soname); + free (soname); + free (path); +} + + /* Read a whole directory and search for libraries. The purpose is two-fold: - search for libraries which will be added to the cache @@ -595,8 +671,9 @@ main (int argc, char **argv) /* Parse and process arguments. */ argp_parse (&argp, argc, argv, 0, &remaining, NULL); - /* Remaining arguments are additional libraries. */ - if (remaining != argc) + /* Remaining arguments are additional libraries if opt_manual_link + is not set. */ + if (remaining != argc && !opt_manual_link) { int i; for (i = remaining; i < argc; ++i) @@ -626,6 +703,18 @@ main (int argc, char **argv) exit (0); } + if (opt_manual_link) + { + /* Link all given libraries manually. */ + int i; + + for (i = remaining; i < argc; ++i) + manual_link (argv [i]); + + exit (0); + } + + if (opt_build_cache) init_cache (); diff --git a/intl/dcgettext.c b/intl/dcgettext.c index d482da39b8..8e51970495 100644 --- a/intl/dcgettext.c +++ b/intl/dcgettext.c @@ -121,6 +121,9 @@ char *getcwd (); # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif +# ifndef HAVE_MEMPCPY +static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); +# endif #endif /* Amount to increase buffer size by in each try. */ @@ -130,7 +133,7 @@ static char *stpcpy PARAMS ((char *dest, const char *src)); /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ -#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) +#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) # include <limits.h> #endif @@ -138,16 +141,16 @@ static char *stpcpy PARAMS ((char *dest, const char *src)); # define _POSIX_PATH_MAX 255 #endif -#if !defined(PATH_MAX) && defined(_PC_PATH_MAX) +#if !defined PATH_MAX && defined _PC_PATH_MAX # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ -#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) +#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif -#if !defined(PATH_MAX) && def |
