Mercurial > emacs
annotate src/mem-limits.h @ 20279:69a6030e443a
(kill-region): Detect read-only text
by getting an error trying to delete it.
Handle the cases where we can, and can't, get the killed text
from the undo list with much the same code.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Wed, 19 Nov 1997 21:36:56 +0000 |
parents | 02044b05d8e0 |
children | 95829fe50ff7 |
rev | line source |
---|---|
486 | 1 /* Includes for memory limit warnings. |
15634
08bcd5d2c8ab
[_LIBC]: Use weak_extern instead of weak_symbol for __data_start.
Roland McGrath <roland@gnu.org>
parents:
14186
diff
changeset
|
2 Copyright (C) 1990, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. |
486 | 3 |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
3370
2df248d76c58
[__bsdi__]: Define BSD4_2.
Richard M. Stallman <rms@gnu.org>
parents:
3055
diff
changeset
|
8 the Free Software Foundation; either version 2, or (at your option) |
486 | 9 any later version. |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13564
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13564
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
486 | 20 |
5497
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
21 #ifdef MSDOS |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
22 #include <dpmi.h> |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
23 #endif |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
24 |
5547
261bf09dc10a
Include <sys/types.h> before <sys/resource.h>.
Roland McGrath <roland@gnu.org>
parents:
5497
diff
changeset
|
25 /* Some systems need this before <sys/resource.h>. */ |
261bf09dc10a
Include <sys/types.h> before <sys/resource.h>.
Roland McGrath <roland@gnu.org>
parents:
5497
diff
changeset
|
26 #include <sys/types.h> |
261bf09dc10a
Include <sys/types.h> before <sys/resource.h>.
Roland McGrath <roland@gnu.org>
parents:
5497
diff
changeset
|
27 |
4229
edf8c9e14e02
[_LIBC]: Just include <sys/resource.h>, and skip hairy #ifdef mess.
Roland McGrath <roland@gnu.org>
parents:
3370
diff
changeset
|
28 #ifdef _LIBC |
edf8c9e14e02
[_LIBC]: Just include <sys/resource.h>, and skip hairy #ifdef mess.
Roland McGrath <roland@gnu.org>
parents:
3370
diff
changeset
|
29 |
edf8c9e14e02
[_LIBC]: Just include <sys/resource.h>, and skip hairy #ifdef mess.
Roland McGrath <roland@gnu.org>
parents:
3370
diff
changeset
|
30 #include <sys/resource.h> |
4254 | 31 #define BSD4_2 /* Tell code below to use getrlimit. */ |
4229
edf8c9e14e02
[_LIBC]: Just include <sys/resource.h>, and skip hairy #ifdef mess.
Roland McGrath <roland@gnu.org>
parents:
3370
diff
changeset
|
32 |
13563
c011026c071d
[_LIBC] (start_of_data): Use weak ref to __data_start; use &etext if not
Roland McGrath <roland@gnu.org>
parents:
12216
diff
changeset
|
33 /* Old Linux startup code won't define __data_start. */ |
15634
08bcd5d2c8ab
[_LIBC]: Use weak_extern instead of weak_symbol for __data_start.
Roland McGrath <roland@gnu.org>
parents:
14186
diff
changeset
|
34 extern int etext, __data_start; weak_extern (__data_start) |
13563
c011026c071d
[_LIBC] (start_of_data): Use weak ref to __data_start; use &etext if not
Roland McGrath <roland@gnu.org>
parents:
12216
diff
changeset
|
35 #define start_of_data() (&__data_start ?: &etext) |
12197
9cba6f0d9cd7
[_LIBC] (start_of_data): Define to &__data_start for GNU libc.
Roland McGrath <roland@gnu.org>
parents:
9791
diff
changeset
|
36 |
12216 | 37 #else /* not _LIBC */ |
4229
edf8c9e14e02
[_LIBC]: Just include <sys/resource.h>, and skip hairy #ifdef mess.
Roland McGrath <roland@gnu.org>
parents:
3370
diff
changeset
|
38 |
8830
3f019f2a13f9
Check for __alpha, in __osf__ conditional.
Richard M. Stallman <rms@gnu.org>
parents:
7010
diff
changeset
|
39 #if defined (__osf__) && (defined (__mips) || defined (mips) || defined(__alpha)) |
3055 | 40 #include <sys/time.h> |
41 #include <sys/resource.h> | |
42 #endif | |
43 | |
3370
2df248d76c58
[__bsdi__]: Define BSD4_2.
Richard M. Stallman <rms@gnu.org>
parents:
3055
diff
changeset
|
44 #ifdef __bsdi__ |
2df248d76c58
[__bsdi__]: Define BSD4_2.
Richard M. Stallman <rms@gnu.org>
parents:
3055
diff
changeset
|
45 #define BSD4_2 |
2df248d76c58
[__bsdi__]: Define BSD4_2.
Richard M. Stallman <rms@gnu.org>
parents:
3055
diff
changeset
|
46 #endif |
2df248d76c58
[__bsdi__]: Define BSD4_2.
Richard M. Stallman <rms@gnu.org>
parents:
3055
diff
changeset
|
47 |
486 | 48 #ifndef BSD4_2 |
49 #ifndef USG | |
5497
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
50 #ifndef MSDOS |
9791
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
51 #ifndef WINDOWSNT |
486 | 52 #include <sys/vlimit.h> |
9791
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
53 #endif /* not WINDOWSNT */ |
5497
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
54 #endif /* not MSDOS */ |
486 | 55 #endif /* not USG */ |
56 #else /* if BSD4_2 */ | |
57 #include <sys/time.h> | |
58 #include <sys/resource.h> | |
59 #endif /* BSD4_2 */ | |
60 | |
1393
d2ae5897e43c
[!emacs]: Don't define POINTER, SIZE or NULL.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
61 #ifdef emacs |
575 | 62 /* The important properties of this type are that 1) it's a pointer, and |
63 2) arithmetic on it should work as if the size of the object pointed | |
64 to has a size of 1. */ | |
486 | 65 #ifdef __STDC__ |
66 typedef void *POINTER; | |
67 #else | |
68 typedef char *POINTER; | |
69 #endif | |
70 | |
71 typedef unsigned long SIZE; | |
72 | |
73 #ifdef NULL | |
74 #undef NULL | |
75 #endif | |
76 #define NULL ((POINTER) 0) | |
77 | |
78 extern POINTER start_of_data (); | |
1592
613783a3f00c
* mem-limits.h [DATA_SEG_BITS] (EXCEEDS_LISP_PTR): Remember to
Jim Blandy <jimb@redhat.com>
parents:
1450
diff
changeset
|
79 #ifdef DATA_SEG_BITS |
613783a3f00c
* mem-limits.h [DATA_SEG_BITS] (EXCEEDS_LISP_PTR): Remember to
Jim Blandy <jimb@redhat.com>
parents:
1450
diff
changeset
|
80 #define EXCEEDS_LISP_PTR(ptr) \ |
8830
3f019f2a13f9
Check for __alpha, in __osf__ conditional.
Richard M. Stallman <rms@gnu.org>
parents:
7010
diff
changeset
|
81 (((EMACS_UINT) (ptr) & ~DATA_SEG_BITS) >> VALBITS) |
1592
613783a3f00c
* mem-limits.h [DATA_SEG_BITS] (EXCEEDS_LISP_PTR): Remember to
Jim Blandy <jimb@redhat.com>
parents:
1450
diff
changeset
|
82 #else |
8830
3f019f2a13f9
Check for __alpha, in __osf__ conditional.
Richard M. Stallman <rms@gnu.org>
parents:
7010
diff
changeset
|
83 #define EXCEEDS_LISP_PTR(ptr) ((EMACS_UINT) (ptr) >> VALBITS) |
1592
613783a3f00c
* mem-limits.h [DATA_SEG_BITS] (EXCEEDS_LISP_PTR): Remember to
Jim Blandy <jimb@redhat.com>
parents:
1450
diff
changeset
|
84 #endif |
486 | 85 |
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
15643
diff
changeset
|
86 #ifdef BSD_SYSTEM |
486 | 87 #ifndef DATA_SEG_BITS |
734 | 88 extern char etext; |
486 | 89 #define start_of_data() &etext |
90 #endif | |
91 #endif | |
92 | |
13563
c011026c071d
[_LIBC] (start_of_data): Use weak ref to __data_start; use &etext if not
Roland McGrath <roland@gnu.org>
parents:
12216
diff
changeset
|
93 #else /* not emacs */ |
734 | 94 extern char etext; |
486 | 95 #define start_of_data() &etext |
12216 | 96 #endif /* not emacs */ |
486 | 97 |
12216 | 98 #endif /* not _LIBC */ |
12197
9cba6f0d9cd7
[_LIBC] (start_of_data): Define to &__data_start for GNU libc.
Roland McGrath <roland@gnu.org>
parents:
9791
diff
changeset
|
99 |
486 | 100 |
101 /* start of data space; can be changed by calling malloc_init */ | |
102 static POINTER data_space_start; | |
103 | |
104 /* Number of bytes of writable memory we can expect to be able to get */ | |
15643
3c6865102f3d
(lim_data): Make this an unsigned long.
Karl Heuer <kwzh@gnu.org>
parents:
15634
diff
changeset
|
105 static unsigned long lim_data; |
486 | 106 |
7010
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
107 #ifdef NO_LIM_DATA |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
108 static void |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
109 get_lim_data () |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
110 { |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
111 lim_data = -1; |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
112 } |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
113 #else /* not NO_LIM_DATA */ |
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
114 |
486 | 115 #ifdef USG |
116 | |
1450
a321ed0fa3ae
(get_lim_data): Make it static.
Richard M. Stallman <rms@gnu.org>
parents:
1399
diff
changeset
|
117 static void |
486 | 118 get_lim_data () |
119 { | |
120 extern long ulimit (); | |
2917
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
121 |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
122 lim_data = -1; |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
123 |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
124 /* Use the ulimit call, if we seem to have it. */ |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
125 #if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX) |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
126 lim_data = ulimit (3, 0); |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
127 #endif |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
128 |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
129 /* If that didn't work, just use the macro's value. */ |
486 | 130 #ifdef ULIMIT_BREAK_VALUE |
2917
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
131 if (lim_data == -1) |
725698689fbd
Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents:
1592
diff
changeset
|
132 lim_data = ULIMIT_BREAK_VALUE; |
486 | 133 #endif |
134 | |
135 lim_data -= (long) data_space_start; | |
136 } | |
137 | |
138 #else /* not USG */ | |
9791
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
139 #ifdef WINDOWSNT |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
140 |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
141 static void |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
142 get_lim_data () |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
143 { |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
144 extern unsigned long data_region_size; |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
145 lim_data = data_region_size; |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
146 } |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
147 |
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
148 #else |
5497
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
149 #if !defined (BSD4_2) && !defined (__osf__) |
486 | 150 |
5497
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
151 #ifdef MSDOS |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
152 void |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
153 get_lim_data () |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
154 { |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
155 _go32_dpmi_meminfo info; |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
156 |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
157 _go32_dpmi_get_free_memory_information (&info); |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
158 lim_data = info.available_memory; |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
159 } |
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
160 #else /* not MSDOS */ |
1450
a321ed0fa3ae
(get_lim_data): Make it static.
Richard M. Stallman <rms@gnu.org>
parents:
1399
diff
changeset
|
161 static void |
486 | 162 get_lim_data () |
163 { | |
164 lim_data = vlimit (LIM_DATA, -1); | |
165 } | |
5497
525a2027ec95
[MSDOS] (get_lim_data): Use go32 call.
Richard M. Stallman <rms@gnu.org>
parents:
4254
diff
changeset
|
166 #endif /* not MSDOS */ |
486 | 167 |
168 #else /* BSD4_2 */ | |
169 | |
1450
a321ed0fa3ae
(get_lim_data): Make it static.
Richard M. Stallman <rms@gnu.org>
parents:
1399
diff
changeset
|
170 static void |
486 | 171 get_lim_data () |
172 { | |
173 struct rlimit XXrlimit; | |
174 | |
175 getrlimit (RLIMIT_DATA, &XXrlimit); | |
176 #ifdef RLIM_INFINITY | |
177 lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */ | |
178 #else | |
179 lim_data = XXrlimit.rlim_cur; /* soft limit */ | |
180 #endif | |
181 } | |
182 #endif /* BSD4_2 */ | |
9791
068c89ed6765
[WINDOWSNT]: Don't include vlimit.h.
Richard M. Stallman <rms@gnu.org>
parents:
8830
diff
changeset
|
183 #endif /* not WINDOWSNT */ |
486 | 184 #endif /* not USG */ |
7010
34c91bb33ed0
(get_lim_data): Handle NO_LIM_DATA.
Richard M. Stallman <rms@gnu.org>
parents:
5547
diff
changeset
|
185 #endif /* not NO_LIM_DATA */ |