diff options
author | Geoff Voelker <voelker@cs.washington.edu> | 1995-05-26 05:27:52 +0000 |
---|---|---|
committer | Geoff Voelker <voelker@cs.washington.edu> | 1995-05-26 05:27:52 +0000 |
commit | 16a4082efe8520bc19efe791c0240a1be2777326 (patch) | |
tree | e1aa74adcbca2ac5d97d37d154799d5f12c3b3e6 /src/w32heap.c | |
parent | a3f19708e2685d9c3601fee40926f5a1f579cece (diff) | |
download | emacs-16a4082efe8520bc19efe791c0240a1be2777326.tar.gz |
(reserved_heap_size,allocate_heap): Defined.
(sbrk): Use allocate_heap.
Diffstat (limited to 'src/w32heap.c')
-rw-r--r-- | src/w32heap.c | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/src/w32heap.c b/src/w32heap.c index 89afe6f5bf5..7c717fbdfd0 100644 --- a/src/w32heap.c +++ b/src/w32heap.c @@ -76,6 +76,7 @@ round_to_next (unsigned char *address, unsigned long align) unsigned char *data_region_base = NULL; unsigned char *data_region_end = NULL; unsigned long data_region_size = 0; +unsigned long reserved_heap_size = 0; /* The start of the data segment. */ unsigned char * @@ -91,6 +92,56 @@ get_data_end (void) return data_region_end; } + +#ifdef WINDOWS95 +static char * +allocate_heap (void) +{ + unsigned long base = 0x00030000; + unsigned long end = 0x00D00000; + + reserved_heap_size = end - base; + + return VirtualAlloc ((void *) base, + get_reserved_heap_size (), + MEM_RESERVE, + PAGE_NOACCESS); +} +#else +static char * +allocate_heap (void) +{ + unsigned long start = 0x400000; + unsigned long stop = 0xF00000; + unsigned long increment = 0x100000; + char *ptr, *begin = NULL, *end = NULL; + int i; + + for (i = start; i < stop; i += increment) + { + ptr = VirtualAlloc ((void *) i, increment, MEM_RESERVE, PAGE_NOACCESS); + if (ptr) + begin = begin ? begin : ptr; + else if (begin) + { + end = ptr; + break; + } + } + + if (begin && !end) + end = (char *) i; + + if (!begin) + /* We couldn't allocate any memory for the heap. Exit. */ + exit (-2); + + reserved_heap_size = end - begin; + return begin; +} +#endif + + /* Emulate Unix sbrk. */ void * sbrk (unsigned long increment) @@ -101,10 +152,7 @@ sbrk (unsigned long increment) /* Allocate our heap if we haven't done so already. */ if (!data_region_base) { - data_region_base = VirtualAlloc ((void *) get_data_region_base (), - get_reserved_heap_size (), - MEM_RESERVE, - PAGE_NOACCESS); + data_region_base = allocate_heap (); if (!data_region_base) return NULL; |