#ifdef MSDOS
#include <dpmi.h>
#endif
#include <sys/types.h>
#ifdef _LIBC
#include <sys/resource.h>
#define BSD4_2
extern int etext, __data_start; weak_extern (__data_start)
#define start_of_data() (&__data_start ?: &etext)
#else
#if defined (__osf__) && (defined (__mips) || defined (mips) || defined(__alpha))
#include <sys/time.h>
#include <sys/resource.h>
#endif
#ifdef __bsdi__
#define BSD4_2
#endif
#ifndef BSD4_2
#ifndef USG
#ifndef MSDOS
#ifndef WINDOWSNT
#include <sys/vlimit.h>
#endif
#endif
#endif
#else
#include <sys/time.h>
#include <sys/resource.h>
#endif
#ifdef emacs
#ifdef __STDC__
typedef void *POINTER;
#else
typedef char *POINTER;
#endif
typedef unsigned long SIZE;
#ifdef NULL
#undef NULL
#endif
#define NULL ((POINTER) 0)
extern POINTER start_of_data ();
#ifdef DATA_SEG_BITS
#define EXCEEDS_LISP_PTR(ptr) \
(((EMACS_UINT) (ptr) & ~DATA_SEG_BITS) >> VALBITS)
#else
#define EXCEEDS_LISP_PTR(ptr) ((EMACS_UINT) (ptr) >> VALBITS)
#endif
#ifdef BSD_SYSTEM
#ifndef DATA_SEG_BITS
extern char etext;
#define start_of_data() &etext
#endif
#endif
#else
extern char etext;
#define start_of_data() &etext
#endif
#endif
static POINTER data_space_start;
static unsigned long lim_data;
#ifdef NO_LIM_DATA
static void
get_lim_data ()
{
lim_data = -1;
}
#else
#ifdef USG
static void
get_lim_data ()
{
extern long ulimit ();
lim_data = -1;
#if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX)
lim_data = ulimit (3, 0);
#endif
#ifdef ULIMIT_BREAK_VALUE
if (lim_data == -1)
lim_data = ULIMIT_BREAK_VALUE;
#endif
lim_data -= (long) data_space_start;
}
#else
#ifdef WINDOWSNT
static void
get_lim_data ()
{
extern unsigned long reserved_heap_size;
lim_data = reserved_heap_size;
}
#else
#if !defined (BSD4_2) && !defined (__osf__)
#ifdef MSDOS
void
get_lim_data ()
{
_go32_dpmi_meminfo info;
_go32_dpmi_get_free_memory_information (&info);
lim_data = info.available_memory;
}
#else
static void
get_lim_data ()
{
lim_data = vlimit (LIM_DATA, -1);
}
#endif
#else
static void
get_lim_data ()
{
struct rlimit XXrlimit;
getrlimit (RLIMIT_DATA, &XXrlimit);
#ifdef RLIM_INFINITY
lim_data = XXrlimit.rlim_cur & RLIM_INFINITY;
#else
lim_data = XXrlimit.rlim_cur;
#endif
}
#endif
#endif
#endif
#endif