Mercurial > emacs
comparison src/alloc.c @ 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 | c744d468bfb6 |
| children | a0cd311af6e3 |
comparison
equal
deleted
inserted
replaced
| 21947:18722fb8716f | 21948:d366b3e31fae |
|---|---|
| 1235 CHECK_NATNUM (length, 0); | 1235 CHECK_NATNUM (length, 0); |
| 1236 | 1236 |
| 1237 bits_per_value = sizeof (EMACS_INT) * BITS_PER_CHAR; | 1237 bits_per_value = sizeof (EMACS_INT) * BITS_PER_CHAR; |
| 1238 | 1238 |
| 1239 length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value; | 1239 length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value; |
| 1240 length_in_chars = length_in_elts * sizeof (EMACS_INT); | 1240 length_in_chars = ((XFASTINT (length) + BITS_PER_CHAR - 1) / BITS_PER_CHAR); |
| 1241 | 1241 |
| 1242 /* We must allocate one more elements than LENGTH_IN_ELTS for the | 1242 /* We must allocate one more elements than LENGTH_IN_ELTS for the |
| 1243 slot `size' of the struct Lisp_Bool_Vector. */ | 1243 slot `size' of the struct Lisp_Bool_Vector. */ |
| 1244 val = Fmake_vector (make_number (length_in_elts + 1), Qnil); | 1244 val = Fmake_vector (make_number (length_in_elts + 1), Qnil); |
| 1245 p = XBOOL_VECTOR (val); | 1245 p = XBOOL_VECTOR (val); |
| 1249 p->size = XFASTINT (length); | 1249 p->size = XFASTINT (length); |
| 1250 | 1250 |
| 1251 real_init = (NILP (init) ? 0 : -1); | 1251 real_init = (NILP (init) ? 0 : -1); |
| 1252 for (i = 0; i < length_in_chars ; i++) | 1252 for (i = 0; i < length_in_chars ; i++) |
| 1253 p->data[i] = real_init; | 1253 p->data[i] = real_init; |
| 1254 /* Clear the extraneous bits in the last byte. */ | |
| 1255 if (XINT (length) != length_in_chars * BITS_PER_CHAR) | |
| 1256 XBOOL_VECTOR (val)->data[length_in_chars - 1] | |
| 1257 &= (1 << (XINT (length) % BITS_PER_CHAR)) - 1; | |
| 1254 | 1258 |
| 1255 return val; | 1259 return val; |
| 1256 } | 1260 } |
| 1257 | 1261 |
| 1258 /* Make a string from NBYTES bytes at CONTENTS, | 1262 /* Make a string from NBYTES bytes at CONTENTS, |
