Mercurial > emacs
changeset 20659:8f720ae97bf8
(STRING_BASE_SIZE): New macro.
(STRING_FULLSIZE): Use STRING_BASE_SIZE instead of the whole
size of struct Lisp_String.
(make_pure_string): Use STRING_FULLSIZE.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Sun, 18 Jan 1998 03:19:14 +0000 |
parents | 545fec062c8c |
children | deb167dcda0b |
files | src/alloc.c |
diffstat | 1 files changed, 10 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/alloc.c Sun Jan 18 02:53:16 1998 +0000 +++ b/src/alloc.c Sun Jan 18 03:19:14 1998 +0000 @@ -1119,9 +1119,14 @@ /* If SIZE is the length of a string, this returns how many bytes the string occupies in a string_block (including padding). */ -#define STRING_FULLSIZE(size) (((size) + sizeof (struct Lisp_String) + PAD) \ - & ~(PAD - 1)) -#define PAD (sizeof (EMACS_INT)) +#define STRING_FULLSIZE(size) (((size) + 1 + STRING_BASE_SIZE + STRING_PAD - 1) \ + & ~(STRING_PAD - 1)) + /* Add 1 for the null terminator, + and add STRING_PAD - 1 as part of rounding up. */ + +#define STRING_PAD (sizeof (EMACS_INT)) +/* Size of the stuff in the string not including its data. */ +#define STRING_BASE_SIZE (((sizeof (struct Lisp_String) - 1) / STRING_PAD) * STRING_PAD) #if 0 #define STRING_FULLSIZE(SIZE) \ @@ -1377,8 +1382,7 @@ int length_byte; { register Lisp_Object new; - register int size = (2 * sizeof (EMACS_INT) - + INTERVAL_PTR_SIZE + length_byte + 1); + register int size = STRING_FULLSIZE (length_byte); if (pureptr + size > PURESIZE) error ("Pure Lisp storage exhausted"); @@ -1393,8 +1397,7 @@ #if defined (USE_TEXT_PROPERTIES) XSTRING (new)->intervals = NULL_INTERVAL; #endif - pureptr += (size + sizeof (EMACS_INT) - 1) - / sizeof (EMACS_INT) * sizeof (EMACS_INT); + pureptr += size; return new; }