*** empty log message ***
[bpt/emacs.git] / src / mem-limits.h
index 31c71dc..f1bad9b 100644 (file)
@@ -1,11 +1,12 @@
 /* Includes for memory limit warnings.
 /* Includes for memory limit warnings.
-   Copyright (C) 1990, 1993 Free Software Foundation, Inc.
+   Copyright (C) 1990, 1993, 1994, 1995, 1996, 2001, 2002, 2003, 2004,
+                 2005, 2006, 2007  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
 
 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 3, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -15,16 +16,52 @@ 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
 
 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., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef MSDOS
+#include <dpmi.h>
+extern int etext;
+#endif
+
+/* Some systems need this before <sys/resource.h>.  */
+#include <sys/types.h>
+
+#ifdef _LIBC
 
 
-#if defined(__osf__) && (defined(__mips) || defined(mips))
-#include <sys/time.h>
 #include <sys/resource.h>
 #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_extern (__data_start)
+#define start_of_data()        (&__data_start ?: &etext)
+
+#else /* not _LIBC */
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/time.h>
+# include <sys/resource.h>
+#else
+# if HAVE_SYS_VLIMIT_H
+#  include <sys/vlimit.h>      /* Obsolete, says glibc */
+# endif
+#endif
+
+#ifdef __bsdi__
+#define BSD4_2
+#endif
+
+#ifdef CYGWIN
+#define BSD4_2
 #endif
 
 #ifndef BSD4_2
 #ifndef USG
 #endif
 
 #ifndef BSD4_2
 #ifndef USG
+#ifndef MSDOS
+#ifndef WINDOWSNT
 #include <sys/vlimit.h>
 #include <sys/vlimit.h>
+#endif /* not WINDOWSNT */
+#endif /* not MSDOS */
 #endif /* not USG */
 #else /* if BSD4_2 */
 #include <sys/time.h>
 #endif /* not USG */
 #else /* if BSD4_2 */
 #include <sys/time.h>
@@ -35,11 +72,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* The important properties of this type are that 1) it's a pointer, and
    2) arithmetic on it should work as if the size of the object pointed
    to has a size of 1.  */
 /* The important properties of this type are that 1) it's a pointer, and
    2) arithmetic on it should work as if the size of the object pointed
    to has a size of 1.  */
-#ifdef __STDC__
-typedef void *POINTER;
-#else
-typedef char *POINTER;
-#endif
+typedef POINTER_TYPE *POINTER;
 
 typedef unsigned long SIZE;
 
 
 typedef unsigned long SIZE;
 
@@ -49,78 +82,35 @@ typedef unsigned long SIZE;
 #define NULL ((POINTER) 0)
 
 extern POINTER start_of_data ();
 #define NULL ((POINTER) 0)
 
 extern POINTER start_of_data ();
-#ifdef DATA_SEG_BITS
+#if defined USE_LSB_TAG
+#define EXCEEDS_LISP_PTR(ptr) 0
+#elif defined DATA_SEG_BITS
 #define EXCEEDS_LISP_PTR(ptr) \
 #define EXCEEDS_LISP_PTR(ptr) \
-  (((unsigned int) (ptr) & ~DATA_SEG_BITS) >> VALBITS)
+  (((EMACS_UINT) (ptr) & ~DATA_SEG_BITS) >> VALBITS)
 #else
 #else
-#define EXCEEDS_LISP_PTR(ptr) ((unsigned int) (ptr) >> VALBITS)
+#define EXCEEDS_LISP_PTR(ptr) ((EMACS_UINT) (ptr) >> VALBITS)
+#endif
+
+#ifdef DATA_START
+#define start_of_data() ((char *)DATA_START)
 #endif
 
 #endif
 
-#ifdef BSD
+#ifdef BSD_SYSTEM
 #ifndef DATA_SEG_BITS
 #ifndef DATA_SEG_BITS
+#ifndef DATA_START
 extern char etext;
 #define start_of_data() &etext
 #endif
 #endif
 extern char etext;
 #define start_of_data() &etext
 #endif
 #endif
+#endif
 
 
-#else  /* Not emacs */ 
+#else  /* not emacs */
 extern char etext;
 #define start_of_data() &etext
 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;
-
-#ifdef USG
-
-static void
-get_lim_data ()
-{
-  extern long ulimit ();
-
-  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 */
-#if !defined(BSD4_2) && !defined(__osf__)
-
-static void
-get_lim_data ()
-{
-  lim_data = vlimit (LIM_DATA, -1);
-}
-
-#else /* BSD4_2 */
-
-static void
-get_lim_data ()
-{
-  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 USG */
+/* arch-tag: fe39244e-e54f-4208-b7aa-02556f7841c5
+   (do not change this comment) */