Mercurial > hg > octave-lyh > gnulib-hg
changeset 2915:5690d50326cb
Update from libc.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Wed, 25 Oct 2000 06:00:26 +0000 |
parents | bab58b62d220 |
children | a78fcdeb63d2 |
files | lib/.cppi-disable lib/obstack.c |
diffstat | 2 files changed, 13 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/.cppi-disable +++ b/lib/.cppi-disable @@ -8,3 +8,4 @@ regex.h regex.c getpagesize.h +obstack.c
--- a/lib/obstack.c +++ b/lib/obstack.c @@ -1,5 +1,5 @@ /* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988-1994,96,97,98,1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1988-1994,96,97,98,99,2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. @@ -282,9 +282,10 @@ register long obj_size = h->next_free - h->object_base; register long i; long already; + char *object_base; /* Compute size for new chunk. */ - new_size = (obj_size + length) + (obj_size >> 3) + 100; + new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100; if (new_size < h->chunk_size) new_size = h->chunk_size; @@ -296,6 +297,11 @@ new_chunk->prev = old_chunk; new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; + /* Compute an aligned object_base in the new chunk */ + object_base = + __INT_TO_PTR ((__PTR_TO_INT (new_chunk->contents) + h->alignment_mask) + & ~ (h->alignment_mask)); + /* Move the existing object to the new chunk. Word at a time is fast and is safe if the object is sufficiently aligned. */ @@ -303,7 +309,7 @@ { for (i = obj_size / sizeof (COPYING_UNIT) - 1; i >= 0; i--) - ((COPYING_UNIT *)new_chunk->contents)[i] + ((COPYING_UNIT *)object_base)[i] = ((COPYING_UNIT *)h->object_base)[i]; /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, but that can cross a page boundary on a machine @@ -314,7 +320,7 @@ already = 0; /* Copy remaining bytes one by one. */ for (i = already; i < obj_size; i++) - new_chunk->contents[i] = h->object_base[i]; + object_base[i] = h->object_base[i]; /* If the object just copied was the only data in OLD_CHUNK, free that chunk and remove it from the chain. @@ -325,7 +331,7 @@ CALL_FREEFUN (h, old_chunk); } - h->object_base = new_chunk->contents; + h->object_base = object_base; h->next_free = h->object_base + obj_size; /* The new chunk certainly contains no empty object yet. */ h->maybe_empty_object = 0; @@ -451,7 +457,7 @@ /* Define the error handler. */ # ifndef _ -# ifdef HAVE_LIBINTL_H +# if defined HAVE_LIBINTL_H || defined _LIBC # include <libintl.h> # ifndef _ # define _(Str) gettext (Str)