changeset 49159:bc82a79251b5

(pure_alloc): Rewritten and simplified.
author Kim F. Storm <storm@cua.dk>
date Sun, 12 Jan 2003 15:36:40 +0000
parents c9d5d9f8e071
children dac2fe844fc4
files src/alloc.c
diffstat 1 files changed, 17 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Sun Jan 12 00:40:09 2003 +0000
+++ b/src/alloc.c	Sun Jan 12 15:36:40 2003 +0000
@@ -3831,46 +3831,34 @@
      size_t size;
      int type;
 {
-  size_t nbytes;
   POINTER_TYPE *result;
-  char *beg;
-
- again:
-  beg = purebeg;
-  result = (POINTER_TYPE *) (beg + pure_bytes_used);
-  nbytes = ALIGN (size, sizeof (EMACS_INT));
+  size_t alignment = sizeof (EMACS_INT);
 
   /* Give Lisp_Floats an extra alignment.  */
   if (type == Lisp_Float)
     {
-      POINTER_TYPE *orig = result;
-      size_t alignment;
 #if defined __GNUC__ && __GNUC__ >= 2
       alignment = __alignof (struct Lisp_Float);
 #else
       alignment = sizeof (struct Lisp_Float);
 #endif
-      /* Make sure result is correctly aligned for a
-	 Lisp_Float, which might need stricter alignment than
-	 EMACS_INT.  */
-      result = (POINTER_TYPE *)ALIGN((EMACS_UINT)result, alignment);
-      nbytes += (char *)result - (char *)orig;
     }
-    
-  if (pure_bytes_used + nbytes > pure_size)
-    {
-      /* Don't allocate a large amount here,
-	 because it might get mmap'd and then its address
-	 might not be usable.  */
-      purebeg = (char *) xmalloc (10000);
-      pure_size = 10000;
-      pure_bytes_used_before_overflow += pure_bytes_used;
-      pure_bytes_used = 0;
-      goto again;
-    }
-
-  pure_bytes_used += nbytes;
-  return result;
+
+ again:
+  result = (POINTER_TYPE *) ALIGN ((EMACS_UINT)purebeg + pure_bytes_used, alignment);
+  pure_bytes_used = ((char *)result - (char *)purebeg) + size;
+
+  if (pure_bytes_used <= pure_size)
+    return result;
+
+  /* Don't allocate a large amount here,
+     because it might get mmap'd and then its address
+     might not be usable.  */
+  purebeg = (char *) xmalloc (10000);
+  pure_size = 10000;
+  pure_bytes_used_before_overflow += pure_bytes_used - size;
+  pure_bytes_used = 0;
+  goto again;
 }