diff options
| author | Ulrich Drepper <drepper@redhat.com> | 1997-10-31 22:55:02 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 1997-10-31 22:55:02 +0000 |
| commit | 1cab5444231a4a1fab9c3abb107d22af4eb09327 (patch) | |
| tree | c58e953fe78f8094b3774b65eb2acf024cc10ded | |
| parent | fe4635fcae7a29fe688b048a2b1235bb89e05ec0 (diff) | |
| download | glibc-1cab5444231a4a1fab9c3abb107d22af4eb09327.tar.xz glibc-1cab5444231a4a1fab9c3abb107d22af4eb09327.zip | |
Update.cvs/libc-ud-971031
1997-10-31 23:16 Ulrich Drepper <drepper@cygnus.com>
* posix/glob.c (glob): If calling glob_in_dir for a list which was
generated by a glob call disable GLOB_ERR since there might be
non-directories in the list (PR203).
* posix/glob.h (GLOB_ONLYDIR): New flag.
(__GLOB_FLAGS): Add GLOB_ONLYDIR.
* posix/glob.c: Define HAVE_D_TYPE if _DIRENT_HAVE_D_TYPE is defined.
(glob): Add GLOB_ONLYDIR to recursive call to match dirname.
(glob_in_dir) [HAVE_D_TYPE]: While reading directory entries test
whether they are directories if GLOB_ONLYDIR flag is given.
* manual/pattern.texi: Document GLOB_ONLYDIR.
* misc/Makefile (tests): Add tst-fdset.
* sysdeps/i386/bits/select.h: Rewrite asm macros to be cleaner.
* sysdeps/unix/sysv/linux/Dist: Add xstatconv.c.
* sysdeps/unix/sysv/linux/alpha/Dist: Likewise.
* time/strptime.c (strptime_internal): In %y format, regard years
>= 69 as of twentieth century, all other as of twenty-first.
* time/tzset.c: Correct typo and little optimization.
1997-10-31 16:01 Ulrich Drepper <drepper@cygnus.com>
* inet/getnetgrent.c: Allocate buffer dynamically if needed.
Suggested by Joe Keane <jgk@jgk.org>.
1997-10-31 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* io/ftw.h: Declare __ftw64_func_t and __nftw64_func_t only when
__USE_FILE_OFFSET64 || __USE_LARGEFILE64 is true.
1997-10-30 05:47 Ulrich Drepper <drepper@cygnus.com>
* misc/mntent.c: Don't use statically allocated buffer. Allocate
it dynamically if necessary.
* misc/efgcvt.c: Likewise.
Patch by Joe Keane <jgk@jgk.org>.
* misc/mntent.c: Allow freeing of allocated buffer in
__libc_subfreeres.
* misc/efgcvt.c: Likewise.
* misc/efgcvt.c: Call correct reentrant functions.
Use better values for MAXDIG.
* misc/qefgcvt.c: Use better values for MAXDIG.
1997-10-29 18:48 Richard Henderson <rth@cygnus.com>
* sysdeps/unix/sysv/linux/Makefile [io]: Add xstatconv.
* sysdeps/unix/sysv/linux/alpha/xstatconv.c: New file. Convert
between kernel_stat and the userland version indicated.
* sysdeps/unix/sysv/linux/xstatconv.c: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Define _STAT_VER_KERNEL.
* sysdeps/unix/sysv/linux/fxstat.c: Defer to __xstat_conv. Alias
to __*xstat64 if requested.
* sysdeps/unix/sysv/linux/lxstat.c: Likewise.
* sysdeps/unix/sysv/linux/xstat.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Add struct stat64.
Increment _STAT_VER, and make struct stat the same.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Add __ino64_t, and
__off64_t. Reorganize.
* sysdeps/unix/sysv/linux/alpha/kernel_stat.h: Add struct glibc2_stat
for backward compatibility. Define XSTAT_IS_XSTAT64.
* sysdeps/unix/sysv/linux/alpha/fxstat64.c: Empty file.
* sysdeps/unix/sysv/linux/alpha/lxstat64.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xstat64.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h (struct dirent): For
consistency, force d_ino to use ino_t and supply padding.
1997-10-29 18:47 Richard Henderson <rth@cygnus.com>
* libio/iofopen.c: Correct weak_alias.
32 files changed, 711 insertions, 259 deletions
@@ -1,7 +1,7 @@ List of known bugs (certainly very incomplete) ---------------------------------------------- -Time-stamp: <1997-10-25T06:32:15+0200 drepper> +Time-stamp: <1997-10-31T16:49:39+0100 drepper> This following list contains those bugs which I'm aware of. Please make sure that bugs you report are not listed here. If you can fix one @@ -36,12 +36,6 @@ Severity: [ *] to [***] flag was given. [PR libc/72] -[ *] On Linux, the <linux/posix_types.h> is not clean enough to satisfy - the C++ namespace rules. Declaring `struct fd_set' also makes - `fd_set' available in the global namespace which conflicts with - the definition of `fd_set' in glibc. - [PR libc/79] - [ *] On Linux, there should be a way to prevent defining the symbol NGROUPS_MAX in the <linux/limits.h> header file. In glibc it is defined in <posix1_lim.h> which must not make the other @@ -69,13 +63,6 @@ Severity: [ *] to [***] with gcc. This seems to be a bug in gcc 2.7.2.x (egcs doesn't have this bug). [PR libc/245] - -[ *] gethostbyname returns HOST_NOT_FOUND if the nameserver is - unreachable and nsswitch.conf contains a line with: - hosts: files dns - If the only method is dns gethostbyname return - TRY_AGAIN. gethostbyname should return in both cases TRY_AGAIN. - [PR libc/244] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ulrich Drepper drepper@cygnus.com @@ -1,3 +1,85 @@ +1997-10-31 23:16 Ulrich Drepper <drepper@cygnus.com> + + * posix/glob.c (glob): If calling glob_in_dir for a list which was + generated by a glob call disable GLOB_ERR since there might be + non-directories in the list (PR203). + + * posix/glob.h (GLOB_ONLYDIR): New flag. + (__GLOB_FLAGS): Add GLOB_ONLYDIR. + * posix/glob.c: Define HAVE_D_TYPE if _DIRENT_HAVE_D_TYPE is defined. + (glob): Add GLOB_ONLYDIR to recursive call to match dirname. + (glob_in_dir) [HAVE_D_TYPE]: While reading directory entries test + whether they are directories if GLOB_ONLYDIR flag is given. + * manual/pattern.texi: Document GLOB_ONLYDIR. + + * misc/Makefile (tests): Add tst-fdset. + + * sysdeps/i386/bits/select.h: Rewrite asm macros to be cleaner. + + * sysdeps/unix/sysv/linux/Dist: Add xstatconv.c. + * sysdeps/unix/sysv/linux/alpha/Dist: Likewise. + + * time/strptime.c (strptime_internal): In %y format, regard years + >= 69 as of twentieth century, all other as of twenty-first. + + * time/tzset.c: Correct typo and little optimization. + +1997-10-31 16:01 Ulrich Drepper <drepper@cygnus.com> + + * inet/getnetgrent.c: Allocate buffer dynamically if needed. + Suggested by Joe Keane <jgk@jgk.org>. + +1997-10-31 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * io/ftw.h: Declare __ftw64_func_t and __nftw64_func_t only when + __USE_FILE_OFFSET64 || __USE_LARGEFILE64 is true. + +1997-10-30 05:47 Ulrich Drepper <drepper@cygnus.com> + + * misc/mntent.c: Don't use statically allocated buffer. Allocate + it dynamically if necessary. + * misc/efgcvt.c: Likewise. + Patch by Joe Keane <jgk@jgk.org>. + + * misc/mntent.c: Allow freeing of allocated buffer in + __libc_subfreeres. + * misc/efgcvt.c: Likewise. + + * misc/efgcvt.c: Call correct reentrant functions. + Use better values for MAXDIG. + * misc/qefgcvt.c: Use better values for MAXDIG. + +1997-10-29 18:48 Richard Henderson <rth@cygnus.com> + + * sysdeps/unix/sysv/linux/Makefile [io]: Add xstatconv. + * sysdeps/unix/sysv/linux/alpha/xstatconv.c: New file. Convert + between kernel_stat and the userland version indicated. + * sysdeps/unix/sysv/linux/xstatconv.c: Likewise. + * sysdeps/unix/sysv/linux/bits/stat.h: Define _STAT_VER_KERNEL. + + * sysdeps/unix/sysv/linux/fxstat.c: Defer to __xstat_conv. Alias + to __*xstat64 if requested. + * sysdeps/unix/sysv/linux/lxstat.c: Likewise. + * sysdeps/unix/sysv/linux/xstat.c: Likewise. + + * sysdeps/unix/sysv/linux/alpha/bits/stat.h: Add struct stat64. + Increment _STAT_VER, and make struct stat the same. + * sysdeps/unix/sysv/linux/alpha/bits/types.h: Add __ino64_t, and + __off64_t. Reorganize. + * sysdeps/unix/sysv/linux/alpha/kernel_stat.h: Add struct glibc2_stat + for backward compatibility. Define XSTAT_IS_XSTAT64. + + * sysdeps/unix/sysv/linux/alpha/fxstat64.c: Empty file. + * sysdeps/unix/sysv/linux/alpha/lxstat64.c: Likewise. + * sysdeps/unix/sysv/linux/alpha/xstat64.c: Likewise. + + * sysdeps/unix/sysv/linux/alpha/bits/dirent.h (struct dirent): For + consistency, force d_ino to use ino_t and supply padding. + +1997-10-29 18:47 Richard Henderson <rth@cygnus.com> + + * libio/iofopen.c: Correct weak_alias. + 1997-10-29 Andreas Jaeger <aj@arthur.rhein-neckar.de> * Makerules (install): Correct last patch. @@ -100,6 +100,10 @@ please let me know. [Q28] ``After upgrading to a glibc 2.1 with symbol versioning I get errors about undefined symbols. What went wrong?'' + +[Q29] ``I don't include any kernel header myself but still the + compiler complains about type redeclarations of types in the + kernel headers.'' ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [Q1] ``What systems does the GNU C Library run on?'' @@ -116,6 +120,8 @@ in the future are: m68k-*-linux-gnu Linux-2.0 on Motorola 680x0 alpha-*-linux-gnu Linux-2.0 on DEC Alpha powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems + sparc-*-linux-gnu Linux-2.0 on SPARC + sparc64-*-linux-gnu Linux-2.0 on UltraSPARC Other Linux platforms are also on the way to be supported but I need some success reports first. @@ -756,6 +762,21 @@ with symbol versioning. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ +[Q29] ``I don't include any kernel header myself but still the + compiler complains about type redeclarations of types in the + kernel headers.'' + +[A29] {UD} The kernel headers before Linux 2.1.61 don't work correctly with +glibc since they pollute the name space in a not acceptable way. Compiling +C programs is possible in most cases but especially C++ programs have (due +to the change of the name lookups for `struct's) problem. One prominent +example is `struct fd_set'. + +There might be some more problems left but 2.1.61 fixes some of the known +ones. See the BUGS file for other known problems. + + +~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Answers were given by: {UD} Ulrich Drepper, <drepper@cygnus.com> diff --git a/inet/getnetgrent.c b/inet/getnetgrent.c index c310e0128e..88b06ffc98 100644 --- a/inet/getnetgrent.c +++ b/inet/getnetgrent.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997 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 @@ -16,13 +16,48 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <errno.h> #include <netdb.h> +#include <stdlib.h> +#include <bits/libc-lock.h> +/* Statis buffer for return value. We allocate it when needed. */ +static char *buffer; +/* All three strings should fit in a block of 1kB size. */ +#define BUFSIZE 1024 + + + +static void +allocate (void) +{ + buffer = (char *) malloc (BUFSIZE); +} int getnetgrent (char **hostp, char **userp, char **domainp) { - static char buffer[1024]; /* All three strings shouldn't use 1kB. */ + __libc_once_define (static, once); + __libc_once (once, allocate); + + if (buffer == NULL) + { + __set_errno (ENOMEM); + return -1; + } - return __getnetgrent_r (hostp, userp, domainp, buffer, sizeof (buffer)); + return __getnetgrent_r (hostp, userp, domainp, buffer, BUFSIZE); } + + +/* Make sure the memory is freed if the programs ends while in + memory-debugging mode and something actually was allocated. */ +static void +__attribute__ ((unused)) +free_mem (void) +{ + if (buffer != NULL) + free (buffer); +} + +text_set_element (__libc_subfreeres, free_mem); @@ -88,16 +88,20 @@ struct FTW /* Convenient types for callback functions. */ typedef int (*__ftw_func_t) __P ((__const char *__filename, __const struct stat *__status, int __flag)); +#if defined __USE_LARGEFILE64 || defined __USE_FILE_OFFSET64 typedef int (*__ftw64_func_t) __P ((__const char *__filename, __const struct stat64 *__status, int __flag)); +#endif #ifdef __USE_XOPEN_EXTENDED typedef int (*__nftw_func_t) __P ((__const char *__filename, __const struct stat *__status, int __flag, struct FTW *__info)); +# if defined __USE_LARGEFILE64 || defined __USE_FILE_OFFSET64 typedef int (*__nftw64_func_t) __P ((__const char *__filename, __const struct stat64 *__status, int __flag, struct FTW *__info)); +# endif #endif /* Call a function on every element in a directory tree. */ diff --git a/libio/iofopen.c b/libio/iofopen.c index b74b6926c0..59d1ce571e 100644 --- a/libio/iofopen.c +++ b/libio/iofopen.c @@ -65,7 +65,7 @@ default_symbol_version (_IO_new_fopen, _IO_fopen, GLIBC_2.1); default_symbol_version (__new_fopen, fopen, GLIBC_2.1); #else # ifdef weak_alias -weak_symbol (_IO_new_fopen, _IO_fopen) -weak_symbol (_IO_new_fopen, fopen) +weak_alias (_IO_new_fopen, _IO_fopen) +weak_alias (_IO_new_fopen, fopen) # endif #endif diff --git a/manual/pattern.texi b/manual/pattern.texi index 596b72d4fa..0fc5e81c75 100644 --- a/manual/pattern.texi +++ b/manual/pattern.texi @@ -466,6 +466,21 @@ glob ("~homer/bin/*", GLOB_TILDE, NULL, &result) @end smallexample This functionality is equivalent to what is available in C-shells. + +@comment glob.h +@comment GNU +@item GLOB_ONLYDIR +If this flag is used the globbing function takes this as a +@strong{hint} that the caller is only interested in directories +matching the pattern. If the information about the type of the file +is easily available non-directories will be rejected but no extra +work will be done to determine the information for each file. I.e., +the caller must still be able to filter directories out. + +This functionality is only available witht eh GNU @code{glob} +implementation. It is mainly used internally to increase the +performance but might be useful for a user as well and therefore is +documented here. @end table Calling @code{glob} will in most cases allocate resources which are used diff --git a/misc/Makefile b/misc/Makefile index 4cca2f32c1..7975964471 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -64,7 +64,7 @@ install-lib := libbsd-compat.a libg.a non-lib.a := libbsd-compat.a gpl2lgpl := error.c error.h -tests := tst-dirname tst-tsearch +tests := tst-dirname tst-tsearch tst-fdset include ../Rules diff --git a/misc/efgcvt.c b/misc/efgcvt.c index 24d63176d0..8c92766c63 100644 --- a/misc/efgcvt.c +++ b/misc/efgcvt.c @@ -20,28 +20,60 @@ #include <stdio.h> #include <stdlib.h> #include <float.h> +#include <bits/libc-lock.h> #ifndef FLOAT_TYPE -#define FLOAT_TYPE double -#define FUNC_PREFIX -#define FLOAT_FMT_FLAG -#define MAXDIG (DBL_DIG + DBL_MAX_10_EXP) +# define FLOAT_TYPE double +# define FUNC_PREFIX +# define FLOAT_FMT_FLAG +/* Actually we have to write (DBL_DIG + log10 (DBL_MAX_10_EXP)) but we + don't have log10 available in the preprocessor. */ +# define MAXDIG (DBL_DIG + 3) #endif #define APPEND(a, b) APPEND2 (a, b) #define APPEND2(a, b) a##b +#define FCVT_BUFFER APPEND (FUNC_PREFIX, fcvt_buffer) +#define ECVT_BUFFER APPEND (FUNC_PREFIX, ecvt_buffer) + + +static char *FCVT_BUFFER; +static char *ECVT_BUFFER; + + +static void +APPEND (FUNC_PREFIX, fcvt_allocate) (void) +{ + FCVT_BUFFER = (char *) malloc (MAXDIG); +} + char * APPEND (FUNC_PREFIX, fcvt) (value, ndigit, decpt, sign) FLOAT_TYPE value; int ndigit, *decpt, *sign; { - static char buf[MAXDIG]; + __libc_once_define (static, once); + __libc_once (once, APPEND (FUNC_PREFIX, fcvt_allocate)); - (void) fcvt_r (value, ndigit, decpt, sign, buf, sizeof buf); + if (FCVT_BUFFER == NULL) + /* If no core is available we don't have a chance to run the + program successfully and so returning NULL is an acceptable + result. */ + return NULL; - return buf; + (void) APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, + FCVT_BUFFER, MAXDIG); + + return FCVT_BUFFER; +} + + +static void +APPEND (FUNC_PREFIX, ecvt_allocate) (void) +{ + ECVT_BUFFER = (char *) malloc (MAXDIG); } char * @@ -49,11 +81,19 @@ APPEND (FUNC_PREFIX, ecvt) (value, ndigit, decpt, sign) FLOAT_TYPE value; int ndigit, *decpt, *sign; { - static char buf[MAXDIG]; + __libc_once_define (static, once); + __libc_once (once, APPEND (FUNC_PREFIX, ecvt_allocate)); - (void) ecvt_r (value, ndigit, decpt, sign, buf, sizeof buf); + if (ECVT_BUFFER == NULL) + /* If no core is available we don't have a chance to run the + program successfully and so returning NULL is an acceptable + result. */ + return NULL; - return buf; + (void) APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, |
