changeset 21948:d366b3e31fae

(Fmake_bool_vector): Clear out extraneous bits at end.
author Richard M. Stallman <rms@gnu.org>
date Tue, 05 May 1998 19:30:33 +0000
parents 18722fb8716f
children a2166fb22606
files src/alloc.c
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Tue May 05 19:26:50 1998 +0000
+++ b/src/alloc.c	Tue May 05 19:30:33 1998 +0000
@@ -1237,7 +1237,7 @@
   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 @@
   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;
 }