projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(jm_ICONV): Recommend GNU libiconv.
[gnulib.git]
/
lib
/
obstack.c
diff --git
a/lib/obstack.c
b/lib/obstack.c
index
7e87021
..
66639d7
100644
(file)
--- a/
lib/obstack.c
+++ b/
lib/obstack.c
@@
-1,5
+1,5
@@
/* obstack.c - subroutines used implicitly by object stack macros
/* obstack.c - subroutines used implicitly by object stack macros
- Copyright (C) 1988-1994,96,97,98,99 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.
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;
register long obj_size = h->next_free - h->object_base;
register long i;
long already;
+ char *object_base;
/* Compute size for new chunk. */
/* 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;
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;
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. */
/* 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--)
{
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
= ((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++)
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.
/* 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);
}
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;
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)
\f
/* Define the error handler. */
# ifndef _
\f
/* Define the error handler. */
# ifndef _
-# if
def HAVE_LIBINTL_H
+# if
defined HAVE_LIBINTL_H || defined _LIBC
# include <libintl.h>
# ifndef _
# define _(Str) gettext (Str)
# include <libintl.h>
# ifndef _
# define _(Str) gettext (Str)
@@
-518,20
+524,20
@@
int (obstack_make_room) (obstack, length)
return obstack_make_room (obstack, length);
}
return obstack_make_room (obstack, length);
}
-void (obstack_grow) (obstack,
pointer
, length)
+void (obstack_grow) (obstack,
data
, length)
struct obstack *obstack;
struct obstack *obstack;
-
POINTER pointer
;
+
const POINTER data
;
int length;
{
int length;
{
- obstack_grow (obstack,
pointer
, length);
+ obstack_grow (obstack,
data
, length);
}
}
-void (obstack_grow0) (obstack,
pointer
, length)
+void (obstack_grow0) (obstack,
data
, length)
struct obstack *obstack;
struct obstack *obstack;
-
POINTER pointer
;
+
const POINTER data
;
int length;
{
int length;
{
- obstack_grow0 (obstack,
pointer
, length);
+ obstack_grow0 (obstack,
data
, length);
}
void (obstack_1grow) (obstack, character)
}
void (obstack_1grow) (obstack, character)
@@
-575,20
+581,20
@@
POINTER (obstack_alloc) (obstack, length)
return obstack_alloc (obstack, length);
}
return obstack_alloc (obstack, length);
}
-POINTER (obstack_copy) (obstack,
pointer
, length)
+POINTER (obstack_copy) (obstack,
address
, length)
struct obstack *obstack;
struct obstack *obstack;
-
POINTER pointer
;
+
const POINTER address
;
int length;
{
int length;
{
- return obstack_copy (obstack,
pointer
, length);
+ return obstack_copy (obstack,
address
, length);
}
}
-POINTER (obstack_copy0) (obstack,
pointer
, length)
+POINTER (obstack_copy0) (obstack,
address
, length)
struct obstack *obstack;
struct obstack *obstack;
-
POINTER pointer
;
+
const POINTER address
;
int length;
{
int length;
{
- return obstack_copy0 (obstack,
pointer
, length);
+ return obstack_copy0 (obstack,
address
, length);
}
# endif /* __STDC__ */
}
# endif /* __STDC__ */