Mercurial > hg > xemacs-beta
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_ */