From ede69d1992e35d17fab01f830996a0cb6ad9717d Mon Sep 17 00:00:00 2001 From: rillig Date: Sun, 2 Dec 2007 09:38:49 +0000 Subject: Updated dpkg to 1.13.25. Lots of upstream changes since 1.10.28 (three years ago). pkgsrc changes: - the database location has changed to ${VARBASE}/db/dpkg - man pages are installed --- misc/dpkg/Makefile | 18 +- misc/dpkg/PLIST | 153 +++++++++++- misc/dpkg/distinfo | 14 +- misc/dpkg/files/obstack.c | 600 +++++++++++++++++++++++++++++++++++++++++++++ misc/dpkg/files/obstack.h | 595 ++++++++++++++++++++++++++++++++++++++++++++ misc/dpkg/patches/patch-aa | 13 - misc/dpkg/patches/patch-ab | 15 -- misc/dpkg/patches/patch-ac | 13 - misc/dpkg/patches/patch-ae | 21 -- misc/dpkg/patches/patch-af | 13 + misc/dpkg/patches/patch-ag | 21 ++ 11 files changed, 1390 insertions(+), 86 deletions(-) create mode 100644 misc/dpkg/files/obstack.c create mode 100644 misc/dpkg/files/obstack.h delete mode 100644 misc/dpkg/patches/patch-aa delete mode 100644 misc/dpkg/patches/patch-ab delete mode 100644 misc/dpkg/patches/patch-ac delete mode 100644 misc/dpkg/patches/patch-ae create mode 100644 misc/dpkg/patches/patch-af create mode 100644 misc/dpkg/patches/patch-ag (limited to 'misc/dpkg') diff --git a/misc/dpkg/Makefile b/misc/dpkg/Makefile index 56bfe219c04..a008facfd3e 100644 --- a/misc/dpkg/Makefile +++ b/misc/dpkg/Makefile @@ -1,8 +1,8 @@ -# $NetBSD: Makefile,v 1.15 2006/05/27 20:54:41 wiz Exp $ +# $NetBSD: Makefile,v 1.16 2007/12/02 09:38:49 rillig Exp $ # -DISTNAME= dpkg_1.10.28 -PKGNAME= dpkg-1.10.28 +DISTNAME= dpkg_1.13.25 +PKGNAME= dpkg-1.13.25 CATEGORIES= misc MASTER_SITES= ${MASTER_SITE_DEBIAN:=pool/main/d/dpkg/} @@ -10,7 +10,10 @@ MAINTAINER= pkgsrc-users@NetBSD.org HOMEPAGE= http://packages.debian.org/stable/base/dpkg.html COMMENT= Package maintenance system for Debian +BUILD_DEPENDS+= po4a>=0:../../textproc/po4a + WRKSRC= ${WRKDIR}/${PKGNAME_NOREV} +BUILD_DEFS+= VARBASE USE_PKGLOCALEDIR= yes GNU_CONFIGURE= yes @@ -18,16 +21,17 @@ USE_LANGUAGES= c c++ USE_TOOLS+= gmake msgfmt perl USE_NCURSES= yes # needs tigetstr() -REPLACE_PERL= scripts/*.pl split/*.pl - -ADMIN_DIR= ${PREFIX}/var/db +REPLACE_PERL= scripts/*.pl CONFIGURE_ARGS+= --with-zlib CONFIGURE_ARGS+= --with-start-stop-daemon=no CONFIGURE_ARGS+= --with-sgml-doc=no -CONFIGURE_ARGS+= --with-admindir=${ADMIN_DIR:Q} +CONFIGURE_ARGS+= --with-admindir=${VARBASE}/db/dpkg CONFIGURE_ARGS+= --sysconfdir=${PREFIX}/share/dpkg +post-extract: + cd ${FILESDIR} && cp obstack.* ${WRKSRC}/lib/ + .include "../../archivers/bzip2/buildlink3.mk" .include "../../converters/libiconv/buildlink3.mk" .include "../../devel/gettext-lib/buildlink3.mk" diff --git a/misc/dpkg/PLIST b/misc/dpkg/PLIST index 1d3ef2599f0..eb73d5e6f48 100644 --- a/misc/dpkg/PLIST +++ b/misc/dpkg/PLIST @@ -1,4 +1,4 @@ -@comment $NetBSD: PLIST,v 1.3 2006/05/21 11:27:23 rillig Exp $ +@comment $NetBSD: PLIST,v 1.4 2007/12/02 09:38:50 rillig Exp $ bin/822-date bin/dpkg bin/dpkg-architecture @@ -18,6 +18,8 @@ bin/dpkg-source bin/dpkg-split bin/dselect lib/dpkg/controllib.pl +lib/dpkg/dpkg-gettext.pl +lib/dpkg/enoent lib/dpkg/methods/disk/desc.cdrom lib/dpkg/methods/disk/desc.harddisk lib/dpkg/methods/disk/desc.mounted @@ -33,6 +35,70 @@ lib/dpkg/methods/floppy/setup lib/dpkg/methods/floppy/update lib/dpkg/mksplit lib/dpkg/parsechangelog/debian +man/de/man1/822-date.1 +man/de/man1/dpkg-architecture.1 +man/de/man1/dpkg-checkbuilddeps.1 +man/de/man1/dpkg-name.1 +man/de/man1/dpkg-scanpackages.1 +man/de/man1/dpkg-scansources.1 +man/de/man1/dpkg.1 +man/de/man5/deb-control.5 +man/de/man5/deb-old.5 +man/de/man5/deb.5 +man/de/man5/dpkg.cfg.5 +man/de/man5/dselect.cfg.5 +man/de/man8/cleanup-info.8 +man/de/man8/dpkg-divert.8 +man/de/man8/dpkg-statoverride.8 +man/de/man8/start-stop-daemon.8 +man/de/man8/update-alternatives.8 +man/fr/man1/822-date.1 +man/fr/man1/dpkg-architecture.1 +man/fr/man1/dpkg-buildpackage.1 +man/fr/man1/dpkg-checkbuilddeps.1 +man/fr/man1/dpkg-deb.1 +man/fr/man1/dpkg-distaddfile.1 +man/fr/man1/dpkg-genchanges.1 +man/fr/man1/dpkg-gencontrol.1 +man/fr/man1/dpkg-name.1 +man/fr/man1/dpkg-parsechangelog.1 +man/fr/man1/dpkg-query.1 +man/fr/man1/dpkg-scanpackages.1 +man/fr/man1/dpkg-scansources.1 +man/fr/man1/dpkg-shlibdeps.1 +man/fr/man1/dpkg-source.1 +man/fr/man1/dpkg-split.1 +man/fr/man1/dpkg.1 +man/fr/man5/deb-control.5 +man/fr/man5/deb.5 +man/fr/man5/dpkg.cfg.5 +man/fr/man8/cleanup-info.8 +man/fr/man8/dpkg-divert.8 +man/fr/man8/dpkg-statoverride.8 +man/fr/man8/install-info.8 +man/fr/man8/start-stop-daemon.8 +man/fr/man8/update-alternatives.8 +man/hu/man1/dpkg-deb.1 +man/hu/man5/deb-control.5 +man/hu/man5/dpkg.cfg.5 +man/hu/man5/dselect.cfg.5 +man/ja/man1/822-date.1 +man/ja/man1/dpkg-checkbuilddeps.1 +man/ja/man1/dpkg-deb.1 +man/ja/man1/dpkg-name.1 +man/ja/man1/dpkg-query.1 +man/ja/man1/dpkg-scanpackages.1 +man/ja/man1/dpkg.1 +man/ja/man1/dselect.1 +man/ja/man5/deb-control.5 +man/ja/man5/deb-old.5 +man/ja/man5/deb.5 +man/ja/man8/cleanup-info.8 +man/ja/man8/dpkg-divert.8 +man/ja/man8/dpkg-statoverride.8 +man/ja/man8/install-info.8 +man/ja/man8/start-stop-daemon.8 +man/ja/man8/update-alternatives.8 man/man1/822-date.1 man/man1/dpkg-architecture.1 man/man1/dpkg-buildpackage.1 @@ -43,59 +109,128 @@ man/man1/dpkg-genchanges.1 man/man1/dpkg-gencontrol.1 man/man1/dpkg-name.1 man/man1/dpkg-parsechangelog.1 +man/man1/dpkg-query.1 man/man1/dpkg-scanpackages.1 man/man1/dpkg-scansources.1 man/man1/dpkg-shlibdeps.1 man/man1/dpkg-source.1 +man/man1/dpkg-split.1 +man/man1/dpkg.1 +man/man1/dselect.1 +man/man5/deb-control.5 +man/man5/deb-old.5 +man/man5/deb.5 +man/man5/dpkg.cfg.5 +man/man5/dselect.cfg.5 man/man8/cleanup-info.8 man/man8/dpkg-divert.8 -man/man8/dpkg-query.8 -man/man8/dpkg-split.8 man/man8/dpkg-statoverride.8 -man/man8/dpkg.8 -man/man8/dselect.8 man/man8/install-info.8 +man/man8/start-stop-daemon.8 man/man8/update-alternatives.8 +man/pl/man1/822-date.1 +man/pl/man1/dpkg-deb.1 +man/pl/man1/dpkg-query.1 +man/pl/man1/dpkg-split.1 +man/pl/man1/dpkg.1 +man/pl/man1/dselect.1 +man/pl/man5/dpkg.cfg.5 +man/pl/man5/dselect.cfg.5 +man/pl/man8/dpkg-statoverride.8 +man/pl/man8/start-stop-daemon.8 +man/pl/man8/update-alternatives.8 +man/ru/man1/822-date.1 +man/ru/man1/dpkg-checkbuilddeps.1 +man/ru/man1/dpkg.1 +man/ru/man5/deb-control.5 +man/ru/man8/start-stop-daemon.8 +man/sv/man1/822-date.1 +man/sv/man1/dpkg-deb.1 +man/sv/man1/dpkg-query.1 +man/sv/man1/dpkg-split.1 +man/sv/man1/dpkg.1 +man/sv/man1/dselect.1 +man/sv/man5/deb-control.5 +man/sv/man5/deb-old.5 +man/sv/man5/deb.5 +man/sv/man5/dpkg.cfg.5 +man/sv/man5/dselect.cfg.5 +man/sv/man8/start-stop-daemon.8 sbin/cleanup-info sbin/dpkg-divert sbin/dpkg-statoverride sbin/install-info sbin/update-alternatives share/dpkg/alternatives/README -share/dpkg/archtable +share/dpkg/cputable share/dpkg/dpkg/origins/debian +share/dpkg/ostable share/locale/bs/LC_MESSAGES/dpkg.mo +share/locale/bs/LC_MESSAGES/dselect.mo +share/locale/ca/LC_MESSAGES/dpkg-dev.mo share/locale/ca/LC_MESSAGES/dpkg.mo +share/locale/ca/LC_MESSAGES/dselect.mo share/locale/cs/LC_MESSAGES/dpkg.mo +share/locale/cs/LC_MESSAGES/dselect.mo share/locale/da/LC_MESSAGES/dpkg.mo +share/locale/da/LC_MESSAGES/dselect.mo share/locale/de/LC_MESSAGES/dpkg.mo +share/locale/de/LC_MESSAGES/dselect.mo +share/locale/dz/LC_MESSAGES/dpkg.mo share/locale/el/LC_MESSAGES/dpkg.mo +share/locale/el/LC_MESSAGES/dselect.mo share/locale/es/LC_MESSAGES/dpkg.mo +share/locale/es/LC_MESSAGES/dselect.mo share/locale/eu/LC_MESSAGES/dpkg.mo +share/locale/eu/LC_MESSAGES/dselect.mo +share/locale/fr/LC_MESSAGES/dpkg-dev.mo share/locale/fr/LC_MESSAGES/dpkg.mo +share/locale/fr/LC_MESSAGES/dselect.mo share/locale/gl/LC_MESSAGES/dpkg.mo -share/locale/he/LC_MESSAGES/dpkg.mo +share/locale/gl/LC_MESSAGES/dselect.mo +share/locale/hu/LC_MESSAGES/dpkg.mo +share/locale/hu/LC_MESSAGES/dselect.mo share/locale/id/LC_MESSAGES/dpkg.mo +share/locale/id/LC_MESSAGES/dselect.mo share/locale/it/LC_MESSAGES/dpkg.mo +share/locale/it/LC_MESSAGES/dselect.mo share/locale/ja/LC_MESSAGES/dpkg.mo +share/locale/ja/LC_MESSAGES/dselect.mo +share/locale/km/LC_MESSAGES/dpkg.mo share/locale/ko/LC_MESSAGES/dpkg.mo +share/locale/ko/LC_MESSAGES/dselect.mo share/locale/nb/LC_MESSAGES/dpkg.mo +share/locale/nb/LC_MESSAGES/dselect.mo +share/locale/ne/LC_MESSAGES/dpkg.mo share/locale/nl/LC_MESSAGES/dpkg.mo +share/locale/nl/LC_MESSAGES/dselect.mo share/locale/nn/LC_MESSAGES/dpkg.mo +share/locale/nn/LC_MESSAGES/dselect.mo +share/locale/pa/LC_MESSAGES/dpkg.mo share/locale/pl/LC_MESSAGES/dpkg.mo +share/locale/pl/LC_MESSAGES/dselect.mo share/locale/pt/LC_MESSAGES/dpkg.mo +share/locale/pt/LC_MESSAGES/dselect.mo share/locale/pt_BR/LC_MESSAGES/dpkg.mo +share/locale/pt_BR/LC_MESSAGES/dselect.mo share/locale/ro/LC_MESSAGES/dpkg.mo +share/locale/ro/LC_MESSAGES/dselect.mo share/locale/ru/LC_MESSAGES/dpkg.mo +share/locale/ru/LC_MESSAGES/dselect.mo share/locale/sk/LC_MESSAGES/dpkg.mo +share/locale/sk/LC_MESSAGES/dselect.mo share/locale/sv/LC_MESSAGES/dpkg.mo +share/locale/sv/LC_MESSAGES/dselect.mo share/locale/tl/LC_MESSAGES/dpkg.mo +share/locale/tl/LC_MESSAGES/dselect.mo +share/locale/vi/LC_MESSAGES/dpkg.mo +share/locale/vi/LC_MESSAGES/dselect.mo share/locale/zh_CN/LC_MESSAGES/dpkg.mo +share/locale/zh_CN/LC_MESSAGES/dselect.mo share/locale/zh_TW/LC_MESSAGES/dpkg.mo -@dirrm share/dpkg/origins +share/locale/zh_TW/LC_MESSAGES/dselect.mo @dirrm share/dpkg/dpkg/origins @dirrm share/dpkg/dpkg -@dirrm share/dpkg/alternatives @dirrm share/dpkg @dirrm lib/dpkg/parsechangelog @dirrm lib/dpkg/methods/floppy diff --git a/misc/dpkg/distinfo b/misc/dpkg/distinfo index 0ab33b68dc1..babbf138f5f 100644 --- a/misc/dpkg/distinfo +++ b/misc/dpkg/distinfo @@ -1,10 +1,8 @@ -$NetBSD: distinfo,v 1.4 2006/05/21 11:27:23 rillig Exp $ +$NetBSD: distinfo,v 1.5 2007/12/02 09:38:50 rillig Exp $ -SHA1 (dpkg_1.10.28.tar.gz) = df0fdd3943d41f493412d521ee5f5d95ae86f789 -RMD160 (dpkg_1.10.28.tar.gz) = 1b8efee8437ab847f17a364637425c2b4aad7c1a -Size (dpkg_1.10.28.tar.gz) = 2225927 bytes -SHA1 (patch-aa) = 62740602375270c50fd518bddfe9a713d85a148f -SHA1 (patch-ab) = 545ade40a5b62161b31478eff12573c8418d06e4 -SHA1 (patch-ac) = 130359aeeafc5c8bc10f38eac7335c2781f3c503 +SHA1 (dpkg_1.13.25.tar.gz) = d943167eac6abde6bc88a628389b26bb7a84c3b7 +RMD160 (dpkg_1.13.25.tar.gz) = a4a58cd34839d0d70e8c231e1db548dbd9568806 +Size (dpkg_1.13.25.tar.gz) = 3384618 bytes SHA1 (patch-ad) = 95c64b2d0c6872b75151f2e8ca4c3d0a3206b6a0 -SHA1 (patch-ae) = 0df7982b097b3476542df3e812ab22c33a4a5d28 +SHA1 (patch-af) = 2b7245e7c335d738197fc92284e901a43fa1d8a8 +SHA1 (patch-ag) = bbba4a85ff03f4aafd902cf61586a7e614bc1c36 diff --git a/misc/dpkg/files/obstack.c b/misc/dpkg/files/obstack.c new file mode 100644 index 00000000000..f277da9874e --- /dev/null +++ b/misc/dpkg/files/obstack.c @@ -0,0 +1,600 @@ +/* $NetBSD: obstack.c,v 1.1 2007/12/02 09:38:50 rillig Exp $ */ + +/* obstack.c - subroutines used implicitly by object stack macros + Copyright (C) 1988-1994,96,97,98,99 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. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "obstack.h" + +/* NOTE BEFORE MODIFYING THIS FILE: This version number must be + incremented whenever callers compiled using an old obstack.h can no + longer properly call the functions in this obstack.c. */ +#define OBSTACK_INTERFACE_VERSION 1 + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and the installed library + supports the same library interface we do. This code is part of the GNU + C Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object + files, it is simpler to just do this in the source for each such file. */ + +#include /* Random thing to get __GNU_LIBRARY__. */ +#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 +#include +#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION +#define ELIDE_CODE +#endif +#endif + + +#ifndef ELIDE_CODE + + +#if defined (__STDC__) && __STDC__ +#define POINTER void * +#else +#define POINTER char * +#endif + +/* Determine default alignment. */ +struct fooalign {char x; double d;}; +#define DEFAULT_ALIGNMENT \ + ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0)) +/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. + But in fact it might be less smart and round addresses to as much as + DEFAULT_ROUNDING. So we prepare for it to do that. */ +union fooround {long x; double d;}; +#define DEFAULT_ROUNDING (sizeof (union fooround)) + +/* When we copy a long block of data, this is the unit to do it with. + On some machines, copying successive ints does not work; + in such a case, redefine COPYING_UNIT to `long' (if that works) + or `char' as a last resort. */ +#ifndef COPYING_UNIT +#define COPYING_UNIT int +#endif + + +/* The functions allocating more room by calling `obstack_chunk_alloc' + jump to the handler pointed to by `obstack_alloc_failed_handler'. + This can be set to a user defined function which should either + abort gracefully or use longjump - but shouldn't return. This + variable by default points to the internal function + `print_and_abort'. */ +#if defined (__STDC__) && __STDC__ +static void print_and_abort (void); +void (*obstack_alloc_failed_handler) (void) = print_and_abort; +#else +static void print_and_abort (); +void (*obstack_alloc_failed_handler) () = print_and_abort; +#endif + +/* Exit value used when `print_and_abort' is used. */ +#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H +#include +#endif +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif +int obstack_exit_failure = EXIT_FAILURE; + +/* The non-GNU-C macros copy the obstack into this global variable + to avoid multiple evaluation. */ + +struct obstack *_obstack; + +/* Define a macro that either calls functions with the traditional malloc/free + calling interface, or calls functions with the mmalloc/mfree interface + (that adds an extra first argument), based on the state of use_extra_arg. + For free, do not use ?:, since some compilers, like the MIPS compilers, + do not allow (expr) ? void : void. */ + +#if defined (__STDC__) && __STDC__ +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ + } while (0) +#else +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) ()) (h)->freefun) ((old_chunk)); \ + } while (0) +#endif + + +/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). + Objects start on multiples of ALIGNMENT (0 means use default). + CHUNKFUN is the function to use to allocate chunks, + and FREEFUN the function to free them. + + Return nonzero if successful, calls obstack_alloc_failed_handler if + allocation fails. */ + +int +_obstack_begin (h, size, alignment, chunkfun, freefun) + struct obstack *h; + int size; + int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (long); + void (*freefun) (void *); +#else + POINTER (*chunkfun) (); + void (*freefun) (); +#endif +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = (int) DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + +#if defined (__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else + h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; + h->freefun = freefun; +#endif + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->use_extra_arg = 0; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = chunk->contents; + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +int +_obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) + struct obstack *h; + int size; + int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (POINTER, long); + void (*freefun) (POINTER, POINTER); +#else + POINTER (*chunkfun) (); + void (*freefun) (); +#endif + POINTER arg; +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = (int) DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + +#if defined(__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else + h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; + h->freefun = freefun; +#endif + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->extra_arg = arg; + h->use_extra_arg = 1; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = chunk->contents; + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +/* Allocate a new current chunk for the obstack *H + on the assumption that LENGTH bytes need to be added + to the current object, or a new object of length LENGTH allocated. + Copies any partial object from the end of the old chunk + to the beginning of the new one. */ + +void +_obstack_newchunk (h, length) + struct obstack *h; + int length; +{ + register struct _obstack_chunk *old_chunk = h->chunk; + register struct _obstack_chunk *new_chunk; + register long new_size; + register long obj_size = h->next_free - h->object_base; + register long i; + long already; + + /* Compute size for new chunk. */ + new_size = (obj_size + length) + (obj_size >> 3) + 100; + if (new_size < h->chunk_size) + new_size = h->chunk_size; + + /* Allocate and initialize the new chunk. */ + new_chunk = CALL_CHUNKFUN (h, new_size); + if (!new_chunk) + (*obstack_alloc_failed_handler) (); + h->chunk = new_chunk; + new_chunk->prev = old_chunk; + new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; + + /* Move the existing object to the new chunk. + Word at a time is fast and is safe if the object + is sufficiently aligned. */ + if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) + { + for (i = obj_size / sizeof (COPYING_UNIT) - 1; + i >= 0; i--) + ((COPYING_UNIT *)new_chunk->contents)[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 + which does not do strict alignment for COPYING_UNITS. */ + already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); + } + else + already = 0; + /* Copy remaining bytes one by one. */ + for (i = already; i < obj_size; i++) + new_chunk->contents[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. + But not if that chunk might contain an empty object. */ + if (h->object_base == old_chunk->contents && ! h->maybe_empty_object) + { + new_chunk->prev = old_chunk->prev; + CALL_FREEFUN (h, old_chunk); + } + + h->object_base = new_chunk->contents; + h->next_free = h->object_base + obj_size; + /* The new chunk certainly contains no empty object yet. */ + h->maybe_empty_object = 0; +} + +/* Return nonzero if object OBJ has been allocated from obstack H. + This is here for debugging. + If you use it in a program, you are probably losing. */ + +#if defined (__STDC__) && __STDC__ +/* Suppress -Wmissing-prototypes warning. We don't want to declare this in + obstack.h because it is just for debugging. */ +int _obstack_allocated_p (struct obstack *h, POINTER obj); +#endif + +int +_obstack_allocated_p (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = (h)->chunk; + /* We use >= rather than > since the object cannot be exactly at + the beginning of the chunk but might be an empty object exactly + at the end of an adjacent chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + lp = plp; + } + return lp != 0; +} + +/* Free objects in obstack H, including OBJ and everything allocate + more recently than OBJ. If OBJ is zero, free everything in H. */ + +#undef obstack_free + +/* This function has two names with identical definitions. + This is the first one, called from non-ANSI code. */ + +void +_obstack_free (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +/* This function is used from ANSI code. */ + +void +obstack_free (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +int +_obstack_memory_used (h) + struct obstack *h; +{ + register struct _obstack_chunk* lp; + register int nbytes = 0; + + for (lp = h->chunk; lp != 0; lp = lp->prev) + { + nbytes += lp->limit - (char *) lp; + } + return nbytes; +} + +/* Define the error handler. */ +#ifndef _ +# ifdef HAVE_LIBINTL_H +# include +# ifndef _ +# define _(Str) gettext (Str) +# endif +# else +# define _(Str) (Str) +# endif +#endif +#if defined _LIBC && defined USE_IN_LIBIO +# include +# define fputs(s, f) _IO_fputs (s, f) +#endif + +static void +print_and_abort () +{ + fputs (_("memory exhausted"), stderr); + fputc ('\n', stderr); + exit (obstack_exit_failure); +} + +#if 0 +/* These are now turned off because the applications do not use it + and it uses bcopy via obstack_grow, which causes trouble on sysV. */ + +/* Now define the functional versions of the obstack macros. + Define them to simply use the corresponding macros to do the job. */ + +#if defined (__STDC__) && __STDC__ +/* These function definitions do not work with non-ANSI preprocessors; + they won't pass through the macro names in parentheses. */ + +/* The function names appear in parentheses in order to prevent + the macro-definitions of the names from being expanded there. */ + +POINTER (obstack_base) (obstack) + struct obstack *obstack; +{ + return obstack_base (obstack); +} + +POINTER (obstack_next_free) (obstack) + struct obstack *obstack; +{ + return obstack_next_free (obstack); +} + +int (obstack_object_size) (obstack) + struct obstack *obstack; +{ + return obstack_object_size (obstack); +} + +int (obstack_room) (obstack) + struct obstack *obstack; +{ + return obstack_room (obstack); +} + +int (obstack_make_room) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_make_room (obstack, length); +} + +void (obstack_grow) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + obstack_grow (obstack, pointer, length); +} + +void (obstack_grow0) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + obstack_grow0 (obstack, pointer, length); +} + +void (obstack_1grow) (obstack, character) + struct obstack *obstack; + int character; +{ + obstack_1grow (obstack, character); +} + +void (obstack_blank) (obstack, length) + struct obstack *obstack; + int length; +{ + obstack_blank (obstack, length); +} + +void (obstack_1grow_fast) (obstack, character) + struct obstack *obstack; + int character; +{ + obstack_1grow_fast (obstack, character); +} + +void (obstack_blank_fast) (obstack, length) + struct obstack *obstack; + int length; +{ + obstack_blank_fast (obstack, length); +} + +POINTER (obstack_finish) (obstack) + struct obstack *obstack; +{ + return obstack_finish (obstack); +} + +POINTER (obstack_alloc) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_alloc (obstack, length); +} + +POINTER (obstack_copy) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + return obstack_copy (obstack, pointer, length); +} + +POINTER (obstack_copy0) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + return obstack_copy0 (obstack, pointer, length); +} + +#endif /* __STDC__ */ + +#endif /* 0 */ + +#endif /* !ELIDE_CODE */ diff --git a/misc/dpkg/files/obstack.h b/misc/dpkg/files/obstack.h new file mode 100644 index 00000000000..58484a6a6c2 --- /dev/null +++ b/misc/dpkg/files/obstack.h @@ -0,0 +1,595 @@ +/* $NetBSD: obstack.h,v 1.1 2007/12/02 09:38:50 rillig Exp $ */ + +/* obstack.h - object stack macros + Copyright (C) 1988,89,90,91,92,93,94,96,97,98,99 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. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* Summary: + +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 +supply, called `obstack_chunk_alloc'. On occasion, they free chunks, +by calling `obstack_chunk_free'. You must define them and declare +them before using any obstack macros. + +Each independent stack is represented by a `struct obstack'. +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: + 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.) +*/ + + +/* Don't do the contents of this file more than once. */ + +#ifndef _OBSTACK_H +#define _OBSTACK_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* We use subtraction of (char *) 0 instead of casting to int + because on word-addressable machines a simple cast to int + may ignore the byte-within-word field of the pointer. */ + +#ifndef __PTR_TO_INT +# define __PTR_TO_INT(P) ((P) - (char *) 0) +#endif + +#ifndef __INT_TO_PTR +# define __INT_TO_PTR(P) ((P) + (char *) 0) +#endif + +/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is + defined, as with GNU C, use that; that way we don't pollute the + namespace with 's symbols. Otherwise, if is + available, include it and use ptrdiff_t. In traditional C, long is + the best that we can do. */ + +#ifdef __PTRDIFF_TYPE__ +# define PTR_INT_TYPE __PTRDIFF_TYPE__ +#else +# ifdef HAVE_STDDEF_H +# include +# define PTR_INT_TYPE ptrdiff_t +# else +# define PTR_INT_TYPE long +# endif +#endif + +#if defined _LIBC || defined HAVE_STRING_H +# include +# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +#else +# ifdef memcpy +# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +# else +# define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N)) +# endif +#endif + +struct _obstack_chunk /* Lives at front of each chunk. */ +{ + char *limit; /* 1 past end of this chunk */ + struct _obstack_chunk *prev; /* address of prior chunk or NULL */ + char contents[4]; /* objects begin here */ +}; + +struct obstack /* control current object in current chunk */ +{ + 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 */ + PTR_INT_TYPE temp; /* Temporary for some macros. */ + int alignment_mask; /* Mask of alignment for each object. */ +#if defined __STDC__ && __STDC__ + /* These prototypes vary based on `use_extra_arg', and we use + 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 *); + void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ +#else + struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */ + void (*freefun) (); /* User's function to free a chunk. */ + char *extra_arg; /* first arg for chunk alloc/dealloc funcs */ +#endif + unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ + unsigned maybe_empty_object:1;/* There is a possibility that the current + chunk contains a zero-length object. This + prevents freeing the chunk if we allocate + a bigger chunk to replace it. */ + unsigned alloc_failed:1; /* No longer used, as we now call the failed + handler on error, but retained for binary + compatibility. */ +}; + +/* Declare the external functions we use; they are in obstack.c. */ + +#if defined __STDC__ && __STDC__ +extern void _obstack_newchunk (struct obstack *, int); +extern void _obstack_free (struct obstack *, void *); +extern int _obstack_begin (struct obstack *, int, int, + void *(*) (long), void (*) (void *)); +extern int _obstack_begin_1 (struct obstack *, int, int, + void *(*) (void *, long), + void (*) (void *, void *), void *); +extern int _obstack_memory_used (struct obstack *); +#else +extern void _obstack_newchunk (); +extern void _obstack_free (); +extern int _obstack_begin (); +extern int _obstack_begin_1 (); +extern int _obstack_memory_used (); +#endif + +#if defined __STDC__ && __STDC__ + +/* Do the function-declarations after the structs + but before defining the macros. */ + +void obstack_init (struct obstack *obstack); + +void * obstack_alloc (struct obstack *obstack, int size); + +void * obstack_copy (struct obstack *obstack, void *address, int size); +void * obstack_copy0 (struct obstack *obstack, void *address, int size); + +void obstack_free (struct obstack *obstack, void *block); + +void obstack_blank (struct obstack *obstack, int size); + +void obstack_grow (struct obstack *obstack, void *data, int size); +void obstack_grow0 (struct obstack *obstack, void *data, int size); + +void obstack_1grow (struct obstack *obstack, int data_char); +void obstack_ptr_grow (struct obstack *obstack, void *data); +void obstack_int_grow (struct obstack *obstack, int data); + +void * obstack_finish (struct obstack *obstack); + +int obstack_object_size (struct obstack *obstack); + +int obstack_room (struct obstack *obstack); +void obstack_make_room (struct obstack *obstack, int size); +void obstack_1grow_fast (struct obstack *obstack, int data_char); +void obstack_ptr_grow_fast (struct obstack *obstack, void *data); +void obstack_int_grow_fast (struct obstack *obstack, int data); +void obstack_blank_fast (struct obstack *obstack, int size); + +void * obstack_base (struct obstack *obstack); +void * obstack_next_free (struct obstack *obstack); +int obstack_alignment_mask (struct obstack *obstack); +int obstack_chunk_size (struct obstack *obstack); +int obstack_memory_used (struct obstack *obstack); + +#endif /* __STDC__ */ + +/* Non-ANSI C cannot really support alternative functions for these macros, + so we do not declare them. */ + +/* Error handler called when `obstack_chunk_alloc' failed to allocate + 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. */ +#if defined __STDC__ && __STDC__ +extern void (*obstack_alloc_failed_handler) (void); +#else +extern void (*obstack_alloc_failed_handler) (); +#endif + +/* Exit value used when `print_and_abort' is used. */ +extern int obstack_exit_failure; + +/* 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. */ + +#define obstack_base(h) ((h)->object_base) + +/* Size for allocating ordinary chunks. */ + +#define obstack_chunk_size(h) ((h)->chunk_size) + +/* Pointer to next byte not yet allocated in current chunk. */ + +#define obstack_next_free(h) ((h)->next_free) + +/* Mask specifying low bits that should be clear in address of an object. */ + +#define obstack_alignment_mask(h) ((h)->alignment_mask) + +/* To prevent prototype warnings provide complete argument list in + standard C version. */ +#if defined __STDC__ && __STDC__ + +# define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) + +# define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) + +# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) + +# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) (void *, long)) (chunkfun), \ + (void (*) (void *, void *)) (freefun), (arg)) + +# define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) + +# define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) + +#else + +# define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) + +# define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) + +# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) ()) (chunkfun), (void (*) ()) (freefun)) + +# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg)) + +# define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) + +# define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)()) (newfreefun)) + +#endif + +#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar) + +#define obstack_blank_fast(h,n) ((h)->next_free += (n)) + +#define obstack_memory_used(h) _obstack_memory_used (h) + +#if defined __GNUC__ && defined __STDC__ && __STDC__ +/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and + does not implement __extension__. But that compiler doesn't define + __GNUC_MINOR__. */ +# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) +# define __extension__ +# endif + +/* For GNU C, if not -traditional, + we can define these macros to compute all args only once + without using a global variable. + Also, we can avoid using the `temp' slot, to make faster code. */ + +# define obstack_object_size(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (unsigned) (__o->next_free - __o->object_base); }) + +# define obstack_room(OBSTACK) \ + __extension__ \ + ({ struct obstack *__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) \ + _obstack_newchunk (__o, __len); \ + (void) 0; }) + +# define obstack_empty_p(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) + +# define obstack_grow(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len > __o->chunk_limit) \ + _obstack_newchunk (__o, __len); \ + _obstack_memcpy (__o->next_free, (char *) (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) \ + _obstack_newchunk (__o, __len + 1); \ + _obstack_memcpy (__o->next_free, (char *) (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) \ + _obstack_newchunk (__o, 1); \ + *(__o->next_free)++ = (datum); \ + (void) 0; }) + +/* These assume that the obstack alignment is good enough for pointers or ints, + and that the data added so far to the current object + shares that much alignment. */ + +# define obstack_ptr_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (void *)); \ + *((void **)__o->next_free)++ = ((void *)datum); \ + (void) 0; }) + +# define obstack_int_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (int) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (int)); \ + *((int *)__o->next_free)++ = ((int)datum); \ + (void) 0; }) + +# define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr) +# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) + +# define obstack_blank(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + __o->next_free += __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); }) + +/* The local variable is named __o1 to avoid a name conflict + when obstack_blank is called. */ +# define obstack_finish(OBSTACK) \ +__extension__ \ +({ struct obstack *__o1 = (OBSTACK); \ + void *value; \ + value = (void *) __o1->object_base; \ + if (__o1->next_free == value) \ + __o1->maybe_empty_object = 1; \ + __o1->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ + & ~ (__o1->alignment_mask)); \ + if (__o1->next_free - (char *)__o1->chunk \ + > __o1->chunk_limit - (char *)__o1->chunk) \ + __o1->next_free = __o1->chunk_limit; \ + __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) \ + __o->next_free = __o->object_base = (char *)__obj; \ + else (obstack_free) (__o, __obj); }) + +#else /* not __GNUC__ or not __STDC__ */ + +# define obstack_object_size(h) \ + (unsigned) ((h)->next_free - (h)->object_base) + +# define obstack_room(h) \ + (unsigned) ((h)->chunk_limit - (h)->next_free) + +# define obstack_empty_p(h) \ + ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) + +/* 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. */ + +# define obstack_make_room(h,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) + +# define obstack_grow(h,where,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ + _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \ + (h)->next_free += (h)->temp) + +# define obstack_grow0(h,where,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ + _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \ + (h)->next_free += (h)->temp, \ + *((h)->next_free)++ = 0) + +# define obstack_1grow(h,datum) \ +( (((h)->next_free + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), 1), 0) : 0), \ + (*((h)->next_free)++ = (datum))) + +# define obstack_ptr_grow(h,datum) \ +( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ + (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum))) + +# define obstack_int_grow(h,datum) \ +( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ + (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum))) + +# define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr) +# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) + +# define obstack_blank(h,length) \ +( (h)->temp = (length), \ + (((h)->chunk_limit - (h)->next_free < (h)->temp) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ + ((h)->next_free += (h)->temp)) + +# 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 = __PTR_TO_INT ((h)->object_base), \ + (h)->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ + & ~ ((h)->alignment_mask)), \ + (((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, \ + __INT_TO_PTR ((h)->temp)) + +# if defined __STDC__ && __STDC__ +# define obstack_free(h,obj) \ +( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ + (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp + (char *) (h)->chunk) \ + : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) +# else +# define obstack_free(h,obj) \ +( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ + (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp + (char *) (h)->chunk) \ + : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0))) +# endif + +#endif /* not __GNUC__ or not __STDC__ */ + +#ifdef __cplusplus +} /* C++ */ +#endif + +#endif /* obstack.h */ diff --git a/misc/dpkg/patches/patch-aa b/misc/dpkg/patches/patch-aa deleted file mode 100644 index 1677263113b..00000000000 --- a/misc/dpkg/patches/patch-aa +++ /dev/null @@ -1,13 +0,0 @@ -$NetBSD: patch-aa,v 1.1.1.1 2004/10/29 17:26:18 erh Exp $ - ---- lib/Makefile.in.orig 2004-10-27 09:06:43.000000000 +0000 -+++ lib/Makefile.in 2004-10-29 16:42:38.000000000 +0000 -@@ -20,7 +20,7 @@ - all:: libdpkg.a - - libdpkg.a: $(OBJECTS) -- $(AR) r $@ $^ -+ $(AR) r $@ $(OBJECTS) ../optlib/getopt.o ../optlib/getopt1.o ../optlib/long-options.o ../optlib/closeout.o ../optlib/obstack.o - $(RANLIB) $@ - - .PHONY: install diff --git a/misc/dpkg/patches/patch-ab b/misc/dpkg/patches/patch-ab deleted file mode 100644 index d5da260b03a..00000000000 --- a/misc/dpkg/patches/patch-ab +++ /dev/null @@ -1,15 +0,0 @@ -$NetBSD: patch-ab,v 1.1.1.1 2004/10/29 17:26:18 erh Exp $ - ---- Makefile.in.orig 2004-10-29 16:47:00.000000000 +0000 -+++ Makefile.in 2004-10-29 16:46:46.000000000 +0000 -@@ -9,8 +9,8 @@ - default: all - include Makefile.conf - --SUBDIRS = include optlib lib dpkg-deb split scripts utils main \ -- @DSELECTDIR@ po methods man doc -+SUBDIRS = include optlib lib dpkg-deb split scripts main \ -+ @DSELECTDIR@ po methods - - all: version.h all-recursive - diff --git a/misc/dpkg/patches/patch-ac b/misc/dpkg/patches/patch-ac deleted file mode 100644 index ccf795eee35..00000000000 --- a/misc/dpkg/patches/patch-ac +++ /dev/null @@ -1,13 +0,0 @@ -$NetBSD: patch-ac,v 1.1.1.1 2004/10/29 17:26:18 erh Exp $ - ---- dpkg-deb/build.c.orig 2003-06-29 12:59:36.000000000 +0200 -+++ dpkg-deb/build.c 2003-06-29 13:01:34.000000000 +0200 -@@ -445,7 +445,7 @@ - m_dup2(p1[0],0); close(p1[0]); close(p1[1]); - m_dup2(p2[1],1); close(p2[0]); close(p2[1]); - if (chdir(directory)) ohshite(_("failed to chdir to `%.255s'"),directory); -- execlp(TAR,"tar","-cf", "-", "-T", "-", "--null", "--no-recursion", (char*)0); -+ execlp(TAR,"tar","-cf", "-", "-T", "-", (char*)0); - ohshite(_("failed to exec tar -cf")); - } - close(p1[0]); diff --git a/misc/dpkg/patches/patch-ae b/misc/dpkg/patches/patch-ae deleted file mode 100644 index 71f47814c13..00000000000 --- a/misc/dpkg/patches/patch-ae +++ /dev/null @@ -1,21 +0,0 @@ -$NetBSD: patch-ae,v 1.1 2006/05/21 11:17:28 rillig Exp $ - -GNU Make does not strip the line-continuation backslashes before -executing the shell. This confuses Perl. - -In addition, it is bad style to pipe directly into the target file in -Make, since in a second run Make will assume the target file has been -updated properly. - ---- main/Makefile.in.orig 2004-10-27 11:06:43.000000000 +0200 -+++ main/Makefile.in 2006-05-21 13:06:28.000000000 +0200 -@@ -72,6 +72,6 @@ enquiry.o: archtable.h - - archtable.h: $(top_srcdir)/archtable - expand $< | \ -- perl -ne 'print " { \"$$1\",$$2\"$$3\",$$4\"$$5\" },\n" \ -- if m/^(?!\s*#)\s*(\S+)(\s+)(\S+)(\s+)(\S+)\s*$$/' \ -- >$@ -+ perl -ne 'print " { \"$$1\",$$2\"$$3\",$$4\"$$5\" },\n" if m/^(?!\s*#)\s*(\S+)(\s+)(\S+)(\s+)(\S+)\s*$$/' \ -+ >$@.tmp -+ mv $@.tmp $@ diff --git a/misc/dpkg/patches/patch-af b/misc/dpkg/patches/patch-af new file mode 100644 index 00000000000..2902c617c13 --- /dev/null +++ b/misc/dpkg/patches/patch-af @@ -0,0 +1,13 @@ +$NetBSD: patch-af,v 1.1 2007/12/02 09:38:51 rillig Exp $ + +--- src/main.h.orig 2006-06-19 03:22:03.000000000 +0200 ++++ src/main.h 2007-12-02 10:14:17.000000000 +0100 +@@ -22,6 +22,8 @@ + #ifndef MAIN_H + #define MAIN_H + ++#include ++ + struct fileinlist; /* these two are defined in filesdb.h */ + struct filenamenode; + diff --git a/misc/dpkg/patches/patch-ag b/misc/dpkg/patches/patch-ag new file mode 100644 index 00000000000..5eb24ddd968 --- /dev/null +++ b/misc/dpkg/patches/patch-ag @@ -0,0 +1,21 @@ +$NetBSD: patch-ag,v 1.1 2007/12/02 09:38:51 rillig Exp $ + +--- lib/Makefile.in.orig 2007-12-02 10:05:42.000000000 +0100 ++++ lib/Makefile.in 2007-12-02 10:15:38.000000000 +0100 +@@ -75,7 +75,7 @@ am_libdpkg_a_OBJECTS = compat.$(OBJEXT) + md5.$(OBJEXT) mlib.$(OBJEXT) myopt.$(OBJEXT) \ + nfmalloc.$(OBJEXT) parse.$(OBJEXT) parsehelp.$(OBJEXT) \ + showcright.$(OBJEXT) showpkg.$(OBJEXT) tarfn.$(OBJEXT) \ +- utils.$(OBJEXT) varbuf.$(OBJEXT) vercmp.$(OBJEXT) ++ utils.$(OBJEXT) varbuf.$(OBJEXT) vercmp.$(OBJEXT) obstack.$(OBJEXT) + libdpkg_a_OBJECTS = $(am_libdpkg_a_OBJECTS) + DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) + depcomp = $(SHELL) $(top_srcdir)/config/depcomp +@@ -249,6 +249,7 @@ libdpkg_a_SOURCES = \ + mlib.c \ + myopt.c myopt.h \ + nfmalloc.c \ ++ obstack.c \ + parse.c \ + parsehelp.c \ + parsedump.h \ -- cgit v1.2.3