From: Jim Meyering Date: Wed, 25 Oct 2000 06:00:26 +0000 (+0000) Subject: Update from libc. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2dde31b95cb76c6a7c78669306c950c13b4aa5b;p=pspp Update from libc. --- diff --git a/lib/.cppi-disable b/lib/.cppi-disable index cfacdfc638..b3f9dfd478 100644 --- a/lib/.cppi-disable +++ b/lib/.cppi-disable @@ -8,3 +8,4 @@ obstack.h regex.h regex.c getpagesize.h +obstack.c diff --git a/lib/obstack.c b/lib/obstack.c index 639a6b0676..53ede1506f 100644 --- 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 @@ _obstack_newchunk (h, length) 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 @@ _obstack_newchunk (h, length) 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 @@ _obstack_newchunk (h, length) { 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 @@ _obstack_newchunk (h, length) 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 @@ _obstack_newchunk (h, length) 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 @@ _obstack_memory_used (h) /* Define the error handler. */ # ifndef _ -# ifdef HAVE_LIBINTL_H +# if defined HAVE_LIBINTL_H || defined _LIBC # include # ifndef _ # define _(Str) gettext (Str)