]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 14 Apr 1998 16:51:08 +0000 (16:51 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 14 Apr 1998 16:51:08 +0000 (16:51 +0000)
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.

32 files changed:
.cvsignore
ChangeLog
FAQ.in
assert/assert-perr.c
catgets/open_catalog.c
configure
configure.in
elf/dl-error.c
elf/dl-minimal.c
elf/dl-profile.c
gmon/gmon.c
libc.map
libio/fcloseall.c
libio/genops.c
libio/libioP.h
manual/creature.texi
manual/socket.texi
manual/time.texi
posix/regex.c
rt/tst-aio.c
stdio-common/perror.c
stdio-common/vfprintf.c
stdlib/Makefile
stdlib/canonicalize.c
stdlib/test-canon2.c [new file with mode: 0644]
string/Makefile
string/strerror.c
string/strerror_r.c [deleted file]
sysdeps/generic/_strerror.c
sysdeps/mach/_strerror.c
sysdeps/unix/sysv/linux/Makefile
test-skeleton.c

index 7654da865a566b1a21c92206e602d551dd886984..b907f7a0243801c9444187d2c97f4baa86155abf 100644 (file)
@@ -17,9 +17,9 @@ distinfo
 test-include
 analysis
 docs
+releases
 
 crypt
 linuxthreads
-secure_rpc
 
 aio
index f88e5ac2d810bb5f0cac96a23e85ece4f76d460e..a75691c35df52bd8310efbd592a0c1b454faef9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/FAQ.in b/FAQ.in
index adda0fb06a81bfd2445d825d4c666fbcc85e4828..7ca0218ec696886ea81a4c7b55d9c942bafe4601 100644 (file)
--- a/FAQ.in
+++ b/FAQ.in
@@ -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.
 
index 246727ee94617ce132dc2fc37b8bb22e13cf152d..cdc07b56f929f13dca3f0d99ffa85bcc0c5cee62 100644 (file)
@@ -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
 #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 ();
index 62fb111e435f2632c6db5dd4c336584c3cc5489a..2197eb836330fe7a08af97a62b85a3d417901d07 100644 (file)
@@ -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);
 }
index e94d8cdd0b87d16942562969b98e2721376c05ff..c66deb2ddc74c4a7f47bc47b752647e2a672abcd 100755 (executable)
--- a/configure
+++ b/configure
@@ -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.
index 6d17bb30cbee5bec88e911c225d3e4d8994bf345..86eec3c942345aa5da43b91e0f11fbf5709068f6 100644 (file)
@@ -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)
index 446ba627b55c9eae7841a82fb45afcb2ce570489..03292abaf4af3d4e22725d4da289abfd497a3d46 100644 (file)
@@ -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);
     }
 }
index 4c15d83f8e7b0840b08ceadf84343dd5d87e1ac5..c9a0575fd014f5e083699b26ca08fe2ada269da4 100644 (file)
@@ -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);
index 669fee7a4399bffd18953316c04fa5ab745a9df8..c7ac3608113988cdbde4ba9b98d92ed8ddcccc86 100644 (file)
@@ -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;
     }
index 0087e8c0f7627589fd9b7b15dd06768cbbbfc595..834351eeec5954f16baccf8de192bba6175a8fba 100644 (file)
@@ -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;
          }
       }
index 81f902fbbed47d4357f647f5e58f846f8b8e48ef..6a40713d810f7124b4a529748821f8f9eef5e6c5 100644 (file)
--- a/libc.map
+++ b/libc.map
@@ -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;
index cd01655450adf11278696449e1ed1688fbd0c977..9b980c6cdeb25ca46642bd6d940054eab771ebc0 100644 (file)
@@ -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
index ea602eda3931f48868f28cb9095edadf33bb45a8..b0334d6d0eb221dde7c23263f862d2bec895c79e 100644 (file)
@@ -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;
 }
 
 
index 0452c7758f5f50b4e8e0e4077c61593e353a81bd..8e8e61843ae04984363a194d1125603981462980 100644 (file)
@@ -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) \
index 4cdcce99b03ba5069873b3b9c865f5336af13608..66e53aceb422ab349483432d3496749239134982 100644 (file)
@@ -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
index ffecc992d5fd2cae270f5c583380eb2d7c3b8698..0eab88a4b254be090638fed316c3a43de4361b17 100644 (file)
@@ -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
index e28071630479c0c706ee1148659f421b0dcf83c7..5da12c451352909f1863ed0d1891ecd50dbed5de 100644 (file)
@@ -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
index d29a4bf61e449c6dacf8bed8707cc8b232bf7947..b7fb962d61e848ab6d71ea4b0a24c35f5b56daac 100644 (file)
@@ -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;
index 83833ee117ba0571c97f7f19c7f7906968664983..a6c0762a2af2139b70efcb652ae97d73c8d5279d 100644 (file)
 #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)
     {
index e7db55ae80d8e88a00d35a168be5c8ecb07e4283..4b29f5286a14b8a42ea30e6cadf042a1a20976ec 100644 (file)
@@ -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));
 }
index e13785f3a3016929f143129ef8897f449c9e01db..d8d0f87b0ff3c2fa256a8795d24614582d9f0b0d 100644 (file)
@@ -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)
 
index 85a5347d3224db7d92f5d888361e3df0fcfc770b..91eaf60cfc13431e58ffdecf1ec44c177caa6b6b 100644 (file)
@@ -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.
index ef7311e90de742db36e5038f23d72fde6d876d39..faf4422f189d115f6cc5546d487a82b0a26f1389 100644 (file)
@@ -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 (file)
index 0000000..0dc1615
--- /dev/null
@@ -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;
+}
index 93d68a45bef3dc73bbdf8afbe2062c82d2abff30..e766429c52dc90ccd51e1130113881657ebbd11b 100644 (file)
@@ -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        \
index 7052ef64d6a3e4b842e2892794ce72c500b835aa..4b3234233da50acf43370bc5aa7b1391a3f13cd2 100644 (file)
@@ -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 (file)
index fc96744..0000000
+++ /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)
index e6f56556aa803caccf29d46968e076e5ac3a5fc4..53ff9343e1c5e814f0303e31fcde7f6d3fb0cd67 100644 (file)
@@ -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)
index 7bca7e8bd99a7e5ee8d98b3a4bcacb83939a6d37..5be7d272a8a1c735bc2f0b2767152ba8310f73b1 100644 (file)
@@ -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)
index 3d52210fb81c8b3e03af59598fd635a158d2267f..9a509384d6f0f98f7215817a2ab8c4dc2e194adc 100644 (file)
@@ -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)
index 497adbe5ba71e6be92fc7d371a357e1d3022139c..e4fed67ae3123c11a0fd32283001a7f532e6a0ce 100644 (file)
@@ -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