Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 9 Sep 2000 07:59:23 +0000 (07:59 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 9 Sep 2000 07:59:23 +0000 (07:59 +0000)
2000-09-09  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/unix/sysv/linux/dl-osinfo.h (DL_SYSDEP_OSCHECK): Use uname
before trying to read /proc.
Patch by Matt Wilson <msw@redhat.com>.
* include/sys/utsname.h: Declare __uname.
* sysdeps/generic/uname.c: Make uname a weak alias of __uname.
* sysdeps/mach/hurd/uname.c: Likewise.
* sysdeps/unix/syscalls.list: Likewise.

* iconv/gconv_dl.c (do_release_shlib): Rewrite condition for
unloading a bit.

2000-09-08  Ulrich Drepper  <drepper@redhat.com>

* posix/getopt.c (_getopt_internal): When long_only is set always
recognize conflicts just like before.

2000-09-08  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

* sysdeps/ia64/Makefile (sysdep-rtld-routines): New variable.

ChangeLog
iconv/gconv_dl.c
include/sys/utsname.h
posix/getopt.c
sysdeps/generic/uname.c
sysdeps/mach/hurd/uname.c
sysdeps/unix/syscalls.list
sysdeps/unix/sysv/linux/dl-osinfo.h

index 399a35e..56d1700 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2000-09-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/dl-osinfo.h (DL_SYSDEP_OSCHECK): Use uname
+       before trying to read /proc.
+       Patch by Matt Wilson <msw@redhat.com>.
+       * include/sys/utsname.h: Declare __uname.
+       * sysdeps/generic/uname.c: Make uname a weak alias of __uname.
+       * sysdeps/mach/hurd/uname.c: Likewise.
+       * sysdeps/unix/syscalls.list: Likewise.
+
+       * iconv/gconv_dl.c (do_release_shlib): Rewrite condition for
+       unloading a bit.
+
+2000-09-08  Ulrich Drepper  <drepper@redhat.com>
+
+       * posix/getopt.c (_getopt_internal): When long_only is set always
+       recognize conflicts just like before.
+
+2000-09-08  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+
+       * sysdeps/ia64/Makefile (sysdep-rtld-routines): New variable.
+
 2000-09-08  Greg McGary  <greg@mcgary.org>
 
        * sysdeps/unix/sysv/linux/syscalls.list (mincore): Fix arg signature.
index 308db52..114619e 100644 (file)
@@ -110,6 +110,7 @@ __gconv_find_shlib (const char *name)
     {
       if (found->counter < -TRIES_BEFORE_UNLOAD)
        {
+         assert (found->handle == NULL);
          found->handle = __libc_dlopen (found->name);
          if (found->handle != NULL)
            {
@@ -162,16 +163,12 @@ do_release_shlib (const void *nodep, VISIT value, int level)
       assert (obj->counter > 0);
       --obj->counter;
     }
-  else if (obj->counter <= 0)
+  else if (obj->counter <= 0 && obj->counter >= -TRIES_BEFORE_UNLOAD
+          && --obj->counter < -TRIES_BEFORE_UNLOAD && obj->handle != NULL)
     {
-      if (obj->counter >= -TRIES_BEFORE_UNLOAD)
-       --obj->counter;
-      if (obj->counter < -TRIES_BEFORE_UNLOAD && obj->handle != NULL)
-       {
-         /* Unload the shared object.  */
-         __libc_dlclose (obj->handle);
-         obj->handle = NULL;
-       }
+      /* Unload the shared object.  */
+      __libc_dlclose (obj->handle);
+      obj->handle = NULL;
     }
 }
 
index ff81bdf..39ca7f5 100644 (file)
@@ -1 +1,5 @@
+#ifndef        _SYS_UTSNAME_H
 #include <posix/sys/utsname.h>
+
+extern int __uname (struct utsname *__name);
+#endif
index 2ad4ee9..a6d2d04 100644 (file)
@@ -673,7 +673,8 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
                pfound = p;
                indfound = option_index;
              }
-           else if (pfound->has_arg != p->has_arg
+           else if (long_only
+                    || pfound->has_arg != p->has_arg
                     || pfound->flag != p->flag
                     || pfound->val != p->val)
              /* Second or later nonexact match found.  */
index 68335c2..aacb5f3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1996, 1997, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 /* Put information about the system in NAME.  */
 int
-uname (name)
+__uname (name)
      struct utsname *name;
 {
   int save;
@@ -61,3 +61,4 @@ uname (name)
 
   return 0;
 }
+weak_alias (__uname, uname)
index 37e4b4e..316ecf3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1992,1993,1994,1996,1997,2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #include <hurd/startup.h>
 
 int
-uname (struct utsname *uname)
+__uname (struct utsname *uname)
 {
   error_t err;
 
@@ -43,3 +43,4 @@ uname (struct utsname *uname)
 
   return 0;
 }
+weak_alias (__uname, uname)
index 0ac0ac9..3c60597 100644 (file)
@@ -58,7 +58,7 @@ sys_fstat     fxstat  fstat           i:ip    __syscall_fstat
 sys_mknod      xmknod  mknod           i:sii   __syscall_mknod
 sys_stat       xstat   stat            i:sp    __syscall_stat
 umask          -       umask           i:i     __umask         umask
-uname          -       uname           i:p     uname
+uname          -       uname           i:p     __uname         uname
 unlink         -       unlink          i:s     __unlink        unlink
 utimes         -       utimes          i:sp    __utimes        utimes
 write          -       write           i:ibn   __libc_write    __write write
index 7fc0259..a29d255 100644 (file)
@@ -18,6 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <sys/sysctl.h>
+#include <sys/utsname.h>
 #include "kernel-features.h"
 
 #ifndef MIN
@@ -61,16 +62,25 @@ dl_fatal (const char *str)
                      sizeof (sysctl_args) / sizeof (sysctl_args[0]),         \
                      buf, &reslen, NULL, 0) < 0)                             \
          {                                                                   \
-           /* This was not successful.  Now try reading the /proc            \
-              filesystem.  */                                                \
-           int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);         \
-           if (fd == -1                                                      \
-               || (reslen = __read (fd, buf, sizeof (buf))) <= 0)            \
-             /* This also didn't work.  We give up since we cannot           \
-                make sure the library can actually work.  */                 \
-             FATAL ("FATAL: cannot determine library version\n");            \
-                                                                             \
-           __close (fd);                                                     \
+           /* This didn't work.  Next try the uname syscall */               \
+           struct utsname uts;                                               \
+           if (__uname (&uts))                                               \
+             {                                                               \
+               /* This was not successful.  Now try reading the /proc        \
+                  filesystem.  */                                            \
+               int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);     \
+               if (fd == -1                                                  \
+                   || (reslen = __read (fd, buf, sizeof (buf))) <= 0)        \
+                 /* This also didn't work.  We give up since we cannot       \
+                    make sure the library can actually work.  */             \
+                 FATAL ("FATAL: cannot determine library version\n");        \
+               __close (fd);                                                 \
+             }                                                               \
+           else                                                              \
+             {                                                               \
+                strncpy (buf, uts.release, sizeof (buf));                    \
+                reslen = strlen (uts.release);                               \
+             }                                                               \
          }                                                                   \
        buf[MIN (reslen, sizeof (buf) - 1)] = '\0';                           \
                                                                              \