(DL_SYSDEP_OSCHECK): Change to not use sysctl(). Too many architectures have problem...
authorUlrich Drepper <drepper@redhat.com>
Thu, 14 Sep 2000 20:13:01 +0000 (20:13 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 14 Sep 2000 20:13:01 +0000 (20:13 +0000)
sysdeps/unix/sysv/linux/dl-osinfo.h

index cc0694a..1834da8 100644 (file)
@@ -51,39 +51,30 @@ dl_fatal (const char *str)
        kernels.  */                                                          \
     if (__LINUX_KERNEL_VERSION > 0)                                          \
       {                                                                              \
-       static const int sysctl_args[] = { CTL_KERN, KERN_OSRELEASE };        \
-       char buf[64];                                                         \
-       size_t reslen = sizeof (buf);                                         \
+       char bufmem[64];                                                      \
+       char *buf = bufmem;                                                   \
        unsigned int version;                                                 \
        int parts;                                                            \
        char *cp;                                                             \
+       struct utsname uts;                                                   \
                                                                              \
-       /* Try reading the number using `sysctl' first.  */                   \
-       if (__sysctl ((int *) sysctl_args,                                    \
-                     sizeof (sysctl_args) / sizeof (sysctl_args[0]),         \
-                     buf, &reslen, NULL, 0) < 0)                             \
-         {                                                                   \
-           /* 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);                               \
-             }                                                               \
+       /* Try the uname syscall */                                           \
+       if (__uname (&uts))                                                   \
+         {                                                                   \
+           /* This was not successful.  Now try reading the /proc            \
+              filesystem.  */                                                \
+           ssize_t reslen;                                                   \
+           int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);         \
+           if (fd == -1                                                      \
+               || (reslen = __read (fd, bufmem, sizeof (bufmem))) <= 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);                                                     \
+           buf[MIN (reslen, sizeof (bufmem) - 1)] = '\0';                    \
          }                                                                   \
-       buf[MIN (reslen, sizeof (buf) - 1)] = '\0';                           \
+       else                                                                  \
+          buf = uts.release;                                                 \
                                                                              \
        /* Now convert it into a number.  The string consists of at most      \
           three parts.  */                                                   \