]> code.delx.au - gnu-emacs/blobdiff - src/alloca.c
(redisplay_window) <force-start case>:
[gnu-emacs] / src / alloca.c
index bd4932aa44532a7363f0d4df72059d7b7e77ad47..78704e5dc93cd9cabf42ddae721183fe25454c49 100644 (file)
    your main control loop, etc. to force garbage collection.  */
 
 #ifdef HAVE_CONFIG_H
-#if defined (emacs) || defined (CONFIG_BROKETS)
 #include <config.h>
-#else
-#include "config.h"
 #endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef emacs
+#include "lisp.h"
+#include "blockinput.h"
 #endif
 
 /* If compiling with GCC 2, this file's not needed.  */
@@ -43,9 +51,7 @@
    in order to make unexec workable
    */
 #ifndef STACK_DIRECTION
-you
-lose
--- must know STACK_DIRECTION at compile-time
+  #error "Must know STACK_DIRECTION at compile-time"
 #endif /* STACK_DIRECTION undefined */
 #endif /* static */
 #endif /* emacs */
@@ -60,13 +66,20 @@ long i00afunc ();
 #define ADDRESS_FUNCTION(arg) &(arg)
 #endif
 
+#ifdef POINTER_TYPE
+typedef POINTER_TYPE *pointer;
+#else
 #if __STDC__
 typedef void *pointer;
 #else
 typedef char *pointer;
-#endif
+#endif /*__STDC__*/
+#endif /*POINTER_TYPE*/
 
+
+#ifndef NULL
 #define        NULL    0
+#endif
 
 /* Different portions of Emacs need to call different versions of
    malloc.  The Emacs executable needs alloca to call xmalloc, because
@@ -78,8 +91,11 @@ typedef char *pointer;
 
    Callers below should use malloc.  */
 
-#ifndef emacs
+#ifdef emacs
 #define malloc xmalloc
+#ifdef EMACS_FREE
+#define free EMACS_FREE
+#endif
 #endif
 extern pointer malloc ();
 
@@ -171,11 +187,15 @@ alloca (size)
 #endif
 
   /* Reclaim garbage, defined as all alloca'd storage that
-     was allocated from deeper in the stack than currently. */
+     was allocated from deeper in the stack than currently.  */
 
   {
     register header *hp;       /* Traverses linked list.  */
 
+#ifdef emacs
+    BLOCK_INPUT;
+#endif
+
     for (hp = last_alloca_header; hp != NULL;)
       if ((STACK_DIR > 0 && hp->h.deep > depth)
          || (STACK_DIR < 0 && hp->h.deep < depth))
@@ -190,6 +210,10 @@ alloca (size)
        break;                  /* Rest are not deeper.  */
 
     last_alloca_header = hp;   /* -> last valid storage.  */
+
+#ifdef emacs
+    UNBLOCK_INPUT;
+#endif
   }
 
   if (size == 0)
@@ -201,6 +225,9 @@ alloca (size)
     register pointer new = malloc (sizeof (header) + size);
     /* Address of header.  */
 
+    if (new == 0)
+      abort();
+
     ((header *) new)->h.next = last_alloca_header;
     ((header *) new)->h.deep = depth;
 
@@ -330,7 +357,7 @@ struct stk_trailer
 
 #ifdef CRAY2
 /* Determine a "stack measure" for an arbitrary ADDRESS.
-   I doubt that "lint" will like this much. */
+   I doubt that "lint" will like this much.  */
 
 static long
 i00afunc (long *address)