Initial revision
[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 ();
47
48#ifdef BSD
49#ifndef DATA_SEG_BITS
50#define start_of_data() &etext
51#endif
52#endif
53
54#else /* Not emacs */
55#define start_of_data() &etext
56#endif /* Not emacs */
57
58
59
60/* start of data space; can be changed by calling malloc_init */
61static POINTER data_space_start;
62
63/* Number of bytes of writable memory we can expect to be able to get */
64static unsigned int lim_data;
65
66
67
68#ifdef USG
69
70get_lim_data ()
71{
72 extern long ulimit ();
73
74#ifdef ULIMIT_BREAK_VALUE
75 lim_data = ULIMIT_BREAK_VALUE;
76#else
77 lim_data = ulimit (3, 0);
78#endif
79
80 lim_data -= (long) data_space_start;
81}
82
83#else /* not USG */
84#ifndef BSD4_2
85
86get_lim_data ()
87{
88 lim_data = vlimit (LIM_DATA, -1);
89}
90
91#else /* BSD4_2 */
92
93get_lim_data ()
94{
95 struct rlimit XXrlimit;
96
97 getrlimit (RLIMIT_DATA, &XXrlimit);
98#ifdef RLIM_INFINITY
99 lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
100#else
101 lim_data = XXrlimit.rlim_cur; /* soft limit */
102#endif
103}
104#endif /* BSD4_2 */
105#endif /* not USG */