*** empty log message ***
[bpt/emacs.git] / src / mem-limits.h
CommitLineData
9889c728 1/* Includes for memory limit warnings.
5399ec5d 2 Copyright (C) 1990, 1992 Free Software Foundation, Inc.
9889c728
JB
3
4This file is part of GNU Emacs.
5
6GNU Emacs is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Emacs; see the file COPYING. If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20#ifndef BSD4_2
21#ifndef USG
22#include <sys/vlimit.h>
23#endif /* not USG */
24#else /* if BSD4_2 */
25#include <sys/time.h>
26#include <sys/resource.h>
27#endif /* BSD4_2 */
28
5399ec5d
JB
29/* The important properties of this type are that 1) it's a pointer, and
30 2) arithmetic on it should work as if the size of the object pointed
31 to has a size of 1. */
9889c728
JB
32#ifdef __STDC__
33typedef void *POINTER;
34#else
35typedef char *POINTER;
36#endif
37
38typedef unsigned long SIZE;
39
40#ifdef NULL
41#undef NULL
42#endif
43#define NULL ((POINTER) 0)
44
45#ifdef emacs
46extern POINTER start_of_data ();
94d7c01a 47#define EXCEEDS_ELISP_PTR(ptr) ((unsigned int) (ptr) >> VALBITS)
9889c728
JB
48
49#ifdef BSD
50#ifndef DATA_SEG_BITS
94d7c01a 51extern char etext;
9889c728
JB
52#define start_of_data() &etext
53#endif
54#endif
55
56#else /* Not emacs */
94d7c01a 57extern char etext;
9889c728
JB
58#define start_of_data() &etext
59#endif /* Not emacs */
60
61
62
63/* start of data space; can be changed by calling malloc_init */
64static POINTER data_space_start;
65
66/* Number of bytes of writable memory we can expect to be able to get */
67static unsigned int lim_data;
68
69
70
71#ifdef USG
72
73get_lim_data ()
74{
75 extern long ulimit ();
76
77#ifdef ULIMIT_BREAK_VALUE
78 lim_data = ULIMIT_BREAK_VALUE;
79#else
80 lim_data = ulimit (3, 0);
81#endif
82
83 lim_data -= (long) data_space_start;
84}
85
86#else /* not USG */
87#ifndef BSD4_2
88
89get_lim_data ()
90{
91 lim_data = vlimit (LIM_DATA, -1);
92}
93
94#else /* BSD4_2 */
95
96get_lim_data ()
97{
98 struct rlimit XXrlimit;
99
100 getrlimit (RLIMIT_DATA, &XXrlimit);
101#ifdef RLIM_INFINITY
102 lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
103#else
104 lim_data = XXrlimit.rlim_cur; /* soft limit */
105#endif
106}
107#endif /* BSD4_2 */
108#endif /* not USG */