RPM Community Forums

Mailing List Message of <rpm-devel>

Re: [CVS] RPM: rpm/ CHANGES rpm/build/ rpmbuild.h rpm/lib/ depends.c forma...

From: Jeff Johnson <n3npq@mac.com>
Date: Thu 22 Nov 2007 - 23:49:43 CET
Message-Id: <105CA127-0108-4316-98CD-EC5C6582AB91@mac.com>
This change likely needs some explanation ...

A long time ago (like 1996), a conscious decision was made to define all
RPMTAG_FOO tags outside of header.c. This has largely made it impossible
to change rpm headers & tags in any fundamental way, and has been  
pure hell to maintain
in an API/ABI.

Basically header.c knows absolutely nothing about the RPMTAG_FOO data  
types. There
are any number of squirrley hack-a-rounds in header.c that need  
untwisting.

This checkin stops including header.h implcitly almost everywhere, which
will permit me to juggle the public and private headerFoo() methods and
types. At the same time, <rpmtag.h> is included into header.c for the  
first
time ever.

I've delayed as long as possible mostly because I loathe header.c  
coding.

So if you are trying to build against rpm-5.0 libraries (all 3 of you  
developers ;-),
expect some modest churn over the next 48 hours.

The "fix" (for the next 48 hours or so) is to change code that looks  
like
      #include <rpmlib.h>
to
     #include <header.h>
     #include <rpmlib.h>

When I'm done, I will have accomplished:

1) Drilling the rpmTag public data type everywhere through headerFoo 
() routines.

2) Refactoring headerSprintf() and the very non-opaque "struct  
headerSprintfExtension_s"
SomeWhereElseInstead.

3) Isolating the public typedef's and enum's for handling a Header in  
<rpmtag.h>.

None of the changes are going to be very hard,  just noisy and  
surprising and confusing.

73 de Jeff

On Nov 22, 2007, at 5:28 PM, Jeff Johnson wrote:

>   RPM Package Manager, CVS Repository
>   http://rpm5.org/cvs/
>    
> ______________________________________________________________________ 
> ______
>
>   Server: rpm5.org                         Name:   Jeff Johnson
>   Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
>   Module: rpm                              Date:   22-Nov-2007  
> 23:28:18
>   Branch: HEAD                             Handle: 2007112222281305
>
>   Modified files:
>     rpm                     CHANGES
>     rpm/build               rpmbuild.h
>     rpm/lib                 depends.c formats.c fsm.c poptQV.c  
> psm.c query.c
>                             rpmchecksig.c rpmds.c rpmfc.c rpmfi.c  
> rpmgi.c
>                             rpminstall.c rpmrollback.c rpmte.c rpmts.c
>                             transaction.c verify.c
>     rpm/perl                RPM.xs RPM_Files.xs RPM_Header.xs
>                             RPM_PackageIterator.xs RPM_Spec.xs
>                             RPM_Transaction.xs rpmxs.c
>     rpm/python              rpmdb-py.c rpmps-py.c rpmrc-py.c rpmte- 
> py.c
>     rpm/rpmdb               hdrfmt.c header.c header.h rpmtag.h  
> tagname.c
>     rpm/tools               rpmcache.c
>
>   Log:
>     - unsnarl header.h from everything else.
>
>   Summary:
>     Revision    Changes     Path
>     1.1870      +1  -0      rpm/CHANGES
>     2.79        +2  -1      rpm/build/rpmbuild.h
>     1.364       +1  -0      rpm/lib/depends.c
>     2.120       +1  -0      rpm/lib/formats.c
>     2.137       +1  -0      rpm/lib/fsm.c
>     2.47        +1  -0      rpm/lib/poptQV.c
>     2.264       +1  -0      rpm/lib/psm.c
>     2.193       +1  -0      rpm/lib/query.c
>     1.194       +1  -0      rpm/lib/rpmchecksig.c
>     2.83        +1  -0      rpm/lib/rpmds.c
>     1.40        +1  -0      rpm/lib/rpmfc.c
>     2.101       +1  -0      rpm/lib/rpmfi.c
>     2.43        +1  -0      rpm/lib/rpmgi.c
>     1.183       +1  -0      rpm/lib/rpminstall.c
>     1.26        +1  -0      rpm/lib/rpmrollback.c
>     2.69        +1  -0      rpm/lib/rpmte.c
>     2.123       +1  -0      rpm/lib/rpmts.c
>     1.355       +1  -1      rpm/lib/transaction.c
>     2.178       +1  -0      rpm/lib/verify.c
>     1.24        +4  -4      rpm/perl/RPM.xs
>     1.7         +4  -5      rpm/perl/RPM_Files.xs
>     1.14        +10 -10     rpm/perl/RPM_Header.xs
>     1.3         +2  -2      rpm/perl/RPM_PackageIterator.xs
>     1.5         +2  -4      rpm/perl/RPM_Spec.xs
>     1.9         +1  -2      rpm/perl/RPM_Transaction.xs
>     1.6         +5  -4      rpm/perl/rpmxs.c
>     1.19        +1  -0      rpm/python/rpmdb-py.c
>     1.13        +1  -0      rpm/python/rpmps-py.c
>     1.21        +1  -0      rpm/python/rpmrc-py.c
>     1.23        +1  -0      rpm/python/rpmte-py.c
>     1.37        +1  -0      rpm/rpmdb/hdrfmt.c
>     1.127       +0  -47     rpm/rpmdb/header.c
>     1.71        +1  -234    rpm/rpmdb/header.h
>     1.5         +233 -2     rpm/rpmdb/rpmtag.h
>     1.14        +1  -1      rpm/rpmdb/tagname.c
>     2.24        +1  -0      rpm/tools/rpmcache.c
>    
> ______________________________________________________________________ 
> ______
>
>   patch -p0 <<'@@ .'
>   Index: rpm/CHANGES
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.1869 -r1.1870 CHANGES
>   --- rpm/CHANGES	22 Nov 2007 19:50:17 -0000	1.1869
>   +++ rpm/CHANGES	22 Nov 2007 22:28:13 -0000	1.1870
>   @@ -1,4 +1,5 @@
>    5.0a2 -> 5.0a3:
>   +    - jbj: unsnarl header.h from everything else.
>        - jbj: eliminate hRET_t, use rpmTagData instead.
>        - jbj: fix: files.c: pass union ptr, not 1st element, address.
>        - jbj: eliminate hTYP_t and hCNT_t typedefs everywhere.
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/build/rpmbuild.h
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.78 -r2.79 rpmbuild.h
>   --- rpm/build/rpmbuild.h	21 Nov 2007 13:31:37 -0000	2.78
>   +++ rpm/build/rpmbuild.h	22 Nov 2007 22:28:14 -0000	2.79
>   @@ -6,7 +6,8 @@
>     *  This is the *only* module users of librpmbuild should need  
> to include.
>     */
>
>   -#include "rpmcli.h"
>   +#include <header.h>
>   +#include <rpmcli.h>
>
>    /* and it shouldn't need these :-( */
>    #include "stringbuf.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/depends.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.363 -r1.364 depends.c
>   --- rpm/lib/depends.c	22 Nov 2007 18:50:25 -0000	1.363
>   +++ rpm/lib/depends.c	22 Nov 2007 22:28:14 -0000	1.364
>   @@ -5,6 +5,7 @@
>    #include "system.h"
>
>    #include "rpmio_internal.h"	/* XXX PGPHASHALGO_MD5 */
>   +#include <header.h>
>    #include <rpmcli.h>		/* XXX rpmcliPackagesTotal */
>
>    #include <rpmmacro.h>		/* XXX rpmExpand("% 
> {_dependency_whiteout}" */
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/formats.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.119 -r2.120 formats.c
>   --- rpm/lib/formats.c	19 Nov 2007 18:57:54 -0000	2.119
>   +++ rpm/lib/formats.c	22 Nov 2007 22:28:14 -0000	2.120
>   @@ -7,6 +7,7 @@
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>    #include <rpmmacro.h>		/* XXX for %_i18ndomains */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #define	_RPMEVR_INTERNAL
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/fsm.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.136 -r2.137 fsm.c
>   --- rpm/lib/fsm.c	22 Nov 2007 18:50:25 -0000	2.136
>   +++ rpm/lib/fsm.c	22 Nov 2007 22:28:14 -0000	2.137
>   @@ -7,6 +7,7 @@
>
>    #include <rpmio_internal.h>	/* XXX urlPath, fdGetCpioPos */
>    #include <rpmcb.h>		/* XXX fnpyKey */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #include "cpio.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/poptQV.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.46 -r2.47 poptQV.c
>   --- rpm/lib/poptQV.c	30 Sep 2007 20:38:25 -0000	2.46
>   +++ rpm/lib/poptQV.c	22 Nov 2007 22:28:14 -0000	2.47
>   @@ -6,6 +6,7 @@
>    #include "system.h"
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #include <rpmcli.h>
>    #include <rpmgi.h>		/* XXX for giFlags */
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/psm.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.263 -r2.264 psm.c
>   --- rpm/lib/psm.c	19 Nov 2007 20:55:12 -0000	2.263
>   +++ rpm/lib/psm.c	22 Nov 2007 22:28:14 -0000	2.264
>   @@ -10,6 +10,7 @@
>    #include <rpmmacro.h>
>    #include <rpmurl.h>
>    #include <rpmlua.h>
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #include "cpio.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/query.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.192 -r2.193 query.c
>   --- rpm/lib/query.c	22 Nov 2007 18:50:25 -0000	2.192
>   +++ rpm/lib/query.c	22 Nov 2007 22:28:14 -0000	2.193
>   @@ -12,6 +12,7 @@
>    #endif
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #include <rpmcli.h>
>
>    #include "rpmdb.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmchecksig.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.193 -r1.194 rpmchecksig.c
>   --- rpm/lib/rpmchecksig.c	22 Nov 2007 18:50:25 -0000	1.193
>   +++ rpm/lib/rpmchecksig.c	22 Nov 2007 22:28:14 -0000	1.194
>   @@ -6,6 +6,7 @@
>    #include "system.h"
>
>    #include "rpmio_internal.h"
>   +#include <header.h>
>    #include <rpmcli.h>
>    #define	_RPMEVR_INTERNAL	/* XXX RPMSENSE_KEYRING */
>    #include <rpmevr.h>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmds.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.82 -r2.83 rpmds.c
>   --- rpm/lib/rpmds.c	22 Nov 2007 18:50:25 -0000	2.82
>   +++ rpm/lib/rpmds.c	22 Nov 2007 22:28:14 -0000	2.83
>   @@ -78,6 +78,7 @@
>    #include <rpmio_internal.h>	/* XXX fdGetFILE */
>    #include <rpmcb.h>		/* XXX fnpyKey */
>    #include <rpmmacro.h>
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #define	_RPMDS_INTERNAL
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmfc.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.39 -r1.40 rpmfc.c
>   --- rpm/lib/rpmfc.c	22 Nov 2007 18:50:25 -0000	1.39
>   +++ rpm/lib/rpmfc.c	22 Nov 2007 22:28:14 -0000	1.40
>   @@ -4,6 +4,7 @@
>
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>   +#include <header.h>
>    #define	_RPMEVR_INTERNAL
>    #include <rpmbuild.h>
>    #include <argv.h>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmfi.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.100 -r2.101 rpmfi.c
>   --- rpm/lib/rpmfi.c	19 Nov 2007 18:57:54 -0000	2.100
>   +++ rpm/lib/rpmfi.c	22 Nov 2007 22:28:14 -0000	2.101
>   @@ -8,6 +8,7 @@
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>    #include <rpmurl.h>	/* XXX urlGetPath */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #include "cpio.h"	/* XXX CPIO_FOO */
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmgi.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.42 -r2.43 rpmgi.c
>   --- rpm/lib/rpmgi.c	21 Nov 2007 21:58:47 -0000	2.42
>   +++ rpm/lib/rpmgi.c	22 Nov 2007 22:28:14 -0000	2.43
>   @@ -7,6 +7,7 @@
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>    #include <rpmmacro.h>		/* XXX rpmExpand */
>   +#include <header.h>
>    #include <rpmlib.h>
>    #include <rpmte.h>		/* XXX rpmElementType */
>    #include <pkgio.h>		/* XXX rpmElementType */
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpminstall.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.182 -r1.183 rpminstall.c
>   --- rpm/lib/rpminstall.c	15 Nov 2007 20:26:04 -0000	1.182
>   +++ rpm/lib/rpminstall.c	22 Nov 2007 22:28:14 -0000	1.183
>   @@ -5,6 +5,7 @@
>    #include "system.h"
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #include <rpmcli.h>
>
>    #include "rpmdb.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmrollback.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.25 -r1.26 rpmrollback.c
>   --- rpm/lib/rpmrollback.c	10 Nov 2007 18:06:42 -0000	1.25
>   +++ rpm/lib/rpmrollback.c	22 Nov 2007 22:28:14 -0000	1.26
>   @@ -5,6 +5,7 @@
>    #include "system.h"
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #include <rpmcli.h>
>
>    #include "rpmdb.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmte.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.68 -r2.69 rpmte.c
>   --- rpm/lib/rpmte.c	19 Nov 2007 18:57:54 -0000	2.68
>   +++ rpm/lib/rpmte.c	22 Nov 2007 22:28:14 -0000	2.69
>   @@ -6,6 +6,7 @@
>
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #include "rpmds.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/rpmts.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.122 -r2.123 rpmts.c
>   --- rpm/lib/rpmts.c	20 Nov 2007 19:48:59 -0000	2.122
>   +++ rpm/lib/rpmts.c	22 Nov 2007 22:28:14 -0000	2.123
>   @@ -7,6 +7,7 @@
>    #include "rpmio_internal.h"	/* XXX for pgp and beecrypt */
>    #include <rpmcb.h>		/* XXX fnpyKey */
>    #include <rpmmacro.h>		/* XXX rpmtsOpenDB() needs rpmGetPath */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #define	_RPMDB_INTERNAL		/* XXX almost opaque sigh */
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/transaction.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.354 -r1.355 transaction.c
>   --- rpm/lib/transaction.c	22 Nov 2007 18:50:25 -0000	1.354
>   +++ rpm/lib/transaction.c	22 Nov 2007 22:28:14 -0000	1.355
>   @@ -6,7 +6,7 @@
>
>    #include <rpmio.h>
>    #include <rpmmacro.h>	/* XXX for rpmExpand */
>   -
>   +#include <header.h>
>    #include "rpmcli.h"	/* IDTX prototypes */
>
>    #include "fsm.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/verify.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.177 -r2.178 verify.c
>   --- rpm/lib/verify.c	22 Nov 2007 18:50:25 -0000	2.177
>   +++ rpm/lib/verify.c	22 Nov 2007 22:28:14 -0000	2.178
>   @@ -6,6 +6,7 @@
>    #include "system.h"
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #define	_RPMPS_INTERNAL	/* XXX rpmps needs iterator. */
>    #include <rpmcli.h>
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/RPM.xs
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.23 -r1.24 RPM.xs
>   --- rpm/perl/RPM.xs	15 Aug 2007 20:35:28 -0000	1.23
>   +++ rpm/perl/RPM.xs	22 Nov 2007 22:28:16 -0000	1.24
>   @@ -11,15 +11,15 @@
>    #include <utime.h>
>    #include <utime.h>
>
>   -#include "rpmlib.h"
>    #include "rpmio.h"
>   +#include "rpmlog.h"
>   +#include "rpmmacro.h"
>   +#include "header.h"
>   +#include "rpmdb.h"
>    #include "rpmcli.h"
>    #include "rpmts.h"
>    #include "rpmte.h"
>   -#include "rpmmacro.h"
>    #include "rpmevr.h"
>   -#include "header.h"
>   -#include "rpmdb.h"
>    #include "misc.h"
>
>    /* The perl callback placeholder for output err messages */
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/RPM_Files.xs
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.6 -r1.7 RPM_Files.xs
>   --- rpm/perl/RPM_Files.xs	12 Sep 2007 07:05:04 -0000	1.6
>   +++ rpm/perl/RPM_Files.xs	22 Nov 2007 22:28:16 -0000	1.7
>   @@ -7,14 +7,13 @@
>    #undef Stat
>
>    #include "../config.h"
>   -#ifdef HAVE_BEECRYPT_API_H
>   -#include <beecrypt/api.h>
>   -#endif
>   +/* XXX artifacts needed to include "rpmio_internal.h" w/o  
> "system.h" */
>   +void * vmefail(size_t size);
>   +#define xstrdup(_str)   (strcpy((malloc(strlen(_str)+1) ? :  
> vmefail(strlen(_str)+1)), (_str)))
>
>   +#include "rpmio_internal.h"
>    #include "rpmlib.h"
>    #include "rpmfi.h"
>   -#include "rpmio_internal.h"
>   -#include "rpmpgp.h"
>
>    MODULE = RPM::Files		PACKAGE = RPM::Files
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/RPM_Header.xs
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.13 -r1.14 RPM_Header.xs
>   --- rpm/perl/RPM_Header.xs	21 Nov 2007 00:25:04 -0000	1.13
>   +++ rpm/perl/RPM_Header.xs	22 Nov 2007 22:28:16 -0000	1.14
>   @@ -9,9 +9,12 @@
>    #include <stdio.h>
>    #include <string.h>
>    #include <utime.h>
>   -#include "rpmlib.h"
>   +
>    #include <rpmio.h>
>   +#include <header.h>
>   +#include "rpmdb.h"
>    #include "rpmcli.h"
>   +#include <pkgio.h>
>
>    #include "rpmts.h"
>    #include "rpmte.h"
>   @@ -19,8 +22,6 @@
>    #include "rpmds.h"
>    #include "rpmfi.h"
>
>   -#include "header.h"
>   -#include "rpmdb.h"
>    #include "misc.h"
>
>    #include "rpmxs.h"
>   @@ -191,7 +192,7 @@
>        int no_header_magic
>        PREINIT:
>        char * string = NULL;
>   -    int offset = 8; /* header magic length */
>   +    size_t offset = 8; /* header magic length */
>        char * ptr = NULL;
>        int hsize = 0;
>        PPCODE:
>   @@ -199,8 +200,8 @@
>        string = headerUnload(h, NULL);
>        if (! no_header_magic) {
>            ptr = malloc(hsize);
>   -        memcpy(ptr, header_magic, 8);
>   -        memcpy(ptr + 8, string, hsize - 8);
>   +        memcpy(ptr, header_magic, offset);
>   +        memcpy(ptr + offset, string, hsize - 8);
>        }
>        XPUSHs(sv_2mortal(newSVpv(ptr ? ptr : string, hsize)));
>        free(string);
>   @@ -297,7 +298,7 @@
>        Header h
>        PREINIT:
>        HeaderIterator iterator;
>   -    int tag;
>   +    rpmTag tag;
>        PPCODE:
>        iterator = headerInitIterator(h);
>        while (headerNextIterator(iterator, &tag, NULL, NULL, NULL)) {
>   @@ -310,14 +311,14 @@
>        Header h
>        SV * sv_tag
>        PREINIT:
>   -    rpmTag tag = -1;
>   +    rpmTag tag = 0xffffffff;
>        CODE:
>        if (SvIOK(sv_tag)) {
>            tag = SvIV(sv_tag);
>        } else if (SvPOK(sv_tag)) {
>            tag = tagValue(SvPV_nolen(sv_tag));
>        }
>   -    if (tag > 0)
>   +    if (tag < 0xffffffff)
>            RETVAL = headerIsEntry(h, tag);
>        else
>            RETVAL = -1;
>   @@ -413,7 +414,6 @@
>        Header header
>        rpmts ts
>        PREINIT:
>   -    rpmfi fi;
>        CODE:
>        if (ts)
>            ts = rpmtsLink(ts, "RPM::Header::files");
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/RPM_PackageIterator.xs
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.2 -r1.3 RPM_PackageIterator.xs
>   --- rpm/perl/RPM_PackageIterator.xs	14 Aug 2007 01:19:41 -0000	1.2
>   +++ rpm/perl/RPM_PackageIterator.xs	22 Nov 2007 22:28:16 -0000	1.3
>   @@ -9,14 +9,14 @@
>    #include <stdio.h>
>    #include <string.h>
>    #include <utime.h>
>   -#include "rpmlib.h"
>   +
>    #include <rpmio.h>
>   +#include "header.h"
>    #include "rpmcli.h"
>
>    #include "rpmts.h"
>    #include "rpmte.h"
>
>   -#include "header.h"
>    #include "rpmdb.h"
>    #include "misc.h"
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/RPM_Spec.xs
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.4 -r1.5 RPM_Spec.xs
>   --- rpm/perl/RPM_Spec.xs	1 Nov 2007 15:49:35 -0000	1.4
>   +++ rpm/perl/RPM_Spec.xs	22 Nov 2007 22:28:16 -0000	1.5
>   @@ -97,9 +97,8 @@
>    srcrpm(spec)
>        Spec spec
>        PREINIT:
>   -    const char *name, *version, *release;
>   -    char * srctag;
>   -    char * srcpath;
>   +    const char * srctag;
>   +    const char * srcpath;
>        PPCODE:
>        srcpath = rpmGetPath("%{_srcrpmdir}", NULL);
>        srctag = headerSprintf(
>   @@ -144,7 +143,6 @@
>    check(spec, ts = NULL)
>        Spec spec
>        PREINIT:
>   -    int rc;
>        rpmts ts = rpmtsCreate();
>        rpmps ps;
>        PPCODE:
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/RPM_Transaction.xs
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.8 -r1.9 RPM_Transaction.xs
>   --- rpm/perl/RPM_Transaction.xs	1 Oct 2007 21:06:28 -0000	1.8
>   +++ rpm/perl/RPM_Transaction.xs	22 Nov 2007 22:28:16 -0000	1.9
>   @@ -10,12 +10,11 @@
>    #include <string.h>
>    #include <utime.h>
>
>   -#include "rpmlib.h"
>    #include "rpmio.h"
>   +#include "header.h"
>    #include "rpmcli.h"
>    #include "rpmts.h"
>    #include "rpmte.h"
>   -#include "header.h"
>    #include "rpmdb.h"
>    #include "misc.h"
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/perl/rpmxs.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.5 -r1.6 rpmxs.c
>   --- rpm/perl/rpmxs.c	20 Nov 2007 17:37:03 -0000	1.5
>   +++ rpm/perl/rpmxs.c	22 Nov 2007 22:28:16 -0000	1.6
>   @@ -122,15 +122,16 @@
>    }
>
>    int _headername_vs_dep(Header h, rpmds dep, int nopromote) {
>   -    char *name; int type;
>   +    rpmTagType type;
>   +    rpmTagData name;
>        int rc = 0;
>        CHECK_RPMDS_IX(dep);
>   -    headerGetEntry(h, RPMTAG_NAME, &type, (void **) &name, NULL);
>   -    if (strcmp(name, rpmdsN(dep)) != 0)
>   +    headerGetEntry(h, RPMTAG_NAME, &type, &name, NULL);
>   +    if (strcmp(name.str, rpmdsN(dep)) != 0)
>            rc = 0;
>        else
>            rc = rpmdsNVRMatchesDep(h, dep, nopromote);
>   -    headerFreeData(name, type);
>   +    name.ptr = headerFreeData(name.ptr, type);
>        return rc;
>        /* return 1 if match */
>    }
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/python/rpmdb-py.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.18 -r1.19 rpmdb-py.c
>   --- rpm/python/rpmdb-py.c	19 Nov 2007 18:57:58 -0000	1.18
>   +++ rpm/python/rpmdb-py.c	22 Nov 2007 22:28:17 -0000	1.19
>   @@ -6,6 +6,7 @@
>
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #include "rpmdb-py.h"
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/python/rpmps-py.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.12 -r1.13 rpmps-py.c
>   --- rpm/python/rpmps-py.c	19 Nov 2007 18:57:58 -0000	1.12
>   +++ rpm/python/rpmps-py.c	22 Nov 2007 22:28:17 -0000	1.13
>   @@ -7,6 +7,7 @@
>
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>   +#include <header.h>
>    #define	_RPMPS_INTERNAL	/* XXX rpmps needs iterator */
>    #include <rpmlib.h>
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/python/rpmrc-py.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.20 -r1.21 rpmrc-py.c
>   --- rpm/python/rpmrc-py.c	3 Nov 2007 15:38:18 -0000	1.20
>   +++ rpm/python/rpmrc-py.c	22 Nov 2007 22:28:17 -0000	1.21
>   @@ -7,6 +7,7 @@
>    #include "structmember.h"
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #include "rpmdebug-py.c"
>
>    #include <rpmcli.h>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/python/rpmte-py.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.22 -r1.23 rpmte-py.c
>   --- rpm/python/rpmte-py.c	19 Nov 2007 18:57:58 -0000	1.22
>   +++ rpm/python/rpmte-py.c	22 Nov 2007 22:28:17 -0000	1.23
>   @@ -6,6 +6,7 @@
>
>    #include <rpmio.h>
>    #include <rpmcb.h>		/* XXX fnpyKey */
>   +#include <header.h>
>    #include <rpmlib.h>
>
>    #include "header-py.h"	/* XXX tagNumFromPyObject */
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmdb/hdrfmt.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.36 -r1.37 hdrfmt.c
>   --- rpm/rpmdb/hdrfmt.c	22 Nov 2007 18:50:27 -0000	1.36
>   +++ rpm/rpmdb/hdrfmt.c	22 Nov 2007 22:28:17 -0000	1.37
>   @@ -5,6 +5,7 @@
>    #include "system.h"
>
>    #include "rpmio_internal.h"
>   +#include <header.h>
>    #include <rpmlib.h>	/* XXX RPMFILE_FOO, rpmMkdirPath */
>    #include <rpmmacro.h>	/* XXX for %_i18ndomains */
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmdb/header.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.126 -r1.127 header.c
>   --- rpm/rpmdb/header.c	22 Nov 2007 19:50:18 -0000	1.126
>   +++ rpm/rpmdb/header.c	22 Nov 2007 22:28:17 -0000	1.127
>   @@ -120,53 +120,6 @@
>    /*@=redecl@*/
>
>    /**
>   - * Return tag name from value.
>   - * @todo This should come from #include <rpmtag.h>.
>   - * @param tag		tag value
>   - * @return		tag name, "(unknown)" on not found
>   - */
>   -/*@-redecl@*/
>   -/*@unused@*/ static inline /*@observer@*/
>   -const char * tagName(uint32_t tag)
>   -	/*@*/
>   -{
>   -/*@-type@*/
>   -    return ((*rpmTags->tagName)(tag));
>   -/*@=type@*/
>   -}
>   -
>   -/**
>   - * Return tag data type from value.
>   - * @todo This should come from #include <rpmtag.h>.
>   - * @param tag		tag value
>   - * @return		tag data type, 0 on not found.
>   - */
>   -/*@unused@*/ static inline
>   -uint32_t tagType(uint32_t tag)
>   -	/*@*/
>   -{
>   -/*@-type@*/
>   -    return ((*rpmTags->tagType)(tag));
>   -/*@=type@*/
>   -}
>   -
>   -/**
>   - * Return tag value from name.
>   - * @todo This should come from #include <rpmtag.h>.
>   - * @param tagstr	name of tag
>   - * @return		tag value, -1 on not found
>   - */
>   -/*@unused@*/ static inline
>   -int tagValue(const char * tagstr)
>   -	/*@*/
>   -{
>   -/*@-type@*/
>   -    return ((*rpmTags->tagValue)(tagstr));
>   -/*@=type@*/
>   -}
>   -/*@=redecl@*/
>   -
>   -/**
>     * Global header stats enabler.
>     */
>    /*@unchecked@*/
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmdb/header.h
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.70 -r1.71 header.h
>   --- rpm/rpmdb/header.h	22 Nov 2007 19:50:18 -0000	1.70
>   +++ rpm/rpmdb/header.h	22 Nov 2007 22:28:17 -0000	1.71
>   @@ -80,112 +80,15 @@
>    /* RPM - Copyright (C) 1995-2001 Red Hat Software */
>
>    #include <rpmsw.h>
>   +#include <rpmtag.h>
>
>    #ifdef __cplusplus
>    extern "C" {
>    #endif
>
>    /** \ingroup header
>   - */
>   -typedef const char *	errmsg_t;
>   -
>   -/** \ingroup header
>   - */
>   -typedef /*@abstract@*/ /*@refcounted@*/ struct headerToken_s *  
> Header;
>   -
>   -/** \ingroup header
>   - */
>   -typedef enum rpmTag_e rpmTag;
>   -
>   -/** \ingroup header
>   - * The basic types of data in tags from headers.
>   - */
>   -enum rpmTagType_e {
>   -    	/* RPM_NULL_TYPE =  0	- never been used. */
>   -	/* RPM_CHAR_TYPE =  1	- never been used, same as  
> RPM_UINT8_TYPE. */
>   -    RPM_UINT8_TYPE		=  2,
>   -    RPM_UINT16_TYPE		=  3,
>   -    RPM_UINT32_TYPE		=  4,
>   -    RPM_UINT64_TYPE		=  5,
>   -    RPM_STRING_TYPE		=  6,
>   -    RPM_BIN_TYPE		=  7,
>   -    RPM_STRING_ARRAY_TYPE	=  8,
>   -    RPM_I18NSTRING_TYPE		=  9
>   -	/* RPM_ASN1_TYPE = 10	- never been used. */
>   -	/* RPM_OPENPGP_TYPE= 11	- never been used. */
>   -};
>   -#define	RPM_MIN_TYPE		2
>   -#define	RPM_MAX_TYPE		9
>   -#define	RPM_MASK_TYPE		0x0000ffff
>   -
>   -/** \ingroup header
>   - */
>   -typedef enum rpmTagType_e rpmTagType;
>   -
>   -/** \ingroup header
>   - */
>   -typedef union rpmDataType_u rpmTagData;
>   -
>   -/** \ingroup header
>   - */
>   -typedef uint32_t rpmTagCount;
>   -
>   -/** \ingroup header
>   - */
>   -typedef struct _HE_s * HE_t;		/* tag container. */
>   -
>   -/** \ingroup header
>   - */
>   -/*@-typeuse -fielduse@*/
>   -#if !defined(SWIG)
>   -union rpmDataType_u {
>   -/*@null@*/
>   -    void * ptr;
>   -    uint8_t * ui8p;		/*!< RPM_INT8_TYPE | RPM_CHAR_TYPE */
>   -    uint16_t * ui16p;		/*!< RPM_INT16_TYPE */
>   -    uint32_t * ui32p;		/*!< RPM_INT32_TYPE */
>   -    uint64_t * ui64p;		/*!< RPM_INT64_TYPE */
>   -    const char * str;		/*!< RPM_STRING_TYPE */
>   -    unsigned char * blob;	/*!< RPM_BIN_TYPE */
>   -    const char ** argv;		/*!< RPM_STRING_ARRAY_TYPE */
>   -    HE_t * he;
>   -};
>   -#endif
>   -/*@=typeuse =fielduse@*/
>   -
>   -/** \ingroup header
>   - */
>   -typedef uint32_t *	hTAG_t;
>   -typedef rpmTagData *	hPTR_t;
>   -
>   -/** \ingroup header
>   - */
>   -/*@-typeuse -fielduse@*/
>   -#if !defined(SWIG)
>   -struct _HE_s {
>   -    uint32_t tag;
>   -    rpmTagType t;
>   -/*@owned@*/ /*@null@*/
>   -    rpmTagData p;
>   -    rpmTagCount c;
>   -    int ix;
>   -    unsigned int freeData	: 1;
>   -    unsigned int avail		: 1;
>   -    unsigned int append		: 1;
>   -    unsigned int signature	: 1;
>   -};
>   -typedef struct _HE_s HE_s;
>   -#endif
>   -/*@=typeuse =fielduse@*/
>   -
>   -/** \ingroup header
>   - */
>   -typedef /*@abstract@*/ struct headerIterator_s * HeaderIterator;
>   -
>   -/** \ingroup header
>     * Associate tag names with numeric values.
>     */
>   -typedef /*@abstract@*/ struct headerTagTableEntry_s *  
> headerTagTableEntry;
>    #if !defined(SWIG)
>    struct headerTagTableEntry_s {
>    /*@observer@*/ /*@relnull@*/
>   @@ -196,142 +99,6 @@
>    #endif
>
>    /**
>   - */
>   -typedef /*@abstract@*/ struct headerTagIndices_s *  
> headerTagIndices;
>   -#if !defined(SWIG)
>   -struct headerTagIndices_s {
>   -    int (*loadIndex) (headerTagTableEntry ** ipp, int * np,
>   -                int (*cmp) (const void * avp, const void * bvp))
>   -        /*@ modifies *ipp, *np */;	/*!< load sorted tag index. */
>   -/*@relnull@*/
>   -    headerTagTableEntry * byName;	/*!< header tags sorted by  
> name. */
>   -    int byNameSize;			/*!< no. of entries. */
>   -    int (*byNameCmp) (const void * avp, const void * bvp)
>   -        /*@*/;				/*!< compare entries by name. */
>   -    uint32_t (*tagValue) (const char * name)
>   -	/*@*/;				/* return value from name. */
>   -/*@relnull@*/
>   -    headerTagTableEntry * byValue;	/*!< header tags sorted by  
> value. */
>   -    int byValueSize;			/*!< no. of entries. */
>   -    int (*byValueCmp) (const void * avp, const void * bvp)
>   -        /*@*/;				/*!< compare entries by value. */
>   -    const char * (*tagName) (uint32_t value)
>   -	/*@*/;				/* Return name from value. */
>   -    uint32_t (*tagType) (uint32_t value)
>   -	/*@*/;				/* Return type from value. */
>   -};
>   -#endif
>   -
>   -/** \ingroup header
>   - */
>   -enum headerSprintfExtensionType {
>   -    HEADER_EXT_LAST = 0,	/*!< End of extension chain. */
>   -    HEADER_EXT_FORMAT,		/*!< headerTagFormatFunction() extension */
>   -    HEADER_EXT_MORE,		/*!< Chain to next table. */
>   -    HEADER_EXT_TAG		/*!< headerTagTagFunction() extension */
>   -};
>   -
>   -/** \ingroup header
>   - * HEADER_EXT_TAG format function prototype.
>   - *
>   - * @param he		tag container
>   - * @return		formatted string
>   - */
>   -typedef /*only@*/ char * (*headerTagFormatFunction) (HE_t he)
>   -	/*@modifies he @*/;
>   -
>   -/** \ingroup header
>   - * HEADER_EXT_FORMAT format function prototype.
>   - * This is allowed to fail, which indicates the tag doesn't exist.
>   - *
>   - * @param h		header
>   - * @retval he		tag container
>   - * @return		0 on success
>   - */
>   -typedef int (*headerTagTagFunction) (Header h, HE_t he)
>   -	/*@modifies he @*/;
>   -
>   -/** \ingroup header
>   - * Define header tag output formats.
>   - */
>   -typedef /*@abstract@*/ struct headerSprintfExtension_s *  
> headerSprintfExtension;
>   -#if !defined(SWIG)
>   -struct headerSprintfExtension_s {
>   -    enum headerSprintfExtensionType type;	/*!< Type of  
> extension. */
>   -/*@observer@*/ /*@null@*/
>   -    const char * name;				/*!< Name of extension. */
>   -    union {
>   -/*@observer@*/ /*@null@*/
>   -	void * generic;				/*!< Private extension. */
>   -	headerTagFormatFunction fmtFunction; /*!< HEADER_EXT_TAG  
> extension. */
>   -	headerTagTagFunction tagFunction; /*!< HEADER_EXT_FORMAT  
> extension. */
>   -	struct headerSprintfExtension_s * more;	/*!< Chained table  
> extension. */
>   -    } u;
>   -};
>   -#endif
>   -
>   -/** \ingroup header
>   - * Supported default header tag output formats.
>   - */
>   -/*@-redecl@*/
>   -/*@observer@*/
>   -extern const struct headerSprintfExtension_s headerDefaultFormats 
> [];
>   -/*@=redecl@*/
>   -
>   -/** \ingroup header
>   - * Supported default header extension/tag output formats.
>   - */
>   -/*@-redecl@*/
>   -/*@observer@*/
>   -extern const struct headerSprintfExtension_s  
> headerCompoundFormats[];
>   -/*@=redecl@*/
>   -
>   -/** \ingroup header
>   - * New rpm data types under consideration/development.
>   - * These data types may (or may not) be added to rpm at some  
> point. In order
>   - * to avoid incompatibility with legacy versions of rpm, these  
> data (sub-)types
>   - * are introduced into the header by overloading RPM_BIN_TYPE,  
> with the binary
>   - * value of the tag a 16 byte image of what should/will be in  
> the header index,
>   - * followed by per-tag private data.
>   - */
>   -/*@-enummemuse -typeuse @*/
>   -typedef enum rpmSubTagType_e {
>   -    RPM_REGION_TYPE		= -10,
>   -    RPM_BIN_ARRAY_TYPE		= -11,
>   -  /*!<@todo Implement, kinda like RPM_STRING_ARRAY_TYPE for  
> known (but variable)
>   -	length binary data. */
>   -    RPM_XREF_TYPE		= -12
>   -  /*!<@todo Implement, intent is to to carry a  
> (???,tagNum,valNum) cross
>   -	reference to retrieve data from other tags. */
>   -} rpmSubTagType;
>   -/*@=enummemuse =typeuse @*/
>   -
>   -/** \ingroup header
>   - * Identify how to return the header data type.
>   - */
>   -/*@-enummemuse -typeuse @*/
>   -typedef enum rpmTagReturnType_e {
>   -    RPM_ANY_RETURN_TYPE		= 0,
>   -    RPM_SCALAR_RETURN_TYPE	= 0x00010000,
>   -    RPM_ARRAY_RETURN_TYPE	= 0x00020000,
>   -    RPM_MAPPING_RETURN_TYPE	= 0x00040000,
>   -    RPM_MASK_RETURN_TYPE	= 0xffff0000
>   -} rpmTagReturnType;
>   -/*@=enummemuse =typeuse @*/
>   -
>   -/**
>   - * Header private tags.
>   - * @note General use tags should start at 1000 (RPM's tag space  
> starts there).
>   - */
>   -#define	HEADER_IMAGE		61
>   -#define	HEADER_SIGNATURES	62
>   -#define	HEADER_IMMUTABLE	63
>   -#define	HEADER_REGIONS		64
>   -#define HEADER_I18NTABLE	100
>   -#define	HEADER_SIGBASE		256
>   -#define	HEADER_TAGBASE		1000
>   -
>   -/**
>     * Prototype for headerFreeData() vector.
>     *
>     * @param data		address of data (or NULL)
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmdb/rpmtag.h
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.4 -r1.5 rpmtag.h
>   --- rpm/rpmdb/rpmtag.h	14 Nov 2007 21:13:18 -0000	1.4
>   +++ rpm/rpmdb/rpmtag.h	22 Nov 2007 22:28:17 -0000	1.5
>   @@ -1,8 +1,6 @@
>    #ifndef H_RPMTAG
>    #define	H_RPMTAG
>
>   -#include <header.h>
>   -
>    /** \ingroup header
>     * \file rpmdb/rpmtag.h
>     */
>   @@ -11,6 +9,142 @@
>    extern "C" {
>    #endif
>
>   +/** \ingroup header
>   + */
>   +typedef const char *	errmsg_t;
>   +
>   +/** \ingroup header
>   + */
>   +typedef /*@abstract@*/ /*@refcounted@*/ struct headerToken_s *  
> Header;
>   +
>   +/** \ingroup header
>   + * The basic types of data in tags from headers.
>   + */
>   +enum rpmTagType_e {
>   +    	/* RPM_NULL_TYPE =  0	- never been used. */
>   +	/* RPM_CHAR_TYPE =  1	- never been used, same as  
> RPM_UINT8_TYPE. */
>   +    RPM_UINT8_TYPE		=  2,
>   +    RPM_UINT16_TYPE		=  3,
>   +    RPM_UINT32_TYPE		=  4,
>   +    RPM_UINT64_TYPE		=  5,
>   +    RPM_STRING_TYPE		=  6,
>   +    RPM_BIN_TYPE		=  7,
>   +    RPM_STRING_ARRAY_TYPE	=  8,
>   +    RPM_I18NSTRING_TYPE		=  9
>   +	/* RPM_ASN1_TYPE = 10	- never been used. */
>   +	/* RPM_OPENPGP_TYPE= 11	- never been used. */
>   +};
>   +#define	RPM_MIN_TYPE		2
>   +#define	RPM_MAX_TYPE		9
>   +#define	RPM_MASK_TYPE		0x0000ffff
>   +
>   +/** \ingroup header
>   + */
>   +typedef enum rpmTagType_e rpmTagType;
>   +
>   +/** \ingroup header
>   + */
>   +typedef union rpmDataType_u rpmTagData;
>   +
>   +/** \ingroup header
>   + */
>   +typedef uint32_t rpmTagCount;
>   +
>   +/** \ingroup header
>   + */
>   +typedef struct _HE_s * HE_t;		/* tag container. */
>   +
>   +/** \ingroup header
>   + */
>   +/*@-typeuse -fielduse@*/
>   +#if !defined(SWIG)
>   +union rpmDataType_u {
>   +/*@null@*/
>   +    void * ptr;
>   +    uint8_t * ui8p;		/*!< RPM_INT8_TYPE | RPM_CHAR_TYPE */
>   +    uint16_t * ui16p;		/*!< RPM_INT16_TYPE */
>   +    uint32_t * ui32p;		/*!< RPM_INT32_TYPE */
>   +    uint64_t * ui64p;		/*!< RPM_INT64_TYPE */
>   +    const char * str;		/*!< RPM_STRING_TYPE */
>   +    unsigned char * blob;	/*!< RPM_BIN_TYPE */
>   +    const char ** argv;		/*!< RPM_STRING_ARRAY_TYPE */
>   +    HE_t * he;
>   +};
>   +#endif
>   +/*@=typeuse =fielduse@*/
>   +
>   +/** \ingroup header
>   + */
>   +typedef uint32_t *	hTAG_t;
>   +typedef rpmTagData *	hPTR_t;
>   +
>   +/** \ingroup header
>   + */
>   +/*@-typeuse -fielduse@*/
>   +#if !defined(SWIG)
>   +struct _HE_s {
>   +    uint32_t tag;
>   +    rpmTagType t;
>   +/*@owned@*/ /*@null@*/
>   +    rpmTagData p;
>   +    rpmTagCount c;
>   +    int ix;
>   +    unsigned int freeData	: 1;
>   +    unsigned int avail		: 1;
>   +    unsigned int append		: 1;
>   +    unsigned int signature	: 1;
>   +};
>   +typedef struct _HE_s HE_s;
>   +#endif
>   +
>   +/*@=typeuse =fielduse@*/
>   +/** \ingroup header
>   + */
>   +/*@-enummemuse -typeuse @*/
>   +typedef enum rpmSubTagType_e {
>   +    RPM_REGION_TYPE		= -10,
>   +    RPM_BIN_ARRAY_TYPE		= -11,
>   +    RPM_XREF_TYPE		= -12
>   +} rpmSubTagType;
>   +/*@=enummemuse =typeuse @*/
>   +
>   +/** \ingroup header
>   + * Identify how to return the header data type.
>   + */
>   +/*@-enummemuse -typeuse @*/
>   +typedef enum rpmTagReturnType_e {
>   +    RPM_ANY_RETURN_TYPE		= 0,
>   +    RPM_SCALAR_RETURN_TYPE	= 0x00010000,
>   +    RPM_ARRAY_RETURN_TYPE	= 0x00020000,
>   +    RPM_MAPPING_RETURN_TYPE	= 0x00040000,
>   +    RPM_MASK_RETURN_TYPE	= 0xffff0000
>   +} rpmTagReturnType;
>   +/*@=enummemuse =typeuse @*/
>   +
>   +/**
>   + * Header private tags.
>   + * @note General use tags should start at 1000 (RPM's tag space  
> starts there).
>   + */
>   +#define	HEADER_IMAGE		61
>   +#define	HEADER_SIGNATURES	62
>   +#define	HEADER_IMMUTABLE	63
>   +#define	HEADER_REGIONS		64
>   +#define HEADER_I18NTABLE	100
>   +#define	HEADER_SIGBASE		256
>   +#define	HEADER_TAGBASE		1000
>   +
>   +/** \ingroup header
>   + */
>   +typedef /*@abstract@*/ struct headerIterator_s * HeaderIterator;
>   +
>   +/** \ingroup header
>   + */
>   +typedef /*@abstract@*/ struct headerTagIndices_s *  
> headerTagIndices;
>   +
>   +/** \ingroup header
>   + */
>   +typedef /*@abstract@*/ struct headerSprintfExtension_s *  
> headerSprintfExtension;
>   +
>    /**
>     * Automatically generated table of tag name/value pairs.
>     */
>   @@ -327,6 +461,40 @@
>        RPMSIGTAG_RSA	= RPMTAG_RSAHEADER	/*!< internal RSA header  
> signature. */
>    };
>
>   +/** \ingroup header
>   + */
>   +typedef enum rpmTag_e rpmTag;
>   +
>   +/**
>   + */
>   +typedef /*@abstract@*/ struct headerTagTableEntry_s *  
> headerTagTableEntry;
>   +
>   +/**
>   + */
>   +#if !defined(SWIG)
>   +struct headerTagIndices_s {
>   +    int (*loadIndex) (headerTagTableEntry ** ipp, int * np,
>   +                int (*cmp) (const void * avp, const void * bvp))
>   +        /*@ modifies *ipp, *np */;	/*!< load sorted tag index. */
>   +/*@relnull@*/
>   +    headerTagTableEntry * byName;	/*!< header tags sorted by  
> name. */
>   +    int byNameSize;			/*!< no. of entries. */
>   +    int (*byNameCmp) (const void * avp, const void * bvp)
>   +        /*@*/;				/*!< compare entries by name. */
>   +    uint32_t (*tagValue) (const char * name)
>   +	/*@*/;				/* return value from name. */
>   +/*@relnull@*/
>   +    headerTagTableEntry * byValue;	/*!< header tags sorted by  
> value. */
>   +    int byValueSize;			/*!< no. of entries. */
>   +    int (*byValueCmp) (const void * avp, const void * bvp)
>   +        /*@*/;				/*!< compare entries by value. */
>   +    const char * (*tagName) (uint32_t value)
>   +	/*@*/;				/* Return name from value. */
>   +    uint32_t (*tagType) (uint32_t value)
>   +	/*@*/;				/* Return type from value. */
>   +};
>   +#endif
>   +
>    #if !defined(SWIG)
>    /**
>     * Return tag name from value.
>   @@ -374,6 +542,69 @@
>
>    #endif
>
>   +/** \ingroup header
>   + */
>   +enum headerSprintfExtensionType {
>   +    HEADER_EXT_LAST = 0,	/*!< End of extension chain. */
>   +    HEADER_EXT_FORMAT,		/*!< headerTagFormatFunction() extension */
>   +    HEADER_EXT_MORE,		/*!< Chain to next table. */
>   +    HEADER_EXT_TAG		/*!< headerTagTagFunction() extension */
>   +};
>   +
>   +/** \ingroup header
>   + * HEADER_EXT_TAG format function prototype.
>   + *
>   + * @param he		tag container
>   + * @return		formatted string
>   + */
>   +typedef /*only@*/ char * (*headerTagFormatFunction) (HE_t he)
>   +	/*@modifies he @*/;
>   +
>   +/** \ingroup header
>   + * HEADER_EXT_FORMAT format function prototype.
>   + * This is allowed to fail, which indicates the tag doesn't exist.
>   + *
>   + * @param h		header
>   + * @retval he		tag container
>   + * @return		0 on success
>   + */
>   +typedef int (*headerTagTagFunction) (Header h, HE_t he)
>   +	/*@modifies he @*/;
>   +
>   +/** \ingroup header
>   + * Define header tag output formats.
>   + */
>   +#if !defined(SWIG)
>   +struct headerSprintfExtension_s {
>   +    enum headerSprintfExtensionType type;	/*!< Type of  
> extension. */
>   +/*@observer@*/ /*@null@*/
>   +    const char * name;				/*!< Name of extension. */
>   +    union {
>   +/*@observer@*/ /*@null@*/
>   +	void * generic;				/*!< Private extension. */
>   +	headerTagFormatFunction fmtFunction; /*!< HEADER_EXT_TAG  
> extension. */
>   +	headerTagTagFunction tagFunction; /*!< HEADER_EXT_FORMAT  
> extension. */
>   +	struct headerSprintfExtension_s * more;	/*!< Chained table  
> extension. */
>   +    } u;
>   +};
>   +#endif
>   +
>   +/** \ingroup header
>   + * Supported default header tag output formats.
>   + */
>   +/*@-redecl@*/
>   +/*@observer@*/
>   +extern const struct headerSprintfExtension_s headerDefaultFormats 
> [];
>   +/*@=redecl@*/
>   +
>   +/** \ingroup header
>   + * Supported default header extension/tag output formats.
>   + */
>   +/*@-redecl@*/
>   +/*@observer@*/
>   +extern const struct headerSprintfExtension_s  
> headerCompoundFormats[];
>   +/*@=redecl@*/
>   +
>    #ifdef __cplusplus
>    }
>    #endif
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmdb/tagname.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.13 -r1.14 tagname.c
>   --- rpm/rpmdb/tagname.c	17 Nov 2007 16:56:21 -0000	1.13
>   +++ rpm/rpmdb/tagname.c	22 Nov 2007 22:28:17 -0000	1.14
>   @@ -4,7 +4,7 @@
>
>    #include "system.h"
>
>   -#include <rpmtag.h>
>   +#include <header.h>
>    #include <rpmio.h>
>    #include "debug.h"
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/tools/rpmcache.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.23 -r2.24 rpmcache.c
>   --- rpm/tools/rpmcache.c	22 Nov 2007 18:50:28 -0000	2.23
>   +++ rpm/tools/rpmcache.c	22 Nov 2007 22:28:18 -0000	2.24
>   @@ -9,6 +9,7 @@
>    #include <fts.h>
>
>    #include <rpmio.h>
>   +#include <header.h>
>    #include <rpmcli.h>
>
>    #define	_RPMGI_INTERNAL
>   @@ .
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> CVS Sources Repository                                rpm-cvs@rpm5.org
Received on Thu Nov 22 23:50:25 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.