changeset 37049:184d1fb71cc1

(live_string_p, live_cons_p, live_symbol_p) (live_float_p, live_misc_p): Return 1 only if the offset of the pointer in its block is >= 0.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 29 Mar 2001 10:35:24 +0000
parents 92d84a200c07
children 26cc1684baff
files src/alloc.c
diffstat 1 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Thu Mar 29 00:29:04 2001 +0000
+++ b/src/alloc.c	Thu Mar 29 10:35:24 2001 +0000
@@ -3114,7 +3114,8 @@
 
       /* P must point to the start of a Lisp_String structure, and it
 	 must not be on the free-list.  */
-      return (offset % sizeof b->strings[0] == 0
+      return (offset >= 0
+	      && offset % sizeof b->strings[0] == 0
 	      && ((struct Lisp_String *) p)->data != NULL);
     }
   else
@@ -3138,7 +3139,8 @@
       /* P must point to the start of a Lisp_Cons, not be
 	 one of the unused cells in the current cons block,
 	 and not be on the free-list.  */
-      return (offset % sizeof b->conses[0] == 0
+      return (offset >= 0
+	      && offset % sizeof b->conses[0] == 0
 	      && (b != cons_block
 		  || offset / sizeof b->conses[0] < cons_block_index)
 	      && !EQ (((struct Lisp_Cons *) p)->car, Vdead));
@@ -3164,7 +3166,8 @@
       /* P must point to the start of a Lisp_Symbol, not be
 	 one of the unused cells in the current symbol block,
 	 and not be on the free-list.  */
-      return (offset % sizeof b->symbols[0] == 0
+      return (offset >= 0
+	      && offset % sizeof b->symbols[0] == 0
 	      && (b != symbol_block
 		  || offset / sizeof b->symbols[0] < symbol_block_index)
 	      && !EQ (((struct Lisp_Symbol *) p)->function, Vdead));
@@ -3190,7 +3193,8 @@
       /* P must point to the start of a Lisp_Float, not be
 	 one of the unused cells in the current float block,
 	 and not be on the free-list.  */
-      return (offset % sizeof b->floats[0] == 0
+      return (offset >= 0
+	      && offset % sizeof b->floats[0] == 0
 	      && (b != float_block
 		  || offset / sizeof b->floats[0] < float_block_index)
 	      && !EQ (((struct Lisp_Float *) p)->type, Vdead));
@@ -3216,7 +3220,8 @@
       /* P must point to the start of a Lisp_Misc, not be
 	 one of the unused cells in the current misc block,
 	 and not be on the free-list.  */
-      return (offset % sizeof b->markers[0] == 0
+      return (offset >= 0
+	      && offset % sizeof b->markers[0] == 0
 	      && (b != marker_block
 		  || offset / sizeof b->markers[0] < marker_block_index)
 	      && ((union Lisp_Misc *) p)->u_marker.type != Lisp_Misc_Free);