diff options
-rw-r--r-- | .cvsignore | 2 | ||||
-rw-r--r-- | ChangeLog | 67 | ||||
-rw-r--r-- | FAQ.in | 2 | ||||
-rw-r--r-- | assert/assert-perr.c | 8 | ||||
-rw-r--r-- | catgets/open_catalog.c | 10 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | elf/dl-error.c | 5 | ||||
-rw-r--r-- | elf/dl-minimal.c | 32 | ||||
-rw-r--r-- | elf/dl-profile.c | 10 | ||||
-rw-r--r-- | gmon/gmon.c | 4 | ||||
-rw-r--r-- | libc.map | 13 | ||||
-rw-r--r-- | libio/fcloseall.c | 5 | ||||
-rw-r--r-- | libio/genops.c | 8 | ||||
-rw-r--r-- | libio/libioP.h | 2 | ||||
-rw-r--r-- | manual/creature.texi | 8 | ||||
-rw-r--r-- | manual/socket.texi | 6 | ||||
-rw-r--r-- | manual/time.texi | 4 | ||||
-rw-r--r-- | posix/regex.c | 22 | ||||
-rw-r--r-- | rt/tst-aio.c | 41 | ||||
-rw-r--r-- | stdio-common/perror.c | 6 | ||||
-rw-r--r-- | stdio-common/vfprintf.c | 8 | ||||
-rw-r--r-- | stdlib/Makefile | 2 | ||||
-rw-r--r-- | stdlib/canonicalize.c | 26 | ||||
-rw-r--r-- | stdlib/test-canon2.c | 74 | ||||
-rw-r--r-- | string/Makefile | 4 | ||||
-rw-r--r-- | string/strerror.c | 6 | ||||
-rw-r--r-- | string/strerror_r.c | 31 | ||||
-rw-r--r-- | sysdeps/generic/_strerror.c | 7 | ||||
-rw-r--r-- | sysdeps/mach/_strerror.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 4 | ||||
-rw-r--r-- | test-skeleton.c | 11 |
32 files changed, 278 insertions, 157 deletions
diff --git a/.cvsignore b/.cvsignore index 7654da865a..b907f7a024 100644 --- a/.cvsignore +++ b/.cvsignore @@ -17,9 +17,9 @@ distinfo test-include analysis docs +releases crypt linuxthreads -secure_rpc aio @@ -1,3 +1,70 @@ +1998-04-14 16:34 Ulrich Drepper <drepper@cygnus.com> + + * test-skeleton.c: Provide hook for initializing code before the fork. + * rt/tst-aio.c: Use PREPARE hook to make suer temp files are always + removed. + + * libio/fcloseall.c (__fcloseall): Return return value of _IO_cleanup. + * libio/genops.c (_IO_cleanup): Return return value of _IO_flush_all. + * libio/libioP.h: Adopt _IO_cleanup prototype. + + * stdlib/Makefile (tests): Add test-canon2. + * stdlib/test-canon2.c: New file. + * stdlib/canonicalize.c (canonicalize): Allow RESOLVED parameter to + be NULL. Use __lxstat, not __lstat. Correctly recognize long + symlink sequences. + (__realpath): Make real function which checks RESOLVED parameter for + not being NULL. + +1998-04-14 Ulrich Drepper <drepper@cygnus.com> + + * catgets/open_catalog.c (__open_catalog): Fix problems with + reading non-files. Always close file. + Reported by Cristian Gafton <gafton@redhat.com>. + + * elf/dl-minimal.c (__strtol_internal): Prevent overflow warnings. + +1998-04-14 13:28 Ulrich Drepper <drepper@cygnus.com> + + * libc.map: Add various low-level I/O functions. + +1998-04-14 10:35 Ulrich Drepper <drepper@cygnus.com> + + * string/Makefile (routines): Remove strerror_r. + * string/strerror_r.c: Removed. + * string/strerror.c: Call __strerror_r for doing the real work. + * sysdeps/generic/_strerror.c: Rename function to __strerror_r and + add weak alias strerror_r. + * sysdeps/mach/_strerror.c: Likewise. + * assert/assert-perr.c: Use __strerror_r instead of _strerror_internal. + * elf/dl-error.c (_dl_signal_error): Likewise. + * elf/dl-profile.c (_dl_start_profile): Likewise. + * gmon/gmon.c (write_gmon): Likewise. + * stdio-common/perror.c: Likewise. + * stdio-common/vfprintf.c: Likewise. + +1998-04-10 Mark Kettenis <kettenis@phys.uva.nl> + + * sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet] + (sysdep_headers): Add netatalk/at.h. + +1998-04-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * manual/socket.texi, manual/creature.texi, manual/time.texi: + Formatting fixes. + +1998-04-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * posix/regex.c: Rename __re_syntax_options back to + re_syntax_options, aliases do not work with global variables due + to copy relocations. + (regex_compile): Use syntax parameter instead of + re_syntax_options. + +1998-04-14 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * configure.in: Document that enable-force-install is default. + 1998-04-13 Ulrich Drepper <drepper@cygnus.com> * sysdeps/posix/mktemp.c: Increment `value' in a way which touches @@ -945,7 +945,7 @@ Also, make sure you have a suitably recent kernel. As of the 970401 snapshot, according to Philip Blundell <Philip.Blundell@pobox.com>, the required kernel version is at least 2.1.30. -?? When I set the timezone I'm by setting the TZ environment variable +?? When I set the timezone by setting the TZ environment variable to EST5EDT things go wrong since glibc computes the wrong time from this information. diff --git a/assert/assert-perr.c b/assert/assert-perr.c index 246727ee94..cdc07b56f9 100644 --- a/assert/assert-perr.c +++ b/assert/assert-perr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1995, 1996, 1997, 1998 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 @@ -22,10 +22,6 @@ #include <sysdep.h> -/* This is the internal function we use to generate the error string. */ -extern char *_strerror_internal __P ((int, char *, size_t)); - - extern const char *__assert_program_name; /* In assert.c. */ /* This function, when passed an error number, a filename, and a line @@ -53,7 +49,7 @@ __assert_perror_fail (int errnum, __assert_program_name ? ": " : "", file, line, function ? function : "", function ? ": " : "", - _strerror_internal (errnum, errbuf, sizeof errbuf)); + __strerror_r (errnum, errbuf, sizeof errbuf)); (void) fflush (stderr); abort (); diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c index 62fb111e43..2197eb8363 100644 --- a/catgets/open_catalog.c +++ b/catgets/open_catalog.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>. @@ -35,7 +35,7 @@ void __open_catalog (__nl_catd catalog) { - int fd; + int fd = -1; struct stat st; int swapping; @@ -169,7 +169,8 @@ __open_catalog (__nl_catd catalog) } } - if (fd < 0 || __fstat (fd, &st) < 0) + /* Avoid dealing with directories and block devices */ + if (fd < 0 || __fstat (fd, &st) < 0 || !S_ISREG (st.st_mode)) { catalog->status = nonexisting; goto unlock_return; @@ -225,6 +226,7 @@ __open_catalog (__nl_catd catalog) /* We don't need the file anymore. */ __close (fd); + fd = -1; /* Determine whether the file is a catalog file and if yes whether it is written using the correct byte order. Else we have to swap @@ -271,5 +273,7 @@ __open_catalog (__nl_catd catalog) /* Release the lock again. */ unlock_return: + if (fd != -1) + __close (fd); __libc_lock_unlock (catalog->lock); } @@ -63,7 +63,7 @@ ac_help="$ac_help ac_help="$ac_help --enable-static-nss build static NSS modules [default=no]" ac_help="$ac_help - --enable-force-install force installation of files from this package, + --disable-force-install don't force installation of files from this package, even if they are older than the installed files" # Initialize some variables set by options. diff --git a/configure.in b/configure.in index 6d17bb30cb..86eec3c942 100644 --- a/configure.in +++ b/configure.in @@ -128,7 +128,7 @@ if test x"$static_nss" = xyes; then fi AC_ARG_ENABLE(force-install, -[ --enable-force-install force installation of files from this package, +[ --disable-force-install don't force installation of files from this package, even if they are older than the installed files], force_install=$enableval, force_install=yes) AC_SUBST(force_install) diff --git a/elf/dl-error.c b/elf/dl-error.c index 446ba627b5..03292abaf4 100644 --- a/elf/dl-error.c +++ b/elf/dl-error.c @@ -23,9 +23,6 @@ #include <unistd.h> #include <elf/ldsodefs.h> -/* This is the internal function we use to generate the error string. */ -extern char *_strerror_internal __P ((int, char *, size_t)); - /* This structure communicates state between _dl_catch_error and _dl_signal_error. */ struct catch @@ -89,7 +86,7 @@ _dl_signal_error (int errcode, objname ?: "", objname && *objname ? ": " : "", errstring, errcode ? ": " : "", (errcode - ? _strerror_internal (errcode, buffer, sizeof buffer) + ? __strerror_r (errcode, buffer, sizeof buffer) : ""), "\n", NULL); } } diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c index 4c15d83f8e..c9a0575fd0 100644 --- a/elf/dl-minimal.c +++ b/elf/dl-minimal.c @@ -131,7 +131,7 @@ longjmp (jmp_buf env, int val) in the whole error list. */ char * weak_function -_strerror_internal (int errnum, char *buf, size_t buflen) +__strerror_r (int errnum, char *buf, size_t buflen) { char *msg; @@ -205,11 +205,10 @@ __assert_perror_fail (int errnum, #endif /* This function is only used in eval.c. */ -long int -weak_function +long int weak_function __strtol_internal (const char *nptr, char **endptr, int base, int group) { - long int result = 0; + unsigned long int result = 0; long int sign = 1; while (*nptr == ' ' || *nptr == '\t') @@ -246,10 +245,14 @@ __strtol_internal (const char *nptr, char **endptr, int base, int group) while (*nptr >= '0' && *nptr <= '9') { - long int digval = *nptr - '0'; + unsigned long int digval = *nptr - '0'; if (result > LONG_MAX / 10 - || (result == (sign ? LONG_MAX : LONG_MAX + 1) / 10 - && digval > (sign ? LONG_MAX : LONG_MAX + 1) % 10)) + || (result == (sign + ? (unsigned long int) LONG_MAX + : (unsigned long int) LONG_MAX + 1) / 10 + && digval > (sign + ? (unsigned long int) LONG_MAX + : (unsigned long int) LONG_MAX + 1) % 10)) { errno = ERANGE; return LONG_MAX * sign; @@ -258,21 +261,19 @@ __strtol_internal (const char *nptr, char **endptr, int base, int group) result += digval; } - return result * sign; + return (long int) result * sign; } -long int -weak_function +long int weak_function strtol (const char *nptr, char **endptr, int base) { return __strtol_internal (nptr, endptr, base, 0); } -unsigned long int -weak_function +unsigned long int weak_function __strtoul_internal (const char *nptr, char **endptr, int base, int group) { - long int result = 0; + unsigned long int result = 0; long int sign = 1; while (*nptr == ' ' || *nptr == '\t') @@ -309,7 +310,7 @@ __strtoul_internal (const char *nptr, char **endptr, int base, int group) while (*nptr >= '0' && *nptr <= '9') { - long int digval = *nptr - '0'; + unsigned long int digval = *nptr - '0'; if (result > LONG_MAX / 10 || (result == ULONG_MAX / 10 && digval > ULONG_MAX % 10)) { @@ -323,8 +324,7 @@ __strtoul_internal (const char *nptr, char **endptr, int base, int group) return result * sign; } -unsigned long int -weak_function +unsigned long int weak_function strtoul (const char *nptr, char **endptr, int base) { return (unsigned long int) __strtoul_internal (nptr, endptr, base, 0); diff --git a/elf/dl-profile.c b/elf/dl-profile.c index 669fee7a43..c7ac360811 100644 --- a/elf/dl-profile.c +++ b/elf/dl-profile.c @@ -124,8 +124,6 @@ extern ssize_t __libc_write __P ((int __fd, __const __ptr_t __buf, data structures at the program start. To do this we'll simply visit all entries in the call graph table and add it to the appropriate list. */ -extern char *_strerror_internal __P ((int, char *buf, size_t)); - extern int __profile_frequency __P ((void)); /* We define a special type to address the elements of the arc table. @@ -271,7 +269,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir) /* We cannot write the profiling data so don't do anything. */ char buf[400]; _dl_sysdep_message (filename, ": cannot open file: ", - _strerror_internal (errno, buf, sizeof buf), + __strerror_r (errno, buf, sizeof buf), "\n", NULL); return; } @@ -283,7 +281,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir) int errnum = errno; __close (fd); _dl_sysdep_message (filename, ": cannot stat file: ", - _strerror_internal (errnum, buf, sizeof buf), + __strerror_r (errnum, buf, sizeof buf), "\n", NULL); return; } @@ -305,7 +303,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir) errnum = errno; __close (fd); _dl_sysdep_message (filename, ": cannot create file: ", - _strerror_internal (errnum, buf, sizeof buf), + __strerror_r (errnum, buf, sizeof buf), "\n", NULL); return; } @@ -337,7 +335,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir) int errnum = errno; __close (fd); _dl_sysdep_message (filename, ": cannot map file: ", - _strerror_internal (errnum, buf, sizeof buf), + __strerror_r (errnum, buf, sizeof buf), "\n", NULL); return; } diff --git a/gmon/gmon.c b/gmon/gmon.c index 0087e8c0f7..834351eeec 100644 --- a/gmon/gmon.c +++ b/gmon/gmon.c @@ -46,8 +46,6 @@ #include <string.h> #include <unistd.h> -extern char *_strerror_internal __P ((int, char *buf, size_t)); - extern int __profile_frequency __P ((void)); struct __bb *__bb_head; /* Head of basic-block list or NULL. */ @@ -330,7 +328,7 @@ write_gmon (void) char buf[300]; int errnum = errno; fprintf (stderr, "_mcleanup: gmon.out: %s\n", - _strerror_internal (errnum, buf, sizeof buf)); + __strerror_r (errnum, buf, sizeof buf)); return; } } @@ -146,7 +146,8 @@ GLIBC_2.0 { # b* basename; bcmp; bcopy; bdflush; bind; bindresvport; - bindtextdomain; brk; bsd_signal; bsearch; btowc; bzero; + bindtextdomain; brk; bsd_signal; bsearch; btowc; bus_base; bus_base_sparse; + bzero; # c* cachectl; cacheflush; calloc; callrpc; canonicalize_file_name; @@ -225,14 +226,14 @@ GLIBC_2.0 { globfree; gmtime; gmtime_r; group_member; gsignal; gtty; # h* - hasmntopt; hcreate; hcreate_r; hdestroy; hdestroy_r; herror; + hae_shift; hasmntopt; hcreate; hcreate_r; hdestroy; hdestroy_r; herror; hsearch; hsearch_r; hstrerror; htonl; htons; # i* - index; inet_addr; inet_aton; inet_lnaof; inet_makeaddr; + inb; index; inet_addr; inet_aton; inet_lnaof; inet_makeaddr; inet_netof; inet_network; inet_nsap_addr; inet_nsap_ntoa; inet_ntoa; inet_ntop; inet_pton; init_module; initgroups; initstate; initstate_r; - innetgr; insque; ioctl; ioperm; iopl; iruserok; + inl; innetgr; insque; inw; ioctl; ioperm; iopl; iruserok; isalnum; isalpha; isascii; isatty; isblank; iscntrl; isdigit; isfdtype; isgraph; isinf; isinff; isinfl; islower; isnan; isnanf; @@ -275,7 +276,7 @@ GLIBC_2.0 { # o* obstack_free; obstack_printf; obstack_vprintf; on_exit; open; - open_memstream; opendir; openlog; + open_memstream; opendir; openlog; outb; outl; outw; # p* parse_printf_format; pathconf; pause; pciconfig_read; @@ -328,7 +329,7 @@ GLIBC_2.0 { semctl; semget; semop; send; sendmsg; sendto; setaliasent; setbuf; setbuffer; setcontext; setdomainname; setegid; setenv; seteuid; setfsent; - setfsgid; setfsuid; setgid; setgrent; setgroups; sethostent; + setfsgid; setfsuid; setgid; setgrent; setgroups; sethae; sethostent; sethostid; sethostname; setitimer; setjmp; setlinebuf; setlocale; setlogin; setlogmask; setmntent; setnetent; setnetgrent; setpgid; setpgrp; setpriority; setprotoent; setpwent; setregid; setresgid; diff --git a/libio/fcloseall.c b/libio/fcloseall.c index cd01655450..9b980c6cde 100644 --- a/libio/fcloseall.c +++ b/libio/fcloseall.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -30,8 +30,7 @@ int __fcloseall () { /* Close all streams. */ - _IO_cleanup (); - return 0; + return _IO_cleanup (); } #ifdef weak_alias diff --git a/libio/genops.c b/libio/genops.c index ea602eda39..b0334d6d0e 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -714,10 +714,10 @@ _IO_unbuffer_all () _IO_SETBUF (fp, NULL, 0); } -void +int _IO_cleanup () { - _IO_flush_all (); + int result = _IO_flush_all (); /* We currently don't have a reliable mechanism for making sure that C++ static destructors are executed in the correct order. @@ -727,6 +727,8 @@ _IO_cleanup () The following will make the standard streambufs be unbuffered, which forces any output from late destructors to be written out. */ _IO_unbuffer_all (); + + return result; } diff --git a/libio/libioP.h b/libio/libioP.h index 0452c7758f..8e8e61843a 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -341,7 +341,7 @@ extern struct _IO_jump_t _IO_str_jumps; extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); extern int _IO_old_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); extern int _IO_flush_all __P ((void)); -extern void _IO_cleanup __P ((void)); +extern int _IO_cleanup __P ((void)); extern void _IO_flush_all_linebuffered __P ((void)); #define _IO_do_flush(_f) \ diff --git a/manual/creature.texi b/manual/creature.texi index 4cdcce99b0..66e53aceb4 100644 --- a/manual/creature.texi +++ b/manual/creature.texi @@ -131,7 +131,7 @@ This macro was introduced as part of the Large File Support extension (LFS). @comment (NONE) @comment X/Open -@defvar Macro _LARGEFILE64_SOURCE +@defvr Macro _LARGEFILE64_SOURCE If you define this macro an additional set of function gets available which enables to use on @w{32 bit} systems to use files of sizes beyond the usual limit of 2GB. This interface is not available if the system @@ -147,11 +147,11 @@ vs. @code{off64_t} and @code{fseeko} vs. @code{fseeko64}. This macro was introduced as part of the Large File Support extension (LFS). It is a transition interface for the time @w{64 bit} offsets are not generally used (see @code{_FILE_OFFSET_BITS}. -@end defvar +@end defvr @comment (NONE) @comment X/Open -@defvar _FILE_OFFSET_BITS +@defvr _FILE_OFFSET_BITS This macro lets decide which file system interface shall be used, one replacing the other. While @code{_LARGEFILE64_SOURCE} makes the @w{64 bit} interface available as an additional interface @@ -175,7 +175,7 @@ since the @code{*64} functions are identical to the normal functions. This macro was introduced as part of the Large File Support extension (LFS). -@end defvar +@end defvr @comment (none) @comment GNU diff --git a/manual/socket.texi b/manual/socket.texi index ffecc992d5..0eab88a4b2 100644 --- a/manual/socket.texi +++ b/manual/socket.texi @@ -497,7 +497,7 @@ interface name, including its terminating zero byte. @comment net/if.h @comment IPv6 basic API -@deftypefun unsigned int if_nametoindex (const char *ifname) +@deftypefun {unsigned int} if_nametoindex (const char *ifname) This function yields the interface index corresponding to a particular name. If no interface exists with the name given, it returns 0. @end deftypefun @@ -530,7 +530,7 @@ This is the null-terminated index name. @comment net/if.h @comment IPv6 basic API -@deftypefun struct if_nameindex *if_nameindex (void) +@deftypefun {struct if_nameindex *} if_nameindex (void) This function returns an array of @code{if_nameindex} structures, one for every interface that is present. The end of the list is indicated by a structure with an interface of 0 and a null name pointer. If an @@ -999,7 +999,7 @@ data, which can be accessed (via a union) in a variety of ways. @comment netinet/in.h @comment IPv6 basic API -@deftypevr Constant {struct in6_addr} in6addr_loopback. +@deftypevr Constant {struct in6_addr} in6addr_loopback This constant is the IPv6 address @samp{::1}, the loopback address. See above for a description of what this means. The macro @code{IN6ADDR_LOOPBACK_INIT} is provided to allow you to initialise your diff --git a/manual/time.texi b/manual/time.texi index e280716304..5da12c4513 100644 --- a/manual/time.texi +++ b/manual/time.texi @@ -1775,10 +1775,10 @@ operand must be less than @code{RLIM_NLIMITS}. @comment sys/resource.h @comment BSD -@defvr Constant int RLIM_INFINITY +@deftypevr Constant int RLIM_INFINITY This constant stands for a value of ``infinity'' when supplied as the limit value in @code{setrlimit}. -@end defvr +@end deftypevr @c ??? Someone want to finish these? Two historical functions for setting resource limits, @code{ulimit} and diff --git a/posix/regex.c b/posix/regex.c index d29a4bf61e..b7fb962d61 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -966,15 +966,9 @@ printchar (c) /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ -#ifdef _LIBC -reg_syntax_t __re_syntax_options = 0; -weak_alias (__re_syntax_options, re_syntax_options) -# define re_syntax_options __re_syntax_options -#else /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; -#endif /* Specify the precise syntax of regexps for compilation. This provides @@ -2752,7 +2746,7 @@ regex_compile (pattern, size, syntax, bufp) case 'w': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; laststart = b; BUF_PUSH (wordchar); @@ -2760,7 +2754,7 @@ regex_compile (pattern, size, syntax, bufp) case 'W': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; laststart = b; BUF_PUSH (notwordchar); @@ -2768,37 +2762,37 @@ regex_compile (pattern, size, syntax, bufp) case '<': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordbeg); break; case '>': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordend); break; case 'b': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordbound); break; case 'B': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (notwordbound); break; case '`': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (begbuf); break; case '\'': - if (re_syntax_options & RE_NO_GNU_OPS) + if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (endbuf); break; diff --git a/rt/tst-aio.c b/rt/tst-aio.c index 83833ee117..a6c0762a2a 100644 --- a/rt/tst-aio.c +++ b/rt/tst-aio.c @@ -26,9 +26,12 @@ #include <sys/stat.h> -/* prototype for our test function. */ +/* Prototype for our test function. */ +extern void do_prepare (int argc, char *argv[]); extern int do_test (int argc, char *argv[]); +/* We have a preparation function. */ +#define PREPARE do_prepare /* We might need a bit longer timeout. */ #define TIMEOUT 20 /* sec */ @@ -37,6 +40,28 @@ extern int do_test (int argc, char *argv[]); #include <test-skeleton.c> +/* These are for the temporary file we generate. */ +char *name; +int fd; + +void +do_prepare (int argc, char *argv[]) +{ + char name_len; + + name_len = strlen (test_dir); + name = malloc (name_len + sizeof ("/aioXXXXXX")); + mempcpy (mempcpy (name, test_dir, name_len), + "/aioXXXXXX", sizeof ("/aioXXXXXX")); + add_temp_file (name); + + /* Open our test file. */ + fd = mkstemp (name); + if (fd == -1) + error (EXIT_FAILURE, errno, "cannot open test file `%s'", name); +} + + int test_file (const void *buf, size_t size, int fd, const char *msg) { @@ -98,26 +123,12 @@ do_wait (struct aiocb **cbp, size_t nent) int do_test (int argc, char *argv[]) { - char *name; - char name_len; struct aiocb cbs[10]; struct aiocb *cbp[10]; char buf[1000]; size_t cnt; - int fd; int result = 0; - name_len = strlen (test_dir); - name = malloc (name_len + sizeof ("/aioXXXXXX")); - mempcpy (mempcpy (name, test_dir, name_len), - "/aioXXXXXX", sizeof ("/aioXXXXXX")); - add_temp_file (name); - - /* Open our test file. */ - fd = mkstemp (name); - if (fd == -1) - error (EXIT_FAILURE, errno, "cannot open test file `%s'", name); - /* Preparation. */ for (cnt = 0; cnt < 10; ++cnt) { diff --git a/stdio-common/perror.c b/stdio-common/perror.c index e7db55ae80..4b29f5286a 100644 --- a/stdio-common/perror.c +++ b/stdio-common/perror.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1997, 1998 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 @@ -19,8 +19,6 @@ #include <stdio.h> #include <errno.h> -extern char *_strerror_internal __P ((int, char *buf, size_t)); - /* Print a line on stderr consisting of the text in S, a colon, a space, a message describing the meaning of the contents of `errno' and a newline. If S is NULL or "", the colon and space are omitted. */ @@ -37,5 +35,5 @@ perror (const char *s) colon = ": "; (void) fprintf (stderr, "%s%s%s\n", - s, colon, _strerror_internal (errnum, buf, sizeof buf)); + s, colon, __strerror_r (errnum, buf, sizeof buf)); } diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index e13785f3a3..d8d0f87b0f 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -966,12 +966,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) \ LABEL (form_strerror): \ /* Print description of error ERRNO. */ \ - { \ - extern char *_strerror_internal __P ((int, char *buf, size_t)); \ - \ - string = (char *) \ - _strerror_internal (save_errno, work_buffer, sizeof work_buffer); \ - } \ + string = \ + (char *) __strerror_r (save_errno, work_buffer, sizeof work_buffer); \ is_long = 0; /* This is no wide-char string. */ \ goto LABEL (print_string) diff --git a/stdlib/Makefile b/stdlib/Makefile index 85a5347d32..91eaf60cfc 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -51,7 +51,7 @@ routines := \ distribute := exit.h grouping.h abort-instr.h isomac.c tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ - test-canon + test-canon test-canon2 # Several mpn functions from GNU MP are used by the strtod function. diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c index ef7311e90d..faf4422f18 100644 --- a/stdlib/canonicalize.c +++ b/stdlib/canonicalize.c @@ -45,10 +45,12 @@ canonicalize (const char *name, char *resolved) long int path_max; int num_links = 0; - if (name == NULL || resolved == NULL) + if (name == NULL) { /* As per Single Unix Specification V2 we must return an error if - either parameter is a null pointer. */ + either parameter is a null pointer. We extend this to allow + the RESOLVED parameter be NULL in case the we are expected to + allocate the room for the return value. */ __set_errno (EINVAL); return NULL; } @@ -133,7 +135,7 @@ canonicalize (const char *name, char *resolved) dest = __mempcpy (dest, start, end - start); *dest = '\0'; - if (__lstat (rpath, &st) < 0) + if (__lxstat (_STAT_VER, rpath, &st) < 0) goto error; if (S_ISLNK (st.st_mode)) @@ -174,8 +176,6 @@ canonicalize (const char *name, char *resolved) if (dest > rpath + 1) while ((--dest)[-1] != '/'); } - else - num_links = 0; } } if (dest > rpath + 1 && dest[-1] == '/') @@ -191,8 +191,20 @@ error: free (rpath); return NULL; } -strong_alias (canonicalize, __realpath) -weak_alias (canonicalize, realpath) + + +char * +__realpath (const char *name, char *resolved) +{ + if (resolved == NULL) + { + __set_errno (EINVAL); + return NULL; + } + + return canonicalize (name, resolved); +} +weak_alias (__realpath, realpath) char * diff --git a/stdlib/test-canon2.c b/stdlib/test-canon2.c new file mode 100644 index 0000000000..0dc16154b2 --- /dev/null +++ b/stdlib/test-canon2.c @@ -0,0 +1,74 @@ +/* Test for realpath/canonicalize function. + Copyright (C) 1998 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. + + 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. */ + +#include <errno.h> +#include <string.h> + + +/* Prototype for our test function. */ +extern void do_prepare (int argc, char *argv[]); +extern int do_test (int argc, char *argv[]); + +/* We have a preparation function. */ +#define PREPARE do_prepare + +#include <test-skeleton.c> + +/* Name of the temporary files we create. */ +char *name1; +char *name2; + +/* Preparation. */ +void +do_prepare (int argc, char *argv[]) +{ + char test_dir_len; + + test_dir_len = strlen (test_dir); + + /* Generate the circular symlinks. */ + name1 = malloc (test_dir_len + sizeof ("/canonXXXXXX")); + mempcpy (mempcpy (name1, test_dir, test_dir_len), + "/canonXXXXXX", sizeof ("/canonXXXXXX")); + name2 = strdup (name1); + + add_temp_file (mktemp (name1)); + add_temp_file (mktemp (name2)); +} + + +/* Run the test. */ +int +do_test (int argc, char *argv[]) +{ + char *canon; + + printf ("create symlinks from %s to %s and vice versa\n", name1, name2); + if (symlink (name1, name2) == -1 + || symlink (name2, name1) == -1) + /* We cannot test this. */ + return 0; + + /* Call the function. This is equivalent the using `realpath' but the + function allocates the room for the result. */ + errno = 0; + canon = canonicalize_file_name (name1); + + return canon != NULL || errno != ELOOP; +} diff --git a/string/Makefile b/string/Makefile index 93d68a45be..e766429c52 100644 --- a/string/Makefile +++ b/string/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. +# Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98 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 @@ -27,7 +27,7 @@ headers := string.h strings.h memory.h endian.h bits/endian.h \ routines := strcat strchr strcmp strcoll strcpy strcspn \ strverscmp strdup strndup \ - strerror _strerror strerror_r strlen strnlen \ + strerror _strerror strlen strnlen \ strncat strncmp strncpy \ strrchr strpbrk strsignal strspn strstr strtok \ strtok_r strxfrm memchr memcmp memmove memset \ diff --git a/string/strerror.c b/string/strerror.c index 7052ef64d6..4b3234233d 100644 --- a/string/strerror.c +++ b/string/strerror.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1991, 93, 94, 95, 96, 98 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 @@ -19,8 +19,6 @@ #include <stdio.h> #include <string.h> -extern char *_strerror_internal __P ((int, char *, size_t)); - /* Return a string describing the errno code in ERRNUM. The storage is good only until the next call to strerror. Writing to the storage causes undefined behavior. */ @@ -29,5 +27,5 @@ strerror (errnum) int errnum; { static char buf[1024]; - return _strerror_internal (errnum, buf, sizeof buf); + return __strerror_r (errnum, buf, sizeof buf); } diff --git a/string/strerror_r.c b/string/strerror_r.c deleted file mode 100644 index fc967441be..0000000000 --- a/string/strerror_r.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1991, 93, 94, 95, 96, 98 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 - 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. */ - -#include <stdio.h> -#include <string.h> - -extern char *_strerror_internal __P ((int, char *, size_t)); - -/* Return a string describing the errno code in ERRNUM. If a temporary - buffer is required, at most BUFLEN bytes of BUF will be used. */ -char * -__strerror_r (int errnum, char *buf, size_t buflen) -{ - return _strerror_internal (errnum, buf, buflen); -} -weak_alias (__strerror_r, strerror_r) diff --git a/sysdeps/generic/_strerror.c b/sysdeps/generic/_strerror.c index e6f56556aa..53ff9343e1 100644 --- a/sysdeps/generic/_strerror.c +++ b/sysdeps/generic/_strerror.c @@ -23,8 +23,8 @@ #include <stdio-common/_itoa.h> #ifndef HAVE_GNU_LD -#define _sys_errlist sys_errlist -#define _sys_nerr sys_nerr +# define _sys_errlist sys_errlist +# define _sys_nerr sys_nerr #endif /* It is critical here that we always use the `dcgettext' function for @@ -38,7 +38,7 @@ /* Return a string describing the errno code in ERRNUM. */ char * -_strerror_internal (int errnum, char *buf, size_t buflen) +__strerror_r (int errnum, char *buf, size_t buflen) { if (errnum < 0 || errnum >= _sys_nerr) { @@ -67,3 +67,4 @@ _strerror_internal (int errnum, char *buf, size_t buflen) return (char *) _(_sys_errlist[errnum]); } +weak_alias (__strerror_r, strerror_r) diff --git a/sysdeps/mach/_strerror.c b/sysdeps/mach/_strerror.c index 7bca7e8bd9..5be7d272a8 100644 --- a/sysdeps/mach/_strerror.c +++ b/sysdeps/mach/_strerror.c @@ -34,7 +34,7 @@ /* Return a string describing the errno code in ERRNUM. */ char * -_strerror_internal (int errnum, char *buf, size_t buflen) +__strerror_r (int errnum, char *buf, size_t buflen) { int system; int sub; @@ -115,3 +115,4 @@ _strerror_internal (int errnum, char *buf, size_t buflen) return (char *) _(es->subsystem[sub].codes[code]); } +weak_alias (__strerror_r, strerror_r) diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 3d52210fb8..9a509384d6 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -78,8 +78,8 @@ ifeq ($(subdir),inet) sysdep_headers += netinet/in_systm.h netinet/udp.h \ netinet/if_fddi.h netinet/if_tr.h netinet/igmp.h \ netinet/ip_fw.h netinet/ip_icmp.h netipx/ipx.h \ - sys/socketvar.h netax25/ax25.h netrom/netrom.h \ - netrose/rose.h netpacket/packet.h netash/ash.h + sys/socketvar.h netash/ash.h netax25/ax25.h netatalk/at.h \ + netrom/netrom.h netpacket/packet.h netrose/rose.h endif ifeq ($(subdir),posix) diff --git a/test-skeleton.c b/test-skeleton.c index 497adbe5ba..e4fed67ae3 100644 --- a/test-skeleton.c +++ b/test-skeleton.c @@ -158,13 +158,18 @@ main (int argc, char *argv[]) /* Make sure we see all message, even those on stdout. */ setvbuf (stdout, NULL, _IONBF, 0); + /* make sure temporary files are deleted. */ + atexit (delete_temp_files); + + /* Call the initializing function, if one is available. */ +#ifdef PREPARE + PREPARE (argc, argv); +#endif + /* If we are not expected to fork run the function immediately. */ if (direct) return TEST_FUNCTION; - /* make sure temporary files are deleted. */ - atexit (delete_temp_files); - /* Set up the test environment: - prevent core dumps - set up the timer |