X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/aa3e02cec000874705b3a6fb2cbc9eb4f0b0117d..5dd6aea87773922b52f9a3f5e3a3df1ce002f1a3:/src/mem-limits.h diff --git a/src/mem-limits.h b/src/mem-limits.h index 3e7c66da3b..1fc6c1331d 100644 --- a/src/mem-limits.h +++ b/src/mem-limits.h @@ -1,11 +1,11 @@ /* Includes for memory limit warnings. - Copyright (C) 1990, 1992 Free Software Foundation, Inc. + Copyright (C) 1990, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 1, or (at your option) +the Free Software Foundation; either version 2, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, @@ -15,11 +15,43 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#ifdef MSDOS +#include +#endif + +/* Some systems need this before . */ +#include + +#ifdef _LIBC + +#include +#define BSD4_2 /* Tell code below to use getrlimit. */ + +/* Old Linux startup code won't define __data_start. */ +extern int etext, __data_start; weak_extern (__data_start) +#define start_of_data() (&__data_start ?: &etext) + +#else /* not _LIBC */ + +#if defined (__osf__) && (defined (__mips) || defined (mips) || defined(__alpha)) +#include +#include +#endif + +#ifdef __bsdi__ +#define BSD4_2 +#endif #ifndef BSD4_2 #ifndef USG +#ifndef MSDOS +#ifndef WINDOWSNT #include +#endif /* not WINDOWSNT */ +#endif /* not MSDOS */ #endif /* not USG */ #else /* if BSD4_2 */ #include @@ -44,56 +76,98 @@ typedef unsigned long SIZE; #define NULL ((POINTER) 0) extern POINTER start_of_data (); -#define EXCEEDS_LISP_PTR(ptr) ((unsigned int) (ptr) >> VALBITS) +#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 +#ifdef BSD_SYSTEM #ifndef DATA_SEG_BITS extern char etext; #define start_of_data() &etext #endif #endif -#else /* Not emacs */ +#else /* not emacs */ extern char etext; #define start_of_data() &etext -#endif /* Not emacs */ +#endif /* not emacs */ + +#endif /* not _LIBC */ - /* start of data space; can be changed by calling malloc_init */ static POINTER data_space_start; /* Number of bytes of writable memory we can expect to be able to get */ -static unsigned int lim_data; +static unsigned long lim_data; + +#ifdef NO_LIM_DATA +static void +get_lim_data () +{ + lim_data = -1; +} +#else /* not NO_LIM_DATA */ #ifdef USG -void +static void get_lim_data () { extern long ulimit (); - -#ifdef ULIMIT_BREAK_VALUE - lim_data = ULIMIT_BREAK_VALUE; -#else + + lim_data = -1; + + /* Use the ulimit call, if we seem to have it. */ +#if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX) lim_data = ulimit (3, 0); #endif + /* If that didn't work, just use the macro's value. */ +#ifdef ULIMIT_BREAK_VALUE + if (lim_data == -1) + lim_data = ULIMIT_BREAK_VALUE; +#endif + lim_data -= (long) data_space_start; } #else /* not USG */ -#ifndef BSD4_2 +#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 /* not MSDOS */ +static void +get_lim_data () { lim_data = vlimit (LIM_DATA, -1); } +#endif /* not MSDOS */ #else /* BSD4_2 */ -void +static void get_lim_data () { struct rlimit XXrlimit; @@ -106,4 +180,6 @@ get_lim_data () #endif } #endif /* BSD4_2 */ +#endif /* not WINDOWSNT */ #endif /* not USG */ +#endif /* not NO_LIM_DATA */