]> code.delx.au - gnu-emacs/blobdiff - src/getloadavg.c
(have_menus_p): Renamed from using_x_p.
[gnu-emacs] / src / getloadavg.c
index f03e22e008be3d81c13edea46715ad6b912aae51..7f939d2dbe4846510f6aff08b011c9a52c6f40b7 100644 (file)
@@ -38,6 +38,7 @@
 
    apollo
    BSD                         Real BSD, not just BSD-like.
+   convex
    DGUX
    eunice                      UNIX emulator under VMS.
    hpux
@@ -210,6 +211,17 @@ extern int errno;
 #define LOAD_AVE_TYPE long
 #endif
 
+#ifdef _AIX
+#define LOAD_AVE_TYPE long
+#endif
+
+#ifdef convex
+#define LOAD_AVE_TYPE double
+#ifndef LDAV_CVT
+#define LDAV_CVT(n) (n)
+#endif
+#endif
+
 #endif /* No LOAD_AVE_TYPE.  */
 
 #ifdef OSF_ALPHA
@@ -254,6 +266,10 @@ extern int errno;
 #define FSCALE 100.0
 #endif
 
+#ifdef _AIX
+#define FSCALE 65536.0
+#endif
+
 #endif /* Not FSCALE.  */
 
 #if !defined (LDAV_CVT) && defined (FSCALE)
@@ -315,6 +331,10 @@ extern int errno;
 #define NLIST_STRUCT
 #endif
 
+#ifdef _AIX
+#define NLIST_STRUCT
+#endif
+
 #endif /* defined (NLIST_STRUCT) */
 
 
@@ -340,7 +360,7 @@ extern int errno;
 #define LDAV_SYMBOL "_Loadavg"
 #endif
 
-#if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)))
+#if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)) || defined (_AIX))
 #define LDAV_SYMBOL "avenrun"
 #endif
 
@@ -790,23 +810,29 @@ getloadavg (loadavg, nelem)
 #endif /* NLIST_STRUCT */
 
 #ifndef SUNOS_5
-      if (nlist (KERNEL_FILE, nl) >= 0)
-       /* Omit "&& nl[0].n_type != 0 " -- it breaks on Sun386i.  */
-       {
+      if (
+#if !(defined (_AIX) && !defined (ps2))
+         nlist (KERNEL_FILE, nl)
+#else  /* _AIX */
+         knlist (nl, 1, sizeof (nl[0]))
+#endif
+         >= 0)
+         /* Omit "&& nl[0].n_type != 0 " -- it breaks on Sun386i.  */
+         {
 #ifdef FIXUP_KERNEL_SYMBOL_ADDR
-         FIXUP_KERNEL_SYMBOL_ADDR (nl);
+           FIXUP_KERNEL_SYMBOL_ADDR (nl);
 #endif
-         offset = nl[0].n_value;
-       }
-#endif  /* !SUNOS_5 */
-#else /* sgi */
-      int ldav_off;
+           offset = nl[0].n_value;
+         }
+#endif /* !SUNOS_5 */
+#else  /* sgi */
+         int ldav_off;
 
-      ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN);
-      if (ldav_off != -1)
-       offset = (long) ldav_off & 0x7fffffff;
+         ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN);
+         if (ldav_off != -1)
+         offset = (long) ldav_off & 0x7fffffff;
 #endif /* sgi */
-    }
+       }
 
   /* Make sure we have /dev/kmem open.  */
   if (!getloadavg_initialized)
@@ -814,7 +840,17 @@ getloadavg (loadavg, nelem)
 #ifndef SUNOS_5
       channel = open ("/dev/kmem", 0);
       if (channel >= 0)
-       getloadavg_initialized = 1;
+       {
+         /* Set the channel to close on exec, so it does not
+            litter any child's descriptor table.  */
+#ifdef FD_SETFD
+#ifndef FD_CLOEXEC
+#define FD_CLOEXEC 1
+#endif
+         (void) fcntl (channel, F_SETFD, FD_CLOEXEC);
+#endif
+         getloadavg_initialized = 1;
+       }
 #else /* SUNOS_5 */
       /* We pass 0 for the kernel, corefile, and swapfile names
         to use the currently running kernel.  */