]> code.delx.au - gnu-emacs/commitdiff
(reserved_heap_size,allocate_heap): Defined.
authorGeoff Voelker <voelker@cs.washington.edu>
Fri, 26 May 1995 05:27:52 +0000 (05:27 +0000)
committerGeoff Voelker <voelker@cs.washington.edu>
Fri, 26 May 1995 05:27:52 +0000 (05:27 +0000)
(sbrk): Use allocate_heap.

src/w32heap.c

index 89afe6f5bf5bdf76e99321f16a96917061eeb13b..7c717fbdfd0d81c152ed7a46bbdc89713278cc98 100644 (file)
@@ -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;