diff src/mem-limits.h @ 2263:702b5727498a

[xemacs-hg @ 2004-09-11 05:28:11 by malcolmp] mem-limits.h: Use configure to check for OS specific functions.
author malcolmp
date Sat, 11 Sep 2004 05:28:41 +0000
parents 34ca43a57692
children 308d34e9f07d
line wrap: on
line diff
--- a/src/mem-limits.h	Sat Sep 11 04:00:41 2004 +0000
+++ b/src/mem-limits.h	Sat Sep 11 05:28:41 2004 +0000
@@ -20,12 +20,7 @@
 
 /* Synched up with: FSF 19.30. */
 
-/* #### This ancient code really sucks.
-   configure should check for:
-   HAVE_SYS_RESOURCE_H, HAVE_ULIMIT_H, HAVE_GETRLIMIT, HAVE_ULIMIT,
-   and select action based on those values.
-   getrlimit() should be preferred to ulimit().
-   On Linux, ulimit() is deprecated and always returns -1. */
+/* Subsequently cleaned up and reorganised, made to use configure. */ 
 
 #ifndef INCLUDED_mem_limits_h_
 #define INCLUDED_mem_limits_h_
@@ -38,42 +33,25 @@
 #include <ulimit.h>
 #endif
 
-/* Some systems need this before <sys/resource.h>.  */
+#ifdef HAVE_SYS_RESOURCE_H
+/* Some systems need either sys/types.h or sys/time.h before <sys/resource.h>.  */
 #include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+#ifdef HAVE_SYS_VLIMIT_H
+#include <sys/vlimit.h>
+#endif
 
 #ifdef _LIBC
 
-#include <sys/resource.h>
-#define BSD4_2			/* Tell code below to use getrlimit.  */
-
 /* Old Linux startup code won't define __data_start.  */
 extern int etext, __data_start; weak_symbol (__data_start)
 #define start_of_data()	(&__data_start ?: &etext)
 
 #else /* not GNU libc */
 
-#if defined (__osf__) && (defined (__mips) || defined (mips) || defined (__alpha))
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-#if defined(__bsdi__) || defined(__NetBSD__) || defined(__linux__) || defined(__OpenBSD__)
-#define BSD4_2
-#endif
-
-#ifndef BSD4_2
-#ifndef USG
-#ifndef WIN32_NATIVE
-#ifndef CYGWIN
-#include <sys/vlimit.h>
-#endif /* not CYGWIN */
-#endif /* not WIN32_NATIVE */
-#endif /* not USG */
-#else /* if BSD4_2 */
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif /* BSD4_2 */
-
 #ifdef emacs
 typedef void *POINTER;
 
@@ -104,9 +82,12 @@
 /* Number of bytes of writable memory we can expect to be able to get */
 extern unsigned long lim_data;
 
+/* The implementation of get_lim_data() is very machine dependent. */
+
 #if defined (HEAP_IN_DATA) && !defined(PDUMP)
 extern unsigned long static_heap_size;
 extern MODULE_API int initialized;
+
 static void
 get_lim_data (void)
 {
@@ -119,16 +100,31 @@
       lim_data = (unsigned long) -1;
     }
 }
-#else
-#ifdef NO_LIM_DATA
+
+#elif defined(NO_LIM_DATA)
+
 static void
 get_lim_data (void)
 {
   lim_data = (unsigned long) -1;
 }
-#else /* not NO_LIM_DATA */
+
+#elif defined(HAVE_GETRLIMIT)
+
+static void
+get_lim_data (void)
+{
+  struct rlimit XXrlimit;
 
-#if defined(USG) && !defined(LINUX)
+  getrlimit (RLIMIT_DATA, &XXrlimit);
+#ifdef RLIM_INFINITY
+  lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
+#else
+  lim_data = XXrlimit.rlim_cur;	/* soft limit */
+#endif
+}
+
+#elif defined(HAVE_ULIMIT)
 
 static void
 get_lim_data (void)
@@ -149,8 +145,7 @@
   lim_data -= (long) data_space_start;
 }
 
-#else /* not USG */
-#if defined( WIN32_NATIVE )
+#elif defined(WIN32_NATIVE)
 
 static void
 get_lim_data (void)
@@ -159,8 +154,7 @@
   lim_data = data_region_size;
 }
 
-#else
-#if !defined (BSD4_2) && !defined (__osf__) && !defined(LINUX)
+#elif defined(HAVE_VLIMIT)
 
 static void
 get_lim_data (void)
@@ -168,24 +162,8 @@
   lim_data = vlimit (LIM_DATA, -1);
 }
 
-#else /* BSD4_2 */
-
-static void
-get_lim_data (void)
-{
-  struct rlimit XXrlimit;
-
-  getrlimit (RLIMIT_DATA, &XXrlimit);
-#ifdef RLIM_INFINITY
-  lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
 #else
-  lim_data = XXrlimit.rlim_cur;	/* soft limit */
-#endif
-}
-#endif /* BSD4_2 */
-#endif /* not WIN32_NATIVE */
-#endif /* not USG */
-#endif /* not NO_LIM_DATA */
-#endif /* not HEAP_IN_DATA */
+#error Cannot determine an implementation of get_lim_data().
+#endif /* not HAVE_VLIMIT */
 
 #endif /* INCLUDED_mem_limits_h_ */