getloadavg: check whether n_name is a pointer, for QNX 6.4.1
authorMatt Kraai <mkraai@beckman.com>
Wed, 29 Jul 2009 15:33:59 +0000 (08:33 -0700)
committerJim Meyering <meyering@redhat.com>
Fri, 31 Jul 2009 08:05:33 +0000 (10:05 +0200)
* lib/getloadavg.c (getloadavg): Use the strcpy-into-nlist.n_name
code also if ! defined N_NAME_POINTER.
* m4/getloadavg.m4 (gl_GETLOADAVG): Add a link-test for N_NAME_POINTER.
This is required on QNX 6.4.1, where /usr/include/nlist.h exists,
but the n_name member is a 12-byte array.

lib/getloadavg.c
m4/getloadavg.m4

index 5a4005c..d968e5b 100644 (file)
@@ -44,8 +44,8 @@
                                otherwise, no load average is available.
    HAVE_NLIST_H                 nlist.h is available.  NLIST_STRUCT defaults
                                 to this.
-   NLIST_STRUCT                        Include nlist.h, not a.out.h, and
-                               the nlist n_name element is a pointer,
+   NLIST_STRUCT                        Include nlist.h, not a.out.h.
+   NLIST_POINTER               The nlist n_name element is a pointer,
                                not an array.
    HAVE_STRUCT_NLIST_N_UN_N_NAME `n_un.n_name' is member of `struct nlist'.
    LINUX_LDAV_FILE             [__linux__, __CYGWIN__]: File containing
@@ -900,7 +900,7 @@ getloadavg (double loadavg[], int nelem)
   if (offset == 0)
     {
 #  ifndef sgi
-#   ifndef NLIST_STRUCT
+#   if ! defined NLIST_STRUCT || ! defined N_NAME_POINTER
       strcpy (nl[0].n_name, LDAV_SYMBOL);
       strcpy (nl[1].n_name, "");
 #   else /* NLIST_STRUCT */
index 015bcac..28237d7 100644 (file)
@@ -174,5 +174,14 @@ AC_CHECK_HEADERS([nlist.h],
                              `n_un' member.  Obsolete, depend on
                              `HAVE_STRUCT_NLIST_N_UN_N_NAME])], [],
                  [@%:@include <nlist.h>])
+ AC_TRY_LINK([#include <nlist.h>],
+             [struct nlist x;
+              #ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME
+              x.n_un.n_name = "";
+              #else
+              x.n_name = "";
+              #endif],
+             [AC_DEFINE([N_NAME_POINTER], [1],
+                        [Define to 1 if the nlist n_name member is a pointer])])
 ])dnl
 ])# gl_PREREQ_GETLOADAVG