]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove more assumptions re struct layout (Bug#8884).
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 6 Jul 2011 22:22:32 +0000 (15:22 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 6 Jul 2011 22:22:32 +0000 (15:22 -0700)
src/ChangeLog
src/alloc.c
src/buffer.c

index 72a6f875f53f3691b27230981a075a72614d93f1..11ba7e00705a34621bbdaacaa5421f030846b40f 100644 (file)
@@ -1,7 +1,9 @@
 2011-07-06  Paul Eggert  <eggert@cs.ucla.edu>
 
        Remove unportable assumption about struct layout (Bug#8884).
-       * buffer.c (clone_per_buffer_values): Don't assume that
+       * alloc.c (mark_buffer):
+       * buffer.c (reset_buffer_local_variables, Fbuffer_local_variables)
+       (clone_per_buffer_values): Don't assume that
        sizeof (struct buffer) is a multiple of sizeof (Lisp_Object).
        This isn't true in general, and it's particularly not true
        if Emacs is configured with --with-wide-int.
index 43befd722bb8475543fc793830d089e82acf4b63..f679787e95c30da35a08a9616d9ff01efea001bb 100644 (file)
@@ -5619,7 +5619,8 @@ mark_buffer (Lisp_Object buf)
   /* buffer-local Lisp variables start at `undo_list',
      tho only the ones from `name' on are GC'd normally.  */
   for (ptr = &buffer->BUFFER_INTERNAL_FIELD (name);
-       (char *)ptr < (char *)buffer + sizeof (struct buffer);
+       ptr <= &PER_BUFFER_VALUE (buffer,
+                                PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER));
        ptr++)
     mark_object (*ptr);
 
index 6c7c2ec0d86823a1e76f38365dc491a2da217b84..e2f34d629e929940355011386803241d6ac6ed1e 100644 (file)
@@ -830,8 +830,8 @@ reset_buffer_local_variables (register struct buffer *b, int permanent_too)
 
   /* buffer-local Lisp variables start at `undo_list',
      tho only the ones from `name' on are GC'd normally.  */
-  for (offset = PER_BUFFER_VAR_OFFSET (undo_list);
-       offset < sizeof *b;
+  for (offset = PER_BUFFER_VAR_OFFSET (FIRST_FIELD_PER_BUFFER);
+       offset <= PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER);
        offset += sizeof (Lisp_Object))
     {
       int idx = PER_BUFFER_IDX (offset);
@@ -1055,8 +1055,8 @@ No argument or nil as argument means use current buffer as BUFFER.  */)
 
     /* buffer-local Lisp variables start at `undo_list',
        tho only the ones from `name' on are GC'd normally.  */
-    for (offset = PER_BUFFER_VAR_OFFSET (undo_list);
-        offset < sizeof (struct buffer);
+    for (offset = PER_BUFFER_VAR_OFFSET (FIRST_FIELD_PER_BUFFER);
+        offset <= PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER);
         /* sizeof EMACS_INT == sizeof Lisp_Object */
         offset += (sizeof (EMACS_INT)))
       {