]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fmake_bool_vector): Clear out extraneous bits at end.
authorRichard M. Stallman <rms@gnu.org>
Tue, 5 May 1998 19:30:33 +0000 (19:30 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 5 May 1998 19:30:33 +0000 (19:30 +0000)
src/alloc.c

index b41af98ac4fab6bc5e3a6a537c947a25bc2e812d..e010f8501bcdf79f8233a56530485cedae75dd21 100644 (file)
@@ -1237,7 +1237,7 @@ LENGTH must be a number.  INIT matters only in whether it is t or nil.")
   bits_per_value = sizeof (EMACS_INT) * BITS_PER_CHAR;
 
   length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value;
-  length_in_chars = length_in_elts * sizeof (EMACS_INT);
+  length_in_chars = ((XFASTINT (length) + BITS_PER_CHAR - 1) / BITS_PER_CHAR);
 
   /* We must allocate one more elements than LENGTH_IN_ELTS for the
      slot `size' of the struct Lisp_Bool_Vector.  */
@@ -1251,6 +1251,10 @@ LENGTH must be a number.  INIT matters only in whether it is t or nil.")
   real_init = (NILP (init) ? 0 : -1);
   for (i = 0; i < length_in_chars ; i++)
     p->data[i] = real_init;
+  /* Clear the extraneous bits in the last byte.  */
+  if (XINT (length) != length_in_chars * BITS_PER_CHAR)
+    XBOOL_VECTOR (val)->data[length_in_chars - 1]
+      &= (1 << (XINT (length) % BITS_PER_CHAR)) - 1;
 
   return val;
 }