+2001-03-29 Gerd Moellmann <gerd@gnu.org>
+
+ * alloc.c (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.
+
2001-03-28 Paul Eggert <eggert@twinsun.com>
* editfns.c (Ffloat_time): Fix off-by-factor-of-10 bug in the
/* 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
/* 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));
/* 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));
/* 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));
/* 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);