1996-12-08 16:01:13 +08:00
|
|
|
/* obstack.h - object stack macros
|
2023-01-07 05:08:04 +08:00
|
|
|
Copyright (C) 1988-2023 Free Software Foundation, Inc.
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
This file is part of the GNU C Library.
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 12:58:11 +08:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2001-07-06 12:58:11 +08:00
|
|
|
Lesser General Public License for more details.
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2001-07-06 12:58:11 +08:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-10 07:18:22 +08:00
|
|
|
License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 13:40:42 +08:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
/* Summary:
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
All the apparent functions defined here are macros. The idea
|
|
|
|
is that you would use these pre-tested macros to solve a
|
|
|
|
very specific set of problems, and they would run fast.
|
|
|
|
Caution: no side-effects in arguments please!! They may be
|
|
|
|
evaluated MANY times!!
|
|
|
|
|
|
|
|
These macros operate a stack of objects. Each object starts life
|
|
|
|
small, and may grow to maturity. (Consider building a word syllable
|
|
|
|
by syllable.) An object can move while it is growing. Once it has
|
|
|
|
been "finished" it never changes address again. So the "top of the
|
|
|
|
stack" is typically an immature growing object, while the rest of the
|
|
|
|
stack is of mature, fixed size and fixed address objects.
|
|
|
|
|
|
|
|
These routines grab large chunks of memory, using a function you
|
2014-06-23 23:53:30 +08:00
|
|
|
supply, called 'obstack_chunk_alloc'. On occasion, they free chunks,
|
|
|
|
by calling 'obstack_chunk_free'. You must define them and declare
|
2014-01-02 16:38:18 +08:00
|
|
|
them before using any obstack macros.
|
|
|
|
|
2014-06-23 23:53:30 +08:00
|
|
|
Each independent stack is represented by a 'struct obstack'.
|
2014-01-02 16:38:18 +08:00
|
|
|
Each of the obstack macros expects a pointer to such a structure
|
|
|
|
as the first argument.
|
|
|
|
|
|
|
|
One motivation for this package is the problem of growing char strings
|
|
|
|
in symbol tables. Unless you are "fascist pig with a read-only mind"
|
|
|
|
--Gosper's immortal quote from HAKMEM item 154, out of context--you
|
|
|
|
would not like to put any arbitrary upper limit on the length of your
|
|
|
|
symbols.
|
|
|
|
|
|
|
|
In practice this often means you will build many short symbols and a
|
|
|
|
few long symbols. At the time you are reading a symbol you don't know
|
|
|
|
how long it is. One traditional method is to read a symbol into a
|
|
|
|
buffer, realloc()ating the buffer every time you try to read a symbol
|
|
|
|
that is longer than the buffer. This is beaut, but you still will
|
|
|
|
want to copy the symbol from the buffer to a more permanent
|
|
|
|
symbol-table entry say about half the time.
|
|
|
|
|
|
|
|
With obstacks, you can work differently. Use one obstack for all symbol
|
|
|
|
names. As you read a symbol, grow the name in the obstack gradually.
|
|
|
|
When the name is complete, finalize it. Then, if the symbol exists already,
|
|
|
|
free the newly read name.
|
|
|
|
|
|
|
|
The way we do this is to take a large chunk, allocating memory from
|
|
|
|
low addresses. When you want to build a symbol in the chunk you just
|
|
|
|
add chars above the current "high water mark" in the chunk. When you
|
|
|
|
have finished adding chars, because you got to the end of the symbol,
|
|
|
|
you know how long the chars are, and you can create a new object.
|
|
|
|
Mostly the chars will not burst over the highest address of the chunk,
|
|
|
|
because you would typically expect a chunk to be (say) 100 times as
|
|
|
|
long as an average object.
|
|
|
|
|
|
|
|
In case that isn't clear, when we have enough chars to make up
|
|
|
|
the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
|
|
|
|
so we just point to it where it lies. No moving of chars is
|
|
|
|
needed and this is the second win: potentially long strings need
|
|
|
|
never be explicitly shuffled. Once an object is formed, it does not
|
|
|
|
change its address during its lifetime.
|
|
|
|
|
|
|
|
When the chars burst over a chunk boundary, we allocate a larger
|
|
|
|
chunk, and then copy the partly formed object from the end of the old
|
|
|
|
chunk to the beginning of the new larger chunk. We then carry on
|
|
|
|
accreting characters to the end of the object as we normally would.
|
|
|
|
|
|
|
|
A special macro is provided to add a single char at a time to a
|
|
|
|
growing object. This allows the use of register variables, which
|
|
|
|
break the ordinary 'growth' macro.
|
|
|
|
|
|
|
|
Summary:
|
2014-06-23 23:53:30 +08:00
|
|
|
We allocate large chunks.
|
|
|
|
We carve out one object at a time from the current chunk.
|
|
|
|
Once carved, an object never moves.
|
|
|
|
We are free to append data of any size to the currently
|
|
|
|
growing object.
|
|
|
|
Exactly one object is growing in an obstack at any one time.
|
|
|
|
You can run one obstack per control block.
|
|
|
|
You may have as many control blocks as you dare.
|
|
|
|
Because of the way we do it, you can "unwind" an obstack
|
|
|
|
back to a previous state. (You may remove objects much
|
|
|
|
as you would with a stack.)
|
2014-01-02 16:38:18 +08:00
|
|
|
*/
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
/* Don't do the contents of this file more than once. */
|
|
|
|
|
1997-06-21 10:59:26 +08:00
|
|
|
#ifndef _OBSTACK_H
|
|
|
|
#define _OBSTACK_H 1
|
1997-02-19 12:43:53 +08:00
|
|
|
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
/* We need the type of a pointer subtraction. If __PTRDIFF_TYPE__ is
|
Update.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* nss/nsswitch.c (__nss_lookup): Return 1 if this was the last
module.
* nss/getXXent_r.c: If no more module is found don't try to call
setXXent functions but leave unsuccessfully.
* malloc/obstack.h: Cleanups.
* sysdeps/wordsize-32/stdint.h: New file.
* sysdeps/wordsize-64/stdint.h: New file.
* sysdeps/generic/stdint.h: New file.
* sysdeps/wordsize-32/inttypes.h: Adopt to use stdint.h.
* sysdeps/wordsize-64/inttypes.h: Likewise.
* stdlib/Makefile (headers): Add stdint.h.
1998-02-03 Paul Eggert <eggert@twinsun.com>
* malloc/obstack.h (PTR_INT_TYPE): Use __PTRDIFF_TYPE__ if available.
1998-02-13 17:59 Zack Weinberg <zack@rabi.phys.columbia.edu>
* timezone: New directory.
* time/README, time/africa, time/antarctica, time/asia,
time/australasia, time/backward, time/checktab.awk,
time/etcetera, time/europe, time/factory, time/ialloc.c,
time/iso3166.tab, time/leapseconds, time/northamerica,
time/pacificnew, time/private.h, time/scheck.c,
time/solar87, time/solar88, time/solar89, time/southamerica,
time/systemv, time/test-tz.c, time/tzfile.h,
time/tzselect.ksh, time/yearistype, time/zdump.c,
time/zic.c, time/zone.tab: Moved to timezone.
* time/tzfile.c: Include tzfile.h from timezone subdir.
* time/tzset.c: Likewise.
* time/Makefile: Cut out all code relating to timezones...
* timezone/Makefile: ...and paste it in here.
* Makefile (subdirs): Add timezone.
1998-02-13 18:45 H.J. Lu <hjl@gnu.org>
* libc.map (_sys_nerr): Added.
* sysdeps/unix/sysv/linux/errlist.c (_sys_nerr): Make it
versioned symbol.
1998-02-15 17:16 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_KEY and
pseudo_AF_KEY instead of pseudo_PF_KEY and AF_KEY.
Reported by Craig Metz <cmetz@inner.net>.
1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): Use __strcasecmp
instead of strcasecmp.
* nss/nss_files/files-alias.c (get_next_alias): Likewise.
* wctype/wctype.h (_ISwbit): Avoid warning with gcc before 2.8.
1998-02-15 16:55 Ulrich Drepper <drepper@cygnus.com>
* socket/sys/socket.h (setsockopt): Make OPTVAL parameter const.
Patch by Dean Gaudet <dgaudet@arctic.org>.
1998-02-15 16:53 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/Dist: Add getresgid.c and getresuid.c.
1998-02-15 10:49 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sysdeps/unix/sysv/linux/poll.c: If compiled against a kernel
with no poll syscall, just include the BSD version.
* sysdeps/unix/sysv/linux/getresuid.c: If compiled against a
kernel without the syscall, include the stub version.
* sysdeps/unix/sysv/linux/getresgid.c: Likewise.
* sysdeps/generic/getresuid.c: New file.
* sysdeps/generic/getresgid.c: New file.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Correct last change a bit.
1998-02-16 03:31:34 +08:00
|
|
|
defined, as with GNU C, use that; that way we don't pollute the
|
2004-01-28 11:54:31 +08:00
|
|
|
namespace with <stddef.h>'s symbols. Otherwise, include <stddef.h>
|
|
|
|
and use ptrdiff_t. */
|
1996-12-08 16:01:13 +08:00
|
|
|
|
Update.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* nss/nsswitch.c (__nss_lookup): Return 1 if this was the last
module.
* nss/getXXent_r.c: If no more module is found don't try to call
setXXent functions but leave unsuccessfully.
* malloc/obstack.h: Cleanups.
* sysdeps/wordsize-32/stdint.h: New file.
* sysdeps/wordsize-64/stdint.h: New file.
* sysdeps/generic/stdint.h: New file.
* sysdeps/wordsize-32/inttypes.h: Adopt to use stdint.h.
* sysdeps/wordsize-64/inttypes.h: Likewise.
* stdlib/Makefile (headers): Add stdint.h.
1998-02-03 Paul Eggert <eggert@twinsun.com>
* malloc/obstack.h (PTR_INT_TYPE): Use __PTRDIFF_TYPE__ if available.
1998-02-13 17:59 Zack Weinberg <zack@rabi.phys.columbia.edu>
* timezone: New directory.
* time/README, time/africa, time/antarctica, time/asia,
time/australasia, time/backward, time/checktab.awk,
time/etcetera, time/europe, time/factory, time/ialloc.c,
time/iso3166.tab, time/leapseconds, time/northamerica,
time/pacificnew, time/private.h, time/scheck.c,
time/solar87, time/solar88, time/solar89, time/southamerica,
time/systemv, time/test-tz.c, time/tzfile.h,
time/tzselect.ksh, time/yearistype, time/zdump.c,
time/zic.c, time/zone.tab: Moved to timezone.
* time/tzfile.c: Include tzfile.h from timezone subdir.
* time/tzset.c: Likewise.
* time/Makefile: Cut out all code relating to timezones...
* timezone/Makefile: ...and paste it in here.
* Makefile (subdirs): Add timezone.
1998-02-13 18:45 H.J. Lu <hjl@gnu.org>
* libc.map (_sys_nerr): Added.
* sysdeps/unix/sysv/linux/errlist.c (_sys_nerr): Make it
versioned symbol.
1998-02-15 17:16 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_KEY and
pseudo_AF_KEY instead of pseudo_PF_KEY and AF_KEY.
Reported by Craig Metz <cmetz@inner.net>.
1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): Use __strcasecmp
instead of strcasecmp.
* nss/nss_files/files-alias.c (get_next_alias): Likewise.
* wctype/wctype.h (_ISwbit): Avoid warning with gcc before 2.8.
1998-02-15 16:55 Ulrich Drepper <drepper@cygnus.com>
* socket/sys/socket.h (setsockopt): Make OPTVAL parameter const.
Patch by Dean Gaudet <dgaudet@arctic.org>.
1998-02-15 16:53 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/Dist: Add getresgid.c and getresuid.c.
1998-02-15 10:49 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sysdeps/unix/sysv/linux/poll.c: If compiled against a kernel
with no poll syscall, just include the BSD version.
* sysdeps/unix/sysv/linux/getresuid.c: If compiled against a
kernel without the syscall, include the stub version.
* sysdeps/unix/sysv/linux/getresgid.c: Likewise.
* sysdeps/generic/getresuid.c: New file.
* sysdeps/generic/getresgid.c: New file.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Correct last change a bit.
1998-02-16 03:31:34 +08:00
|
|
|
#ifdef __PTRDIFF_TYPE__
|
|
|
|
# define PTR_INT_TYPE __PTRDIFF_TYPE__
|
1996-12-08 16:01:13 +08:00
|
|
|
#else
|
2004-01-28 11:54:31 +08:00
|
|
|
# include <stddef.h>
|
|
|
|
# define PTR_INT_TYPE ptrdiff_t
|
1996-12-08 16:01:13 +08:00
|
|
|
#endif
|
|
|
|
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
/* If B is the base of an object addressed by P, return the result of
|
|
|
|
aligning P to the next multiple of A + 1. B and P must be of type
|
|
|
|
char *. A + 1 must be a power of 2. */
|
|
|
|
|
2014-06-23 23:53:30 +08:00
|
|
|
#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
|
2014-06-23 23:53:30 +08:00
|
|
|
/* Similar to _BPTR_ALIGN (B, P, A), except optimize the common case
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
where pointers can be converted to integers, aligned as integers,
|
|
|
|
and converted back again. If PTR_INT_TYPE is narrower than a
|
|
|
|
pointer (e.g., the AS/400), play it safe and compute the alignment
|
|
|
|
relative to B. Otherwise, use the faster strategy of computing the
|
|
|
|
alignment relative to 0. */
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
#define __PTR_ALIGN(B, P, A) \
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
__BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
|
2014-06-23 23:53:30 +08:00
|
|
|
P, A)
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
|
2004-01-28 11:54:31 +08:00
|
|
|
#include <string.h>
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-06-23 23:53:30 +08:00
|
|
|
#ifndef __attribute_pure__
|
|
|
|
# define __attribute_pure__ _GL_ATTRIBUTE_PURE
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
struct _obstack_chunk /* Lives at front of each chunk. */
|
1996-12-08 16:01:13 +08:00
|
|
|
{
|
2014-01-02 16:38:18 +08:00
|
|
|
char *limit; /* 1 past end of this chunk */
|
|
|
|
struct _obstack_chunk *prev; /* address of prior chunk or NULL */
|
|
|
|
char contents[4]; /* objects begin here */
|
1996-12-08 16:01:13 +08:00
|
|
|
};
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
struct obstack /* control current object in current chunk */
|
1996-12-08 16:01:13 +08:00
|
|
|
{
|
2014-01-02 16:38:18 +08:00
|
|
|
long chunk_size; /* preferred size to allocate chunks in */
|
|
|
|
struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
|
|
|
|
char *object_base; /* address of object we are building */
|
|
|
|
char *next_free; /* where to add next char to current object */
|
|
|
|
char *chunk_limit; /* address of char after current chunk */
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
union
|
|
|
|
{
|
|
|
|
PTR_INT_TYPE tempint;
|
|
|
|
void *tempptr;
|
2014-01-02 16:38:18 +08:00
|
|
|
} temp; /* Temporary for some macros. */
|
|
|
|
int alignment_mask; /* Mask of alignment for each object. */
|
2014-06-23 23:53:30 +08:00
|
|
|
/* These prototypes vary based on 'use_extra_arg', and we use
|
1996-12-08 16:01:13 +08:00
|
|
|
casts to the prototypeless function type in all assignments,
|
|
|
|
but having prototypes here quiets -Wstrict-prototypes. */
|
|
|
|
struct _obstack_chunk *(*chunkfun) (void *, long);
|
|
|
|
void (*freefun) (void *, struct _obstack_chunk *);
|
2014-01-02 16:38:18 +08:00
|
|
|
void *extra_arg; /* first arg for chunk alloc/dealloc funcs */
|
|
|
|
unsigned use_extra_arg : 1; /* chunk alloc/dealloc funcs take extra arg */
|
|
|
|
unsigned maybe_empty_object : 1; /* There is a possibility that the current
|
2014-06-23 23:53:30 +08:00
|
|
|
chunk contains a zero-length object. This
|
|
|
|
prevents freeing the chunk if we allocate
|
|
|
|
a bigger chunk to replace it. */
|
2014-01-02 16:38:18 +08:00
|
|
|
unsigned alloc_failed : 1; /* No longer used, as we now call the failed
|
2014-06-23 23:53:30 +08:00
|
|
|
handler on error, but retained for binary
|
|
|
|
compatibility. */
|
1996-12-08 16:01:13 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Declare the external functions we use; they are in obstack.c. */
|
|
|
|
|
|
|
|
extern void _obstack_newchunk (struct obstack *, int);
|
|
|
|
extern int _obstack_begin (struct obstack *, int, int,
|
2014-06-23 23:53:30 +08:00
|
|
|
void *(*)(long), void (*)(void *));
|
1996-12-08 16:01:13 +08:00
|
|
|
extern int _obstack_begin_1 (struct obstack *, int, int,
|
2014-06-23 23:53:30 +08:00
|
|
|
void *(*)(void *, long),
|
|
|
|
void (*)(void *, void *), void *);
|
|
|
|
extern int _obstack_memory_used (struct obstack *) __attribute_pure__;
|
|
|
|
|
|
|
|
/* The default name of the function for freeing a chunk is 'obstack_free',
|
|
|
|
but gnulib users can override this by defining '__obstack_free'. */
|
|
|
|
#ifndef __obstack_free
|
|
|
|
# define __obstack_free obstack_free
|
|
|
|
#endif
|
|
|
|
extern void __obstack_free (struct obstack *, void *);
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
|
2014-06-23 23:53:30 +08:00
|
|
|
/* Error handler called when 'obstack_chunk_alloc' failed to allocate
|
Update.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/swap.h (SWAP_FLAG_PREFER,
SWAP_FLAG_PRIO_MASK,SWAP_FLAG_PRIO_SHIFT): Added.
Remove inclusion of <linux/swap.h>.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* io/sys/stat.h: Use __P in definitions of inline stat functions
so that they match the declaration.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/quota.h (Q_RSQUASH): Added.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/acct.h: Bring in sync with current
linux 2.1 version.
1998-10-02 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/dl-machine.h: Fix typo in last change.
* sysdeps/arm/bits/huge_val.h: New file.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/reboot.h (RB_POWER_OFF): Added.
* sysdeps/unix/sysv/linux/sys/ptrace.h (PTRACE_SYSCALL): Add
define.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/posix/getcwd.c (__getcwd): Use temporary variable to
store result of realloc instead of using BUF.
1998-10-04 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* misc/sgtty.h (_SGTTY_H): Correct spelling.
Reported by Rouben Rostamian <rostamian@umbc.edu> [PR libc/817].
1998-10-04 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/memory.texi (Obstacks): Document
obstack_alloc_failed_handler usage.
* malloc/obstack.h: Enhance comment about
obstack_alloc_failed_handler usage.
* malloc/obstack.c: Likewise.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* misc/sys/cdefs.h (__extension__): Define as empty if no gcc or
gcc before 2.8 is used.
1998-10-01 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/machine-gmon.h: Correct args to mcount(). Patch
from Scott Bambrough.
* sysdeps/unix/sysv/linux/arm/register-dump.h: New file.
* libio/libioP.h (FILEBUF_LITERAL) [! _IO_MTSAFE_IO]: Don't
include the lock member.
1998-09-03 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/fpu/__longjmp.S: Cope with fussy assembler.
1998-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* string/bits/string2.h (__string2_1bptr_p): Don't use a statement
expression.
(__mempcpy, strcpy, __stpcpy, strcmp, strcspn, strspn, strpbrk,
__strsep): Greatly reduce size of expansion by combining common
expressions.
(__mempcpy_small, __strcpy_small, __stpcpy_small): Convert to
inline function.
(__mempcpy_args, __strcpy_args, __stpcpy_args): New macros, used
by the above definitions.
1998-09-27 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/unix/sysv/linux/powerpc/bits/ipc.h: New file, use
correct struct ipc_perm definition.
1998-09-29 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/ypclnt.c (yp_all): Close UDP socket und give CLIENT handle free.
* sysdeps/unix/sysv/linux/alpha/ioperm.c: List Ruffian in platforms[].
* sysdeps/unix/sysv/linux/net/if_shaper.h: New file.
1998-10-05 21:40:47 +08:00
|
|
|
more memory. This can be set to a user defined function which
|
|
|
|
should either abort gracefully or use longjump - but shouldn't
|
|
|
|
return. The default action is to print a message and abort. */
|
1996-12-08 16:01:13 +08:00
|
|
|
extern void (*obstack_alloc_failed_handler) (void);
|
|
|
|
|
2014-06-23 23:53:30 +08:00
|
|
|
/* Exit value used when 'print_and_abort' is used. */
|
1996-12-08 16:01:13 +08:00
|
|
|
extern int obstack_exit_failure;
|
2014-01-02 16:38:18 +08:00
|
|
|
|
1996-12-08 16:01:13 +08:00
|
|
|
/* Pointer to beginning of object being allocated or to be allocated next.
|
|
|
|
Note that this might not be the final address of the object
|
|
|
|
because a new chunk might be needed to hold the final size. */
|
|
|
|
|
2004-06-30 01:28:24 +08:00
|
|
|
#define obstack_base(h) ((void *) (h)->object_base)
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
/* Size for allocating ordinary chunks. */
|
|
|
|
|
|
|
|
#define obstack_chunk_size(h) ((h)->chunk_size)
|
|
|
|
|
|
|
|
/* Pointer to next byte not yet allocated in current chunk. */
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
#define obstack_next_free(h) ((h)->next_free)
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
/* Mask specifying low bits that should be clear in address of an object. */
|
|
|
|
|
|
|
|
#define obstack_alignment_mask(h) ((h)->alignment_mask)
|
|
|
|
|
2004-01-28 11:54:31 +08:00
|
|
|
/* To prevent prototype warnings provide complete argument list. */
|
2014-01-02 16:38:18 +08:00
|
|
|
#define obstack_init(h) \
|
|
|
|
_obstack_begin ((h), 0, 0, \
|
2014-06-23 23:53:30 +08:00
|
|
|
(void *(*)(long))obstack_chunk_alloc, \
|
|
|
|
(void (*)(void *))obstack_chunk_free)
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
#define obstack_begin(h, size) \
|
|
|
|
_obstack_begin ((h), (size), 0, \
|
2014-06-23 23:53:30 +08:00
|
|
|
(void *(*)(long))obstack_chunk_alloc, \
|
|
|
|
(void (*)(void *))obstack_chunk_free)
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2004-01-28 11:54:31 +08:00
|
|
|
#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
2014-01-02 16:38:18 +08:00
|
|
|
_obstack_begin ((h), (size), (alignment), \
|
2014-06-23 23:53:30 +08:00
|
|
|
(void *(*)(long))(chunkfun), \
|
|
|
|
(void (*)(void *))(freefun))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2004-01-28 11:54:31 +08:00
|
|
|
#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
2014-01-02 16:38:18 +08:00
|
|
|
_obstack_begin_1 ((h), (size), (alignment), \
|
2014-06-23 23:53:30 +08:00
|
|
|
(void *(*)(void *, long))(chunkfun), \
|
|
|
|
(void (*)(void *, void *))(freefun), (arg))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2004-01-28 11:54:31 +08:00
|
|
|
#define obstack_chunkfun(h, newchunkfun) \
|
2014-01-02 16:38:18 +08:00
|
|
|
((h)->chunkfun = (struct _obstack_chunk *(*)(void *, long))(newchunkfun))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2004-01-28 11:54:31 +08:00
|
|
|
#define obstack_freefun(h, newfreefun) \
|
2014-01-02 16:38:18 +08:00
|
|
|
((h)->freefun = (void (*)(void *, struct _obstack_chunk *))(newfreefun))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
#define obstack_1grow_fast(h, achar) (*((h)->next_free)++ = (achar))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
#define obstack_blank_fast(h, n) ((h)->next_free += (n))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
#define obstack_memory_used(h) _obstack_memory_used (h)
|
2014-01-02 16:38:18 +08:00
|
|
|
|
2012-01-27 04:49:22 +08:00
|
|
|
#if defined __GNUC__
|
2014-06-23 23:53:30 +08:00
|
|
|
# if ! (2 < __GNUC__ + (8 <= __GNUC_MINOR__))
|
Update.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* nss/nsswitch.c (__nss_lookup): Return 1 if this was the last
module.
* nss/getXXent_r.c: If no more module is found don't try to call
setXXent functions but leave unsuccessfully.
* malloc/obstack.h: Cleanups.
* sysdeps/wordsize-32/stdint.h: New file.
* sysdeps/wordsize-64/stdint.h: New file.
* sysdeps/generic/stdint.h: New file.
* sysdeps/wordsize-32/inttypes.h: Adopt to use stdint.h.
* sysdeps/wordsize-64/inttypes.h: Likewise.
* stdlib/Makefile (headers): Add stdint.h.
1998-02-03 Paul Eggert <eggert@twinsun.com>
* malloc/obstack.h (PTR_INT_TYPE): Use __PTRDIFF_TYPE__ if available.
1998-02-13 17:59 Zack Weinberg <zack@rabi.phys.columbia.edu>
* timezone: New directory.
* time/README, time/africa, time/antarctica, time/asia,
time/australasia, time/backward, time/checktab.awk,
time/etcetera, time/europe, time/factory, time/ialloc.c,
time/iso3166.tab, time/leapseconds, time/northamerica,
time/pacificnew, time/private.h, time/scheck.c,
time/solar87, time/solar88, time/solar89, time/southamerica,
time/systemv, time/test-tz.c, time/tzfile.h,
time/tzselect.ksh, time/yearistype, time/zdump.c,
time/zic.c, time/zone.tab: Moved to timezone.
* time/tzfile.c: Include tzfile.h from timezone subdir.
* time/tzset.c: Likewise.
* time/Makefile: Cut out all code relating to timezones...
* timezone/Makefile: ...and paste it in here.
* Makefile (subdirs): Add timezone.
1998-02-13 18:45 H.J. Lu <hjl@gnu.org>
* libc.map (_sys_nerr): Added.
* sysdeps/unix/sysv/linux/errlist.c (_sys_nerr): Make it
versioned symbol.
1998-02-15 17:16 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_KEY and
pseudo_AF_KEY instead of pseudo_PF_KEY and AF_KEY.
Reported by Craig Metz <cmetz@inner.net>.
1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): Use __strcasecmp
instead of strcasecmp.
* nss/nss_files/files-alias.c (get_next_alias): Likewise.
* wctype/wctype.h (_ISwbit): Avoid warning with gcc before 2.8.
1998-02-15 16:55 Ulrich Drepper <drepper@cygnus.com>
* socket/sys/socket.h (setsockopt): Make OPTVAL parameter const.
Patch by Dean Gaudet <dgaudet@arctic.org>.
1998-02-15 16:53 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/Dist: Add getresgid.c and getresuid.c.
1998-02-15 10:49 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sysdeps/unix/sysv/linux/poll.c: If compiled against a kernel
with no poll syscall, just include the BSD version.
* sysdeps/unix/sysv/linux/getresuid.c: If compiled against a
kernel without the syscall, include the stub version.
* sysdeps/unix/sysv/linux/getresgid.c: Likewise.
* sysdeps/generic/getresuid.c: New file.
* sysdeps/generic/getresgid.c: New file.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Correct last change a bit.
1998-02-16 03:31:34 +08:00
|
|
|
# define __extension__
|
|
|
|
# endif
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
/* For GNU C, if not -traditional,
|
|
|
|
we can define these macros to compute all args only once
|
|
|
|
without using a global variable.
|
2014-06-23 23:53:30 +08:00
|
|
|
Also, we can avoid using the 'temp' slot, to make faster code. */
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_object_size(OBSTACK) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack const *__o = (OBSTACK); \
|
|
|
|
(unsigned) (__o->next_free - __o->object_base); })
|
|
|
|
|
|
|
|
# define obstack_room(OBSTACK) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack const *__o = (OBSTACK); \
|
|
|
|
(unsigned) (__o->chunk_limit - __o->next_free); })
|
|
|
|
|
|
|
|
# define obstack_make_room(OBSTACK, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
int __len = (length); \
|
|
|
|
if (__o->chunk_limit - __o->next_free < __len) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, __len); \
|
2014-01-02 16:38:18 +08:00
|
|
|
(void) 0; })
|
|
|
|
|
|
|
|
# define obstack_empty_p(OBSTACK) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack const *__o = (OBSTACK); \
|
|
|
|
(__o->chunk->prev == 0 \
|
2014-06-23 23:53:30 +08:00
|
|
|
&& __o->next_free == __PTR_ALIGN ((char *) __o->chunk, \
|
|
|
|
__o->chunk->contents, \
|
|
|
|
__o->alignment_mask)); })
|
2014-01-02 16:38:18 +08:00
|
|
|
|
|
|
|
# define obstack_grow(OBSTACK, where, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
int __len = (length); \
|
|
|
|
if (__o->next_free + __len > __o->chunk_limit) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, __len); \
|
2014-01-02 16:38:18 +08:00
|
|
|
memcpy (__o->next_free, where, __len); \
|
|
|
|
__o->next_free += __len; \
|
|
|
|
(void) 0; })
|
|
|
|
|
|
|
|
# define obstack_grow0(OBSTACK, where, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
int __len = (length); \
|
|
|
|
if (__o->next_free + __len + 1 > __o->chunk_limit) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, __len + 1); \
|
2014-01-02 16:38:18 +08:00
|
|
|
memcpy (__o->next_free, where, __len); \
|
|
|
|
__o->next_free += __len; \
|
|
|
|
*(__o->next_free)++ = 0; \
|
|
|
|
(void) 0; })
|
|
|
|
|
|
|
|
# define obstack_1grow(OBSTACK, datum) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
if (__o->next_free + 1 > __o->chunk_limit) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, 1); \
|
2014-01-02 16:38:18 +08:00
|
|
|
obstack_1grow_fast (__o, datum); \
|
|
|
|
(void) 0; })
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2000-11-18 16:11:59 +08:00
|
|
|
/* These assume that the obstack alignment is good enough for pointers
|
|
|
|
or ints, and that the data added so far to the current object
|
1996-12-08 16:01:13 +08:00
|
|
|
shares that much alignment. */
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_ptr_grow(OBSTACK, datum) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, sizeof (void *)); \
|
2014-01-02 16:38:18 +08:00
|
|
|
obstack_ptr_grow_fast (__o, datum); }) \
|
|
|
|
|
|
|
|
# define obstack_int_grow(OBSTACK, datum) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
if (__o->next_free + sizeof (int) > __o->chunk_limit) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, sizeof (int)); \
|
2014-01-02 16:38:18 +08:00
|
|
|
obstack_int_grow_fast (__o, datum); })
|
|
|
|
|
|
|
|
# define obstack_ptr_grow_fast(OBSTACK, aptr) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o1 = (OBSTACK); \
|
2014-06-23 23:53:30 +08:00
|
|
|
void *__p1 = __o1->next_free; \
|
|
|
|
*(const void **) __p1 = (aptr); \
|
2014-01-02 16:38:18 +08:00
|
|
|
__o1->next_free += sizeof (const void *); \
|
|
|
|
(void) 0; })
|
|
|
|
|
|
|
|
# define obstack_int_grow_fast(OBSTACK, aint) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o1 = (OBSTACK); \
|
2014-06-23 23:53:30 +08:00
|
|
|
void *__p1 = __o1->next_free; \
|
|
|
|
*(int *) __p1 = (aint); \
|
2014-01-02 16:38:18 +08:00
|
|
|
__o1->next_free += sizeof (int); \
|
|
|
|
(void) 0; })
|
|
|
|
|
|
|
|
# define obstack_blank(OBSTACK, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
int __len = (length); \
|
|
|
|
if (__o->chunk_limit - __o->next_free < __len) \
|
2014-06-23 23:53:30 +08:00
|
|
|
_obstack_newchunk (__o, __len); \
|
2014-01-02 16:38:18 +08:00
|
|
|
obstack_blank_fast (__o, __len); \
|
|
|
|
(void) 0; })
|
|
|
|
|
|
|
|
# define obstack_alloc(OBSTACK, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__h = (OBSTACK); \
|
|
|
|
obstack_blank (__h, (length)); \
|
|
|
|
obstack_finish (__h); })
|
|
|
|
|
|
|
|
# define obstack_copy(OBSTACK, where, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__h = (OBSTACK); \
|
|
|
|
obstack_grow (__h, (where), (length)); \
|
|
|
|
obstack_finish (__h); })
|
|
|
|
|
|
|
|
# define obstack_copy0(OBSTACK, where, length) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__h = (OBSTACK); \
|
|
|
|
obstack_grow0 (__h, (where), (length)); \
|
|
|
|
obstack_finish (__h); })
|
1996-12-08 16:01:13 +08:00
|
|
|
|
|
|
|
/* The local variable is named __o1 to avoid a name conflict
|
|
|
|
when obstack_blank is called. */
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_finish(OBSTACK) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o1 = (OBSTACK); \
|
|
|
|
void *__value = (void *) __o1->object_base; \
|
|
|
|
if (__o1->next_free == __value) \
|
2014-06-23 23:53:30 +08:00
|
|
|
__o1->maybe_empty_object = 1; \
|
2014-01-02 16:38:18 +08:00
|
|
|
__o1->next_free \
|
2014-06-23 23:53:30 +08:00
|
|
|
= __PTR_ALIGN (__o1->object_base, __o1->next_free, \
|
|
|
|
__o1->alignment_mask); \
|
2014-01-02 16:38:18 +08:00
|
|
|
if (__o1->next_free - (char *) __o1->chunk \
|
2014-06-23 23:53:30 +08:00
|
|
|
> __o1->chunk_limit - (char *) __o1->chunk) \
|
|
|
|
__o1->next_free = __o1->chunk_limit; \
|
2014-01-02 16:38:18 +08:00
|
|
|
__o1->object_base = __o1->next_free; \
|
|
|
|
__value; })
|
|
|
|
|
|
|
|
# define obstack_free(OBSTACK, OBJ) \
|
|
|
|
__extension__ \
|
|
|
|
({ struct obstack *__o = (OBSTACK); \
|
|
|
|
void *__obj = (OBJ); \
|
|
|
|
if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \
|
2014-06-23 23:53:30 +08:00
|
|
|
__o->next_free = __o->object_base = (char *) __obj; \
|
|
|
|
else (__obstack_free) (__o, __obj); })
|
2014-01-02 16:38:18 +08:00
|
|
|
|
2012-01-27 04:49:22 +08:00
|
|
|
#else /* not __GNUC__ */
|
1996-12-08 16:01:13 +08:00
|
|
|
|
Update.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* nss/nsswitch.c (__nss_lookup): Return 1 if this was the last
module.
* nss/getXXent_r.c: If no more module is found don't try to call
setXXent functions but leave unsuccessfully.
* malloc/obstack.h: Cleanups.
* sysdeps/wordsize-32/stdint.h: New file.
* sysdeps/wordsize-64/stdint.h: New file.
* sysdeps/generic/stdint.h: New file.
* sysdeps/wordsize-32/inttypes.h: Adopt to use stdint.h.
* sysdeps/wordsize-64/inttypes.h: Likewise.
* stdlib/Makefile (headers): Add stdint.h.
1998-02-03 Paul Eggert <eggert@twinsun.com>
* malloc/obstack.h (PTR_INT_TYPE): Use __PTRDIFF_TYPE__ if available.
1998-02-13 17:59 Zack Weinberg <zack@rabi.phys.columbia.edu>
* timezone: New directory.
* time/README, time/africa, time/antarctica, time/asia,
time/australasia, time/backward, time/checktab.awk,
time/etcetera, time/europe, time/factory, time/ialloc.c,
time/iso3166.tab, time/leapseconds, time/northamerica,
time/pacificnew, time/private.h, time/scheck.c,
time/solar87, time/solar88, time/solar89, time/southamerica,
time/systemv, time/test-tz.c, time/tzfile.h,
time/tzselect.ksh, time/yearistype, time/zdump.c,
time/zic.c, time/zone.tab: Moved to timezone.
* time/tzfile.c: Include tzfile.h from timezone subdir.
* time/tzset.c: Likewise.
* time/Makefile: Cut out all code relating to timezones...
* timezone/Makefile: ...and paste it in here.
* Makefile (subdirs): Add timezone.
1998-02-13 18:45 H.J. Lu <hjl@gnu.org>
* libc.map (_sys_nerr): Added.
* sysdeps/unix/sysv/linux/errlist.c (_sys_nerr): Make it
versioned symbol.
1998-02-15 17:16 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_KEY and
pseudo_AF_KEY instead of pseudo_PF_KEY and AF_KEY.
Reported by Craig Metz <cmetz@inner.net>.
1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): Use __strcasecmp
instead of strcasecmp.
* nss/nss_files/files-alias.c (get_next_alias): Likewise.
* wctype/wctype.h (_ISwbit): Avoid warning with gcc before 2.8.
1998-02-15 16:55 Ulrich Drepper <drepper@cygnus.com>
* socket/sys/socket.h (setsockopt): Make OPTVAL parameter const.
Patch by Dean Gaudet <dgaudet@arctic.org>.
1998-02-15 16:53 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/Dist: Add getresgid.c and getresuid.c.
1998-02-15 10:49 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sysdeps/unix/sysv/linux/poll.c: If compiled against a kernel
with no poll syscall, just include the BSD version.
* sysdeps/unix/sysv/linux/getresuid.c: If compiled against a
kernel without the syscall, include the stub version.
* sysdeps/unix/sysv/linux/getresgid.c: Likewise.
* sysdeps/generic/getresuid.c: New file.
* sysdeps/generic/getresgid.c: New file.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Correct last change a bit.
1998-02-16 03:31:34 +08:00
|
|
|
# define obstack_object_size(h) \
|
2014-01-02 16:38:18 +08:00
|
|
|
(unsigned) ((h)->next_free - (h)->object_base)
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_room(h) \
|
|
|
|
(unsigned) ((h)->chunk_limit - (h)->next_free)
|
1996-12-08 16:01:13 +08:00
|
|
|
|
Update.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* nss/nsswitch.c (__nss_lookup): Return 1 if this was the last
module.
* nss/getXXent_r.c: If no more module is found don't try to call
setXXent functions but leave unsuccessfully.
* malloc/obstack.h: Cleanups.
* sysdeps/wordsize-32/stdint.h: New file.
* sysdeps/wordsize-64/stdint.h: New file.
* sysdeps/generic/stdint.h: New file.
* sysdeps/wordsize-32/inttypes.h: Adopt to use stdint.h.
* sysdeps/wordsize-64/inttypes.h: Likewise.
* stdlib/Makefile (headers): Add stdint.h.
1998-02-03 Paul Eggert <eggert@twinsun.com>
* malloc/obstack.h (PTR_INT_TYPE): Use __PTRDIFF_TYPE__ if available.
1998-02-13 17:59 Zack Weinberg <zack@rabi.phys.columbia.edu>
* timezone: New directory.
* time/README, time/africa, time/antarctica, time/asia,
time/australasia, time/backward, time/checktab.awk,
time/etcetera, time/europe, time/factory, time/ialloc.c,
time/iso3166.tab, time/leapseconds, time/northamerica,
time/pacificnew, time/private.h, time/scheck.c,
time/solar87, time/solar88, time/solar89, time/southamerica,
time/systemv, time/test-tz.c, time/tzfile.h,
time/tzselect.ksh, time/yearistype, time/zdump.c,
time/zic.c, time/zone.tab: Moved to timezone.
* time/tzfile.c: Include tzfile.h from timezone subdir.
* time/tzset.c: Likewise.
* time/Makefile: Cut out all code relating to timezones...
* timezone/Makefile: ...and paste it in here.
* Makefile (subdirs): Add timezone.
1998-02-13 18:45 H.J. Lu <hjl@gnu.org>
* libc.map (_sys_nerr): Added.
* sysdeps/unix/sysv/linux/errlist.c (_sys_nerr): Make it
versioned symbol.
1998-02-15 17:16 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_KEY and
pseudo_AF_KEY instead of pseudo_PF_KEY and AF_KEY.
Reported by Craig Metz <cmetz@inner.net>.
1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): Use __strcasecmp
instead of strcasecmp.
* nss/nss_files/files-alias.c (get_next_alias): Likewise.
* wctype/wctype.h (_ISwbit): Avoid warning with gcc before 2.8.
1998-02-15 16:55 Ulrich Drepper <drepper@cygnus.com>
* socket/sys/socket.h (setsockopt): Make OPTVAL parameter const.
Patch by Dean Gaudet <dgaudet@arctic.org>.
1998-02-15 16:53 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/Dist: Add getresgid.c and getresuid.c.
1998-02-15 10:49 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sysdeps/unix/sysv/linux/poll.c: If compiled against a kernel
with no poll syscall, just include the BSD version.
* sysdeps/unix/sysv/linux/getresuid.c: If compiled against a
kernel without the syscall, include the stub version.
* sysdeps/unix/sysv/linux/getresgid.c: Likewise.
* sysdeps/generic/getresuid.c: New file.
* sysdeps/generic/getresgid.c: New file.
1998-02-15 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Correct last change a bit.
1998-02-16 03:31:34 +08:00
|
|
|
# define obstack_empty_p(h) \
|
2014-01-02 16:38:18 +08:00
|
|
|
((h)->chunk->prev == 0 \
|
|
|
|
&& (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk, \
|
2014-06-23 23:53:30 +08:00
|
|
|
(h)->chunk->contents, \
|
|
|
|
(h)->alignment_mask))
|
Update.
1997-10-12 05:09 Ulrich Drepper <drepper@cygnus.com>
* libio/Makefile (routines): Remove iofprintf.
* stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
* libio/filedoalloc.c: Use _G_stat64 instead of stat.
* libio/fileops.c (_IO_file_open): Change to take extra argument
indicating whether 32 or 64 bit mode is wanted.
* libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
* libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
* libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
* libio/iofgetpos.c: Pretty print.
* libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.
* manual/conf.texi: Document all the _SC_ and _CS_ constants.
* manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
and _FILE_OFFSET_BITS.
* manual/llio.texi: Document truncate and ftruncate.
* manual/stdio.texi: Document positional parameters for printf.
* math/Makefile (headers): Add tgmath.h.
(libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
move to ...
(libm-calls): ... here. Add scalbln, s_nextafterx and s_fma.
* math/libm-test.c (lround_test, llround_test): Test for all FP formats
by using FUNC().
* math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
llrintl, lroundf, lroundl, llroundf, and llroundl.
* math/math.h: Document new platform specific macros from mathdef.h.
Remove declaration of lrint, llrint, lround, and llround.
* math/test-double.c: Define TEST_DOUBLE.
* math/test-idouble.c: Likewise.
* math/test-float.c: Define TEST_FLOAT.
* math/test-ifloat.c: Likewise.
* math/tgmath.h: New file.
* math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
lround, and llround.
Change second argument of scalbn to `int'.
* sysdeps/libm-ieee754/s_fma.S: New file.
* sysdeps/libm-ieee754/s_fmaf.S: New file.
* sysdeps/libm-ieee754/s_fmal.S: New file.
* sysdeps/libm-i387/s_fma.S: New file.
* sysdeps/libm-i387/s_fmaf.S: New file.
* sysdeps/libm-i387/s_fmal.S: New file.
* sysdeps/libm-i387/s_llrint.S: Change to take double argument.
* sysdeps/libm-i387/s_lrint.S: Likewise.
* sysdeps/libm-i387/s_llrintf.S: New file.
* sysdeps/libm-i387/s_llrintl.S: New file.
* sysdeps/libm-i387/s_lrintf.S: New file.
* sysdeps/libm-i387/s_lrintl.S: New file.
* sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_llrintf.S: New file.
* sysdeps/libm-ieee754/s_llrintl.S: New file.
* sysdeps/libm-ieee754/s_lrintf.S: New file.
* sysdeps/libm-ieee754/s_lrintl.S: New file.
* sysdeps/libm-i387/s_scalbln.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnf.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnl.c: New file. Empty file.
* sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
* sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
* sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
* sysdeps/libm-ieee754/s_llround.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
* sysdeps/libm-ieee754/s_nextafterx.c: New file.
* sysdeps/libm-ieee754/s_nextafterxf.c: New file.
* sysdeps/libm-ieee754/s_nextafterxl.c: New file.
* sysdeps/libm-ieee754/s_scalbln.c: New file.
* sysdeps/libm-ieee754/s_scalblnf.c: New file.
* sysdeps/libm-ieee754/s_scalblnl.c: New file.
* sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
* sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
* sysdeps/libm-ieee754/s_scalbnl.c: Likewise.
* stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
by #ifdefs since they are duplicated in inttypes.h.
* sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
strtoumax plus needed declarations.
* sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* locale/programs/locfile.c (locfile_read): Correct while loop.
* db2/makedb.c (main): Add missing parameter for error output.
(process_input): Likewise.
* resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.
1997-10-12 05:05 Ulrich Drepper <drepper@cygnus.com>
* libc-map: Add __bzero, __mempcpy.
1997-10-10 18:51 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
on kernel_termios.h
1997-10-09 10:24 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
Add the changes from the Solaris 2.6 header files, use the new public
defines/functions.
* nis/nis_addmember.c: Updated.
* nis/nis_checkpoint.c: Updated.
* nis/nis_creategroup.c: updated.
* nis/nis_destroygroup.c: Updated.
* nis/nis_getservlist.c: Updated.
* nis/nis_ismember.c: Updated.
* nis/nis_lookup.c: Updated.
* nis/nis_modify.c: Updated.
* nis/nis_ping.c: Updated.
* nis/nis_print.c: Updated.
* nis/nis_print_group_entry.c: Updated.
* nis/nis_remove.c: Updated.
* nis/nis_removemember.c: Updated.
* nis/nis_xdr.c: Updated.
* nis/nss_nisplus/nisplus-alias.c: Updated.
* nis/nss_nisplus/nisplus-ethers.c: Updated.
* nis/nss_nisplus/nisplus-hosts.c: Updated.
* nis/nss_nisplus/nisplus-network.c: Updated.
* nis/nss_nisplus/nisplus-parser.c: Updated.
* nis/nss_nisplus/nisplus-proto.c: Updated.
* nis/nss_nisplus/nisplus-rpc.c: Updated.
* nis/nss_nisplus/nisplus-service.c: Updated.
* nis/rpcsvc/nis.h: Updated.
* nis/rpcsvc/nis.x: Updated.
* nis/rpcsvc/nis_object.x: Updated.
* nis/rpcsvc/nis_tags.h: Updated.
* nis/rpcsvc/nislib.h: Updated.
* nis/lckcache.c: Removed, since Sun has dropped the directory
signatures. The old cache version is now a security risk and not
longer supported by Sun.
* nis/nis_cache.c: Likewise.
* nis/rpcsvc/nis_cache.h: Likewise.
* nis/rpcsvc/nis_cache.x: Likewise.
* nis/nis_call.c: Remove calls to the cache functions.
* nis/libnsl.map: Remove cache and depending functions.
* nis/nis_intern.h: Likewise.
* nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
* nis/nis_domain_of.c: Likewise.
* nis/nis_domain_of_r.c: Likewise.
* nis/nis_error.c: Likewise.
* nis/nis_file.c: Likewise.
* nis/nis_local_names.c: Likewise.
* nis/nis_mkdir.c: Likewise.
* nis/nis_rmdir.c: Likewise.
* nis/nis_subr.c: Likewise.
* nis/nis_verifygroup.c: Likewise.
* nis/nis_clone.c: Removed, replaced by ...
* nis/nis_clone_dir.c: New.
* nis/nis_clone_obj.c: New.
* nis/nis_clone_res.c: New.
* nis/nis_table.c: Fixed bugs shown through the new clone functions.
* nis/nis_defaults.c: Fixed a lot of race conditions.
* nis/nis_free.c: Rewritten.
* sunrpc/auth_des.c: Fix use of free'ed pointer.
* nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
lckcache. Add nis_clone_dir, nis_clone_obj, and nis_clone_res.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.
1997-10-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* include/features.h: Don't crash if _XOPEN_SOURCE is defined to
be empty.
1997-10-09 05:54 Ulrich Drepper <drepper@cygnus.com>
* nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
* nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
struct and not a pointer. Little optimizations.
1997-10-09 05:00 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getenv.c: Remove unused file.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/stub/morecore.c: Likewise.
* sysdeps/stub/putenv.c: Likewise.
* sysdeps/stub/sbrk.c: Likewise.
* sysdeps/stub/setenv.c: Likewise.
* sysdeps/stub/sysd-stdio.c: Likewise.
* sysdeps/stub/sysdep.h: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
1997-10-09 04:58 Ulrich Drepper <drepper@cygnus.com>
* configure.in: Add __bzero definition to DWARF2 unwind test.
Reported by David S. Miller <davem@caip.rutgers.edu>.
1997-10-07 Paul Eggert <eggert@twinsun.com>
* intl/loadmsgcat.c (_nl_load_domain):
Fix &&/|| typo when checking file size.
Check for overflow when stuffing off_t into size_t.
1997-10-07 18:11 Ulrich Drepper <drepper@cygnus.com>
* time/africa: Update from tzdata1997i.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* posix/globtest.sh: Add arguments for name of dynamic linker and
call dynamic linker to execute globtest.
* posix/Makefile (tests): Supply arguments to globtest.sh.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* nis/rpcsvc/ypupd.h: Add missing __END_DECLS.
1997-10-03 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc.map: Add mempcpy, prctl.
1997-09-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/memcmp.c: Avoid warnings.
* sysdeps/generic/memset.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/Makefile ($(objpfx)mtrace): Fix typo.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
the addend, Richard.
(elf_machine_fixup_plt): Don't add the addend.
(elf_machine_plt_value): New function.
* sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
function.
* elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
addend, instead let the machine dependent setup decide.
1997-09-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/m68020/bits/string.h: New file.
1997-10-07 04:27 Richard Henderson <rth@cygnus.com>
* Makeconfig (+includes): Add -I$(objpfx).
* stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.
* sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp. Make
the former a strong symbol and the later a weak alias.
* sysdeps/sparc/sparc32/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.
1997-10-06 21:01 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
64-bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
member 64-bits as well, to match the kernel.
1997-10-06 19:35 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/sparc/sparc64/sub_n.S: Fix typo.
Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.
1997-10-06 01:09 Zack Weinberg <zack@rabi.phys.columbia.edu>
* time/README: Correct list of files from tzcode package. Add
contact information for tzcode/tzdata maintainers. Correct
spelling of author's name. Compact lists.
1997-10-06 01:48 Ulrich Drepper <drepper@cygnus.com>
* malloc/malloc.h: Remove hook definition without caller argument.
* malloc/malloc.c: Likewise.
* string/tester.c: Correct strsep test.
* string/bits/string2.h: Define __string2_1bptr_p and use it.
Patch by David S. Miller <davem@tanya.rutgers.edu>.
* math/Makefile (routines): Add s_clog10.
* math/libm-test.c: Add test for clog10.
* math/libm.map: Add clog10{,f,l}.
* math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
* sysdeps/libm-ieee754/s_clog10.c: New file.
* sysdeps/libm-ieee754/s_clog10f.c: New file.
* sysdeps/libm-ieee754/s_clog10l.c: New file.
* manual/math.texi: Describe clog10.
* config.h.in: Add USE_REGPARMS and define internal_function based on
this.
* configure.in: Define USE_REGPARMS for ix86 machines.
* gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
as internal functions.
* inet/getnameinfo.c: Likewise for nrl_domainname.
* inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
* inet/rcmd.c: Likewise for __icheckhost.
* intl/dcgettext.c: Likewise for category_to_name and
guess_category_value.
* intl/localealias.c: Likewise for read_alias_file.
* io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
* libio/genops.c: Likewise for save_for_backup.
* malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
main_trim, heap_trim): Likewise.
* malloc/mtrace.c (tr_where): Likewise.
* misc/fstab.c (mnt2fs): Likewise.
* misc/getttyent.c (skip, value): Likewise.
* misc/syslog.c (openlog_internal): Likewise.
* misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
* nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
nss_parse_service_list, nss_new_service): Likewise.
* posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
* resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
* resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
* resolv/res_init.c (res_setoptions): Likewise.
* stdio-common/printf_fp.c (group_number): Likewise.
* stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
* stdlib/fmtmsg.c (internal_addseverity): Likewise.
* sunrpc/auth_des.c (synchronize): Likewise.
* sunrpc/auth_unix.c (marshal_new_auth): Likewise.
* sunrpc/clnt_perr.c (auth_errmsg): Likewise.
* sunrpc/key_call.c (key_call): Likewise.
* sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
* sunrpc/svc_tcp.c (makefd_xprt): Likewise.
* sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
Likewise.
* sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
set_input_fragment, get_input_bytes): Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
phys_pages_info): Likewise.
* sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
* sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
Likewise.
* time/strptime.c (strptime_internal): Likewise.
* time/tzfile.c (find_transition, compute_tzname_max): Likewise.
* time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.
* libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.
* ctype/ctype.h: Pretty print.
* grp/grp.h: Likewise.
* include/libc-symbols.h: Likewise.
* include/limits.h: Likewise.
* include/values.h: Likewise.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* libio/stdio.h: Likewise.
* malloc/malloc.h: Likewise.
* misc/err.h: Likewise.
* misc/regexp.h: Likewise.
* misc/sys/cdefs.h: Likewise.
* misc/sys/file.h: Likewise.
* posix/sys/utsname.h: Likewise.
* posix/sys/wait.h: Likewise.
* pwd/pwd.h: Likewise.
* resolv/netdb.h: Likewise.
* signal/signal.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/endian.h: Likewise.
* string/memory.h: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
* sysdeps/mach/hurd/sys/param.h: Likewise.
* sysdeps/unix/sysv/linux/sys/param.h: Likewise.
* termios/termios.h: Likewise.
* wcsmbs/wchar.h: Likewise.
* wctype/wctype.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.
Implement Large File Support API.
* include/features.h: Add suuport for _LARGEFILE_SOURCE,
_LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
* libc.map: Add new functions for LFS.
* dirent/Makefile (routines): Add readdir64 and readdir64_r.
* dirent/dirent.h: Update readdir prototype for LFS and add new
prototypes for above functions.
* io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
* io/creat64.c: New file.
* io/fstat64.c: New file.
* io/lstat64.c: New file.
* io/stat64.c: New file.
* io/ftw64.c: New file.
* io/ftw.c: Rewrite to allow easy definition of ftw64.
* io/ftw.h: Add LFS interface.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* io/sys/statfs.h: Likewise.
* libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
freopen64, fseeko64, and ftello64.
* libcio/fseeko64.c: New file.
* libio/ftello64.c: New file.
* libio/iofgetpos64.c: New file.
* libio/iofopen64.c: New file.
* libio/iofsetpos64.c: New file.
* libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
(_IO_file_attach): Likewise.
(_IO_do_write): Likewise.
(_IO_file_sync): Likewise.
(_IO_file_seek): Likewise.
(_IO_file_seekoff): Likewise. Use _G_stat64.
(_IO_file_fopen64): New function.
(_IO_file_jumps): Initialize showmanyc and imbue.
* libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
(_IO_default_seekoff): Likewise.
(_IO_default_seek): Likewise.
(_IO_default_showmanyc, _IO_default_imbue): New functions.
* libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
* libio/iolibio.h: Add prototypes for LFS functions.
* libio/ioseekoff.c: Change to use _IO_fpos64_t.
* libio/ioseekpos.c: Likewise.
* libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
(_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
(_IO_seekoff, _IO_seekpos): Change prototype.
* libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
to use _IO_off64_t.
Change prototypes for function from the *ops.c files.
* libio/stdio.h: Add LFS interface definition.
* libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
* posix/Makefile (routines): Add pread64 and pwrite64.
* posix/confstr.c: Handle _CS_LFS* requests.
* posix/getconf.c: Handle LFS* requests.
* sysdeps/generic/confname.h: Add _CS_LFS* constants.
* posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
Define off_t and off64_t appropriately. Change prototypes of
LFS functions.
* posix/sys/types.h: Add LFS types.
* resources/Makefile (routines): Add getrlimit64 and setlimit64.
* resource/sys/resource.h: Change prototypes of LFS functions.
* stdio-common/Makefile (routines): Add tmpfile64.
* stdio-common/tmpfile64.c: New file.
* sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
* sysdeps/unix/sysv/linux/_G_config.h: Likewise.
* sysdeps/generic/bits/resource.h: Add LFS definitions.
* sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
* sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
* sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
* sysdeps/generic/types.h: Define LFS types.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
* sysdeps/generic/sys/mman.h: Add LFS definitions.
* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
* sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
* sysdeps/unix/bsd/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
* sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
* sysdeps/posix/open64.c: New file.
* sysdeps/stub/fstatfs64.c: New file.
* sysdeps/stub/fxstat64.c: New file.
* sysdeps/stub/getrlimit64.c: New file.
* sysdeps/stub/lseek64.c: New file.
* sysdeps/stub/lxstat64.c: New file.
* sysdeps/stub/open64.c: New file.
* sysdeps/stub/pread64.c: New file.
* sysdeps/stub/pwrite64.c: New file.
* sysdeps/stub/readdir64.c: New file.
* sysdeps/stub/readdir64_r.c: New file.
* sysdeps/stub/setrlimit64.c: New file.
* sysdeps/stub/statfs64.c: New file.
* sysdeps/stub/xstat64.c: New file.
* sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
llseek and lseek64 weak aliases.
* sysdeps/unix/sysv/linux/lseek64.c: New file. Empty.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
* sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.
* sysdeps/posix/tempname.c: Add extra argument to trigger use of
open64.
* sysdeps/stub/tempname.c: Likewise.
* stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
argument.
* stdio-common/tmpfile.c: Likewise.
* stdio-common/tmpnam.c: Likewise.
* stdio-common/tmpnam_r.c: Likewise.
* libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
* libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
* libio/iofopncook.c (_IO_cookie_jumps): Likewise.
* libio/iopopen.c (_IO_proc_jumps): Likewise.
* libio/memstream.c (_IO_mem_jumps): Likewise.
* libio/obprintf.c (_IO_obstack_jumps): Likewise.
* libio/vsnprintf.c (_IO_strn_jumps): Likewise.
* libio/strops.c (_IO_str_jumps): Likewise.
* manual/arith.texi: Add a few words why cabs should be used.
* manual/llio.texi: Describe sync, fsync, fdatasync.
Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
* manual/process.texi: Tell about cleanup handlers & system,waitpid,
wait.
* manual/signal.texi: Likewise for pause.
* manual/terminal.texi: Likewise for tcdrain.
* manual/time.texi: Document nanosleep.
* posix/exevp.c: Don't use nested function.
* stdlib/ucontext.h: New file.
* sysdeps/i386/sys/ucontext.h: New file. SysV/i386 API definitions.
* sunrpc/xcrypt.c (hexval): Make a macro for efficiency.
* sysdeps/i386/setjmp.h: Make `here` label local.
* sysdeps/i386/elf/start.S: Define _fp_hw "variable".
* sysdeps/stub/fstatfs.c: Correct warning.
* sysdeps/stub/fxstat.c: Likewise.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/unix/sysv/i386/i686/time.S: New file.
1997-10-03 20:56 Jason Merrill <jason@yorick.cygnus.com>
* malloc/obstack.h (obstack_empty_p): New macro.
1997-10-04 17:41 Philip Blundell <Philip.Blundell@pobox.com>
* inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.
1997-09-30 Zack Weinberg <zack@rabi.phys.columbia.edu>
* maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
Document new --with-binutils switch; delete reference to
--with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
Add to description of --without-fp: a kernel FPU emulator
is adequate (from FAQ)
* INSTALL: Regenerated.
1997-09-30 17:29 Richard Henderson <rth@cygnus.com>
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
_dl_hwcap declaration to ...
(elf_machine_fixup_plt): ... here.
1997-10-12 12:05:44 +08:00
|
|
|
|
1996-12-08 16:01:13 +08:00
|
|
|
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
|
|
|
|
so that we can avoid having void expressions
|
|
|
|
in the arms of the conditional expression.
|
|
|
|
Casting the third operand to void was tried before,
|
|
|
|
but some compilers won't accept it. */
|
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_make_room(h, length) \
|
|
|
|
((h)->temp.tempint = (length), \
|
|
|
|
(((h)->next_free + (h)->temp.tempint > (h)->chunk_limit) \
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 13:43:11 +08:00
|
|
|
? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_grow(h, where, length) \
|
|
|
|
((h)->temp.tempint = (length), \
|
|
|
|
(((h)->next_free + (h)->temp.tempint > (h)->chunk_limit) \
|
|
|
|
? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0), \
|
|
|
|
memcpy ((h)->next_free, where, (h)->temp.tempint), \
|
|
|
|
(h)->next_free += (h)->temp.tempint)
|
|
|
|
|
|
|
|
# define obstack_grow0(h, where, length) \
|
|
|
|
((h)->temp.tempint = (length), \
|
|
|
|
(((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit) \
|
|
|
|
? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0), \
|
|
|
|
memcpy ((h)->next_free, where, (h)->temp.tempint), \
|
|
|
|
(h)->next_free += (h)->temp.tempint, \
|
|
|
|
*((h)->next_free)++ = 0)
|
|
|
|
|
|
|
|
# define obstack_1grow(h, datum) \
|
|
|
|
((((h)->next_free + 1 > (h)->chunk_limit) \
|
|
|
|
? (_obstack_newchunk ((h), 1), 0) : 0), \
|
|
|
|
obstack_1grow_fast (h, datum))
|
|
|
|
|
|
|
|
# define obstack_ptr_grow(h, datum) \
|
|
|
|
((((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
|
|
|
|
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
|
|
|
|
obstack_ptr_grow_fast (h, datum))
|
|
|
|
|
|
|
|
# define obstack_int_grow(h, datum) \
|
|
|
|
((((h)->next_free + sizeof (int) > (h)->chunk_limit) \
|
|
|
|
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
|
|
|
|
obstack_int_grow_fast (h, datum))
|
|
|
|
|
|
|
|
# define obstack_ptr_grow_fast(h, aptr) \
|
2004-01-28 11:54:31 +08:00
|
|
|
(((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_int_grow_fast(h, aint) \
|
2005-09-13 03:56:23 +08:00
|
|
|
(((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
|
1996-12-08 16:01:13 +08:00
|
|
|
|
2014-01-02 16:38:18 +08:00
|
|
|
# define obstack_blank(h, length) \
|
|
|
|
((h)->temp.tempint = (length), \
|
|
|
|
(((h)->chunk_limit - (h)->next_free < (h)->temp.tempint) \
|
|
|
|
? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0), \
|
|
|
|
obstack_blank_fast (h, (h)->temp.tempint))
|
|
|
|
|
|
|
|
# define obstack_alloc(h, length) \
|
|
|
|
(obstack_blank ((h), (length)), obstack_finish ((h)))
|
|
|
|
|
|
|
|
# define obstack_copy(h, where, length) \
|
|
|
|
(obstack_grow ((h), (where), (length)), obstack_finish ((h)))
|
|
|
|
|
|
|
|
# define obstack_copy0(h, where, length) \
|
|
|
|
(obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
|
|
|
|
|
|
|
|
# define obstack_finish(h) \
|
|
|
|
(((h)->next_free == (h)->object_base \
|
|
|
|
? (((h)->maybe_empty_object = 1), 0) \
|
|
|
|
: 0), \
|
|
|
|
(h)->temp.tempptr = (h)->object_base, \
|
|
|
|
(h)->next_free \
|
|
|
|
= __PTR_ALIGN ((h)->object_base, (h)->next_free, \
|
2014-06-23 23:53:30 +08:00
|
|
|
(h)->alignment_mask), \
|
2014-01-02 16:38:18 +08:00
|
|
|
(((h)->next_free - (char *) (h)->chunk \
|
|
|
|
> (h)->chunk_limit - (char *) (h)->chunk) \
|
|
|
|
? ((h)->next_free = (h)->chunk_limit) : 0), \
|
|
|
|
(h)->object_base = (h)->next_free, \
|
|
|
|
(h)->temp.tempptr)
|
|
|
|
|
|
|
|
# define obstack_free(h, obj) \
|
|
|
|
((h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk, \
|
|
|
|
((((h)->temp.tempint > 0 \
|
|
|
|
&& (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk)) \
|
2014-06-23 23:53:30 +08:00
|
|
|
? (void) ((h)->next_free = (h)->object_base \
|
|
|
|
= (h)->temp.tempint + (char *) (h)->chunk) \
|
|
|
|
: (__obstack_free) (h, (h)->temp.tempint + (char *) (h)->chunk)))
|
|
|
|
|
2012-01-27 04:49:22 +08:00
|
|
|
#endif /* not __GNUC__ */
|
1996-12-08 16:01:13 +08:00
|
|
|
|
1997-02-19 12:43:53 +08:00
|
|
|
#ifdef __cplusplus
|
2014-01-02 16:38:18 +08:00
|
|
|
} /* C++ */
|
1997-02-19 12:43:53 +08:00
|
|
|
#endif
|
2014-06-23 23:53:30 +08:00
|
|
|
|
1997-06-21 10:59:26 +08:00
|
|
|
#endif /* obstack.h */
|