From a558a05d61acede40cb8f11fb1d2d74f1f142846 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 5 May 1998 19:30:33 +0000 Subject: [PATCH] (Fmake_bool_vector): Clear out extraneous bits at end. --- src/alloc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/alloc.c b/src/alloc.c index b41af98ac4f..e010f8501bc 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -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; } -- 2.39.2