RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/build/ files.c pack.c parsePreamble.c pars...

From: Jeff Johnson <jbj@rpm5.org>
Date: Mon 15 Oct 2007 - 00:54:01 CEST
Message-Id: <20071014225401.C6D20348477@rpm5.org>
  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:   15-Oct-2007 00:54:01
  Branch: HEAD                             Handle: 2007101423535604

  Modified files:
    rpm                     CHANGES
    rpm/build               files.c pack.c parsePreamble.c parseSpec.c
                            reqprov.c
    rpm/lib                 depends.c formats.c package.c psm.c rpmchecksig.c
                            rpmds.c rpmfc.c rpmfi.c rpminstall.c rpmrollback.c
                            rpmte.c rpmts.c transaction.c
    rpm/rpmdb               fprint.c hdrNVR.c hdrfmt.c header.c header.h
                            header_internal.c header_internal.h pkgio.c
                            rpmdb.c signature.c

  Log:
    - for now, revert to headerGetEntry where needed, avoid recursions.
    - drill HE_t down through the header extension tags.
    - drill rpmTagType everywhere.

  Summary:
    Revision    Changes     Path
    1.1707      +3  -0      rpm/CHANGES
    1.271       +7  -5      rpm/build/files.c
    2.235       +4  -4      rpm/build/pack.c
    2.133       +3  -3      rpm/build/parsePreamble.c
    2.106       +1  -1      rpm/build/parseSpec.c
    1.71        +1  -1      rpm/build/reqprov.c
    1.348       +3  -3      rpm/lib/depends.c
    2.111       +78 -132    rpm/lib/formats.c
    2.172       +1  -1      rpm/lib/package.c
    2.242       +13 -11     rpm/lib/psm.c
    1.156       +8  -6      rpm/lib/rpmchecksig.c
    2.71        +3  -3      rpm/lib/rpmds.c
    1.23        +1  -1      rpm/lib/rpmfc.c
    2.86        +2  -2      rpm/lib/rpmfi.c
    1.173       +1  -1      rpm/lib/rpminstall.c
    1.18        +3  -3      rpm/lib/rpmrollback.c
    2.58        +3  -3      rpm/lib/rpmte.c
    2.109       +1  -1      rpm/lib/rpmts.c
    1.342       +3  -3      rpm/lib/transaction.c
    1.17        +1  -1      rpm/rpmdb/fprint.c
    1.14        +19 -11     rpm/rpmdb/hdrNVR.c
    1.8         +170 -252   rpm/rpmdb/hdrfmt.c
    1.76        +21 -10     rpm/rpmdb/header.c
    1.32        +53 -55     rpm/rpmdb/header.h
    1.10        +2  -1      rpm/rpmdb/header_internal.c
    1.21        +1  -1      rpm/rpmdb/header_internal.h
    1.17        +2  -2      rpm/rpmdb/pkgio.c
    1.181       +6  -6      rpm/rpmdb/rpmdb.c
    1.8         +1  -1      rpm/rpmdb/signature.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1706 -r1.1707 CHANGES
  --- rpm/CHANGES	14 Oct 2007 19:26:01 -0000	1.1706
  +++ rpm/CHANGES	14 Oct 2007 22:53:56 -0000	1.1707
  @@ -1,4 +1,7 @@
   4.5 -> 5.0:
  +    - jbj: for now, revert to headerGetEntry where needed, avoid recursions.
  +    - jbj: drill HE_t down through the header extension tags.
  +    - jbj: drill rpmTagType everywhere.
       - jbj: move rpmTag typedef and HGE_t et al protos to header.h.
       - jbj: lose the rpmfi hge/hae/hme/hre/hfd vectors.
       - jbj: yet more hge fixups.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/files.c
  ============================================================================
  $ cvs diff -u -r1.270 -r1.271 files.c
  --- rpm/build/files.c	14 Oct 2007 17:47:22 -0000	1.270
  +++ rpm/build/files.c	14 Oct 2007 22:53:56 -0000	1.271
  @@ -271,7 +271,7 @@
   	/*@modifies internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1170,7 +1170,7 @@
   	/*@modifies h @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -2155,7 +2155,7 @@
   		rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -2439,7 +2439,9 @@
   int initSourceHeader(Spec spec, StringBuf *sfp)
   {
       HeaderIterator hi;
  -    int_32 tag, type, count;
  +    int_32 tag;
  +    rpmTagType type;
  +    int_32 count;
       const void * ptr;
       StringBuf sourceFiles;
       struct Source *srcPtr;
  @@ -2683,7 +2685,7 @@
   	/*@modifies check_fileList @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/pack.c
  ============================================================================
  $ cvs diff -u -r2.234 -r2.235 pack.c
  --- rpm/build/pack.c	14 Oct 2007 18:08:19 -0000	2.234
  +++ rpm/build/pack.c	14 Oct 2007 22:53:56 -0000	2.235
  @@ -174,7 +174,7 @@
   	/*@modifies h, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -440,7 +440,7 @@
   void providePackageNVR(Header h)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -819,7 +819,7 @@
   
       /* XXX Fish the pkgid out of the signature header. */
       if (sigh != NULL && pkgidp != NULL) {
  -	int_32 tagType;
  +	rpmTagType tagType;
   	unsigned char * MD5 = NULL;
   	int_32 c;
   	int xx;
  @@ -863,7 +863,7 @@
   int packageBinaries(Spec spec)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/parsePreamble.c
  ============================================================================
  $ cvs diff -u -r2.132 -r2.133 parsePreamble.c
  --- rpm/build/parsePreamble.c	14 Oct 2007 18:21:56 -0000	2.132
  +++ rpm/build/parsePreamble.c	14 Oct 2007 22:53:56 -0000	2.133
  @@ -212,7 +212,7 @@
   	/*@*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -443,7 +443,7 @@
   spectag stashSt(Spec spec, Header h, int tag, const char * lang)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -504,7 +504,7 @@
   		rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/parseSpec.c
  ============================================================================
  $ cvs diff -u -r2.105 -r2.106 parseSpec.c
  --- rpm/build/parseSpec.c	14 Oct 2007 00:36:21 -0000	2.105
  +++ rpm/build/parseSpec.c	14 Oct 2007 22:53:56 -0000	2.106
  @@ -435,7 +435,7 @@
   		const char *cookie, int anyarch, int force, int verify)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/reqprov.c
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 reqprov.c
  --- rpm/build/reqprov.c	14 Oct 2007 18:29:10 -0000	1.70
  +++ rpm/build/reqprov.c	14 Oct 2007 22:53:56 -0000	1.71
  @@ -15,7 +15,7 @@
   		int index)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/depends.c
  ============================================================================
  $ cvs diff -u -r1.347 -r1.348 depends.c
  --- rpm/lib/depends.c	14 Oct 2007 15:24:49 -0000	1.347
  +++ rpm/lib/depends.c	14 Oct 2007 22:53:57 -0000	1.348
  @@ -151,7 +151,7 @@
   	/*@*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -195,7 +195,7 @@
   			fnpyKey key, int upgrade, rpmRelocation relocs)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1316,7 +1316,7 @@
   	/*@modifies ts, mi, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/formats.c
  ============================================================================
  $ cvs diff -u -r2.110 -r2.111 formats.c
  --- rpm/lib/formats.c	12 Oct 2007 18:55:57 -0000	2.110
  +++ rpm/lib/formats.c	14 Oct 2007 22:53:57 -0000	2.111
  @@ -23,29 +23,21 @@
   /**
    * Retrieve mounted file system paths.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int fsnamesTag( /*@unused@*/ Header h, /*@out@*/ int_32 * type,
  -		/*@out@*/ void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int fsnamesTag( /*@unused@*/ Header h, HE_t he)
   	/*@globals fileSystem, internalState @*/
  -	/*@modifies *type, *data, *count, *freeData,
  -		fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +	/*@modifies he, fileSystem, internalState @*/
   {
       const char ** list;
   
  -    if (rpmGetFilesystemList(&list, count))
  +    if (rpmGetFilesystemList(&list, he->c))
   	return 1;
   
  -    if (type) *type = RPM_STRING_ARRAY_TYPE;
  -    if (data) *((const char ***) data) = list;
  -    if (freeData) *freeData = 0;
  +    if (he->t) *he->t = RPM_STRING_ARRAY_TYPE;
  +    if (he->p) (*he->p).argv = list;
  +    he->freeData = 0;
   
       return 0;
   }
  @@ -53,21 +45,14 @@
   /**
    * Retrieve mounted file system space.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int fssizesTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int fssizesTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno,
   		fileSystem, internalState @*/
  -	/*@modifies *type, *data, *count, *freeData, rpmGlobalMacroContext,
  +	/*@modifies he, rpmGlobalMacroContext,
   		fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
       hRET_t fnames = { .ptr = NULL };
  @@ -84,19 +69,19 @@
   	fnames.argv = _free(fnames.argv);
       }
   
  -    if (rpmGetFilesystemList(NULL, count))
  +    if (rpmGetFilesystemList(NULL, he->c))
   	goto exit;
   
  -    *type = RPM_INT64_TYPE;
  -    *freeData = 1;
  +    *he->t = RPM_INT64_TYPE;
  +    he->freeData = 1;
   
       if (fnames.ptr == NULL)
  -	usages = xcalloc((*count), sizeof(*usages));
  +	usages = xcalloc((*he->c), sizeof(*usages));
       else
       if (rpmGetFilesystemUsage(fnames.argv, fsizes.ui32p, numFiles, &usages, 0))	
   	goto exit;
   
  -    *data = usages;
  +    if (he->p) (*he->p).ui64p = usages;
       rc = 0;
   
   exit:
  @@ -109,164 +94,115 @@
   /**
    * Retrieve file classes.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int fileclassTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int fileclassTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildFClasses(h, (const char ***) data, count);
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildFClasses(h, &(*he->p).argv, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
   /**
    * Retrieve file contexts from header.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int filecontextsTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int filecontextsTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildFContexts(h, (const char ***) data, count);
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildFContexts(h, &(*he->p).argv, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
   /**
    * Retrieve file contexts from file system.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int fscontextsTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int fscontextsTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildFSContexts(h, (const char ***) data, count);
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildFSContexts(h, &(*he->p).argv, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
   /**
    * Retrieve file contexts from policy RE's.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int recontextsTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int recontextsTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildREContexts(h, (const char ***) data, count);
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildREContexts(h, &(*he->p).argv, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
   /**
    * Retrieve file provides.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int fileprovideTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int fileprovideTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildFDeps(h, RPMTAG_PROVIDENAME, (const char ***) data, count);
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildFDeps(h, RPMTAG_PROVIDENAME, &(*he->p).argv, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
   /**
    * Retrieve file requires.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int filerequireTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int filerequireTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildFDeps(h, RPMTAG_REQUIRENAME, (const char ***) data, count);
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildFDeps(h, RPMTAG_REQUIRENAME, &(*he->p).argv, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
   /**
    * Retrieve Requires(missingok): array for Suggests: or Enhances:.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int missingokTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int missingokTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData,
  +	/*@modifies h, he,
   		rpmGlobalMacroContext, fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
       rpmds ds = rpmdsNew(h, RPMTAG_REQUIRENAME, 0);
       ARGV_t av = NULL;
  @@ -307,25 +243,35 @@
   
       /* XXX perhaps return "(none)" inband if no suggests/enhances <shrug>. */
   
  -    *type = RPM_STRING_ARRAY_TYPE;
  -    *data = argv;
  -    *count = argc;
  -    *freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    (*he->p).argv = argv;
  +    *he->c = argc;
  +    he->freeData = 1;
       return 0;
   }
   
   /*@-type@*/ /* FIX: cast? */
   const struct headerSprintfExtension_s rpmHeaderFormats[] = {
  -    { HEADER_EXT_TAG, "RPMTAG_ENHANCES",	{ missingokTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FILECLASS",	{ fileclassTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FILECONTEXTS",	{ filecontextsTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FILEPROVIDE",	{ fileprovideTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FILEREQUIRE",	{ filerequireTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FSCONTEXTS",	{ fscontextsTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FSNAMES",		{ fsnamesTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FSSIZES",		{ fssizesTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_RECONTEXTS",	{ recontextsTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_SUGGESTS",	{ missingokTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_ENHANCES",
  +	{ .tagFunction = missingokTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FILECLASS",
  +	{ .tagFunction = fileclassTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FILECONTEXTS",
  +	{ .tagFunction = filecontextsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FILEPROVIDE",
  +	{ .tagFunction = fileprovideTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FILEREQUIRE",
  +	{ .tagFunction = filerequireTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FSCONTEXTS",
  +	{ .tagFunction = fscontextsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FSNAMES",	
  +	{ .tagFunction = fsnamesTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FSSIZES",
  +	{ .tagFunction = fssizesTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_RECONTEXTS",
  +	{ .tagFunction = recontextsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_SUGGESTS",
  +	{ .tagFunction = missingokTag } },
       { HEADER_EXT_MORE, NULL,		{ (void *) headerCompoundFormats } }
   } ;
   /*@=type@*/
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/package.c
  ============================================================================
  $ cvs diff -u -r2.171 -r2.172 package.c
  --- rpm/lib/package.c	14 Oct 2007 16:07:15 -0000	2.171
  +++ rpm/lib/package.c	14 Oct 2007 22:53:57 -0000	2.172
  @@ -185,7 +185,7 @@
   rpmRC rpmReadPackageFile(rpmts ts, void * _fd, const char * fn, Header * hdrp)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/psm.c
  ============================================================================
  $ cvs diff -u -r2.241 -r2.242 psm.c
  --- rpm/lib/psm.c	14 Oct 2007 19:05:37 -0000	2.241
  +++ rpm/lib/psm.c	14 Oct 2007 22:53:57 -0000	2.242
  @@ -56,7 +56,7 @@
   int rpmVersionCompare(Header first, Header second)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -189,7 +189,7 @@
   		const char ** specFilePtr, const char ** cookie)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -499,7 +499,7 @@
   	/*@modifies psm, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -636,7 +636,7 @@
   		fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -967,7 +967,7 @@
   	/*@modifies psm, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1033,7 +1033,7 @@
   {
       int scareMem = 0;
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1187,7 +1187,7 @@
   		fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1375,7 +1375,7 @@
   	/*@*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1401,7 +1401,7 @@
   	/*@modifies th @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1596,7 +1596,7 @@
   rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1854,7 +1854,9 @@
   		    uh = he_p.ptr;
   		    if (xx && uh != NULL) {
   			HeaderIterator hi;
  -			int_32 tag, type, count;
  +			int_32 tag;
  +			rpmTagType type;
  +			int_32 count;
   			hPTR_t ptr;
   			Header oh;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmchecksig.c
  ============================================================================
  $ cvs diff -u -r1.155 -r1.156 rpmchecksig.c
  --- rpm/lib/rpmchecksig.c	14 Oct 2007 19:05:38 -0000	1.155
  +++ rpm/lib/rpmchecksig.c	14 Oct 2007 22:53:57 -0000	1.156
  @@ -143,7 +143,7 @@
   	/*@modifies *signid, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -182,7 +182,7 @@
                   fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -274,7 +274,9 @@
   	xx = hge(sigh, he->tag, he->t, he->p, he->c);
   	if (xx) {
   	    HeaderIterator hi;
  -	    int_32 htag, type, count;
  +	    int_32 htag;
  +	    rpmTagType type;
  +	    int_32 count;
   	    hPTR_t ptr;
   	    Header oh;
   	    Header nh;
  @@ -675,7 +677,7 @@
   	/*@modifies fd, *dig, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -766,7 +768,7 @@
   		const char * fn)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -777,7 +779,7 @@
       char missingKeys[7164], * m;
       char untrustedKeys[7164], * u;
       int_32 sigtag;
  -    int_32 sigtype;
  +    rpmTagType sigtype;
       const void * sig;
       pgpDig dig;
       pgpDigParams sigp;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmds.c
  ============================================================================
  $ cvs diff -u -r2.70 -r2.71 rpmds.c
  --- rpm/lib/rpmds.c	14 Oct 2007 17:15:39 -0000	2.70
  +++ rpm/lib/rpmds.c	14 Oct 2007 22:53:57 -0000	2.71
  @@ -236,7 +236,7 @@
   {
       int scareMem = (flags & 0x1);
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -477,7 +477,7 @@
   rpmds rpmdsThis(Header h, rpmTag tagN, int_32 Flags)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -3717,7 +3717,7 @@
   int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfc.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rpmfc.c
  --- rpm/lib/rpmfc.c	13 Oct 2007 21:28:52 -0000	1.22
  +++ rpm/lib/rpmfc.c	14 Oct 2007 22:53:57 -0000	1.23
  @@ -1322,7 +1322,7 @@
           /*@modifies rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfi.c
  ============================================================================
  $ cvs diff -u -r2.85 -r2.86 rpmfi.c
  --- rpm/lib/rpmfi.c	14 Oct 2007 19:05:38 -0000	2.85
  +++ rpm/lib/rpmfi.c	14 Oct 2007 22:53:57 -0000	2.86
  @@ -686,7 +686,7 @@
   {
       rpmte p = rpmtsRelocateElement(ts);
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1259,7 +1259,7 @@
   {
       int scareMem = (flags & 0x1);
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpminstall.c
  ============================================================================
  $ cvs diff -u -r1.172 -r1.173 rpminstall.c
  --- rpm/lib/rpminstall.c	13 Oct 2007 21:28:52 -0000	1.172
  +++ rpm/lib/rpminstall.c	14 Oct 2007 22:53:57 -0000	1.173
  @@ -307,7 +307,7 @@
   int rpmcliInstall(rpmts ts, QVA_t ia, const char ** argv)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmrollback.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rpmrollback.c
  --- rpm/lib/rpmrollback.c	14 Oct 2007 00:58:15 -0000	1.17
  +++ rpm/lib/rpmrollback.c	14 Oct 2007 22:53:57 -0000	1.18
  @@ -91,7 +91,7 @@
   IDTX IDTXload(rpmts ts, rpmTag tag, uint_32 rbtid)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -145,7 +145,7 @@
   IDTX IDTXglob(rpmts ts, const char * globstr, rpmTag tag, uint_32 rbtid)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -295,7 +295,7 @@
   	/*@modifies ts, p, ip, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmte.c
  ============================================================================
  $ cvs diff -u -r2.57 -r2.58 rpmte.c
  --- rpm/lib/rpmte.c	14 Oct 2007 15:15:14 -0000	2.57
  +++ rpm/lib/rpmte.c	14 Oct 2007 22:53:57 -0000	2.58
  @@ -96,7 +96,7 @@
   {
       int scareMem = 0;
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -219,7 +219,7 @@
   		alKey pkgKey)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -607,7 +607,7 @@
   int rpmteChain(rpmte p, rpmte q, Header oh, const char * msg)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmts.c
  ============================================================================
  $ cvs diff -u -r2.108 -r2.109 rpmts.c
  --- rpm/lib/rpmts.c	13 Oct 2007 20:42:06 -0000	2.108
  +++ rpm/lib/rpmts.c	14 Oct 2007 22:53:57 -0000	2.109
  @@ -305,7 +305,7 @@
   int rpmtsSolve(rpmts ts, rpmds ds, /*@unused@*/ const void * data)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/transaction.c
  ============================================================================
  $ cvs diff -u -r1.341 -r1.342 transaction.c
  --- rpm/lib/transaction.c	14 Oct 2007 17:22:19 -0000	1.341
  +++ rpm/lib/transaction.c	14 Oct 2007 22:53:57 -0000	1.342
  @@ -101,7 +101,7 @@
   	/*@modifies ts, p, fi, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -251,7 +251,7 @@
   	/*@modifies ts, fi, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -619,7 +619,7 @@
   	/*@modifies ts @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/fprint.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 fprint.c
  --- rpm/rpmdb/fprint.c	13 Oct 2007 00:27:17 -0000	1.16
  +++ rpm/rpmdb/fprint.c	14 Oct 2007 22:54:00 -0000	1.17
  @@ -249,7 +249,7 @@
   	/*@modifies h, cache, *fpList @*/;
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrNVR.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 hdrNVR.c
  --- rpm/rpmdb/hdrNVR.c	13 Oct 2007 09:23:20 -0000	1.13
  +++ rpm/rpmdb/hdrNVR.c	14 Oct 2007 22:54:00 -0000	1.14
  @@ -36,7 +36,7 @@
   	/*@modifies rpmGlobalMacroContext @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -92,7 +92,7 @@
   	/*@modifies rpmGlobalMacroContext @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -145,22 +145,21 @@
   		/*@unused@*/ const char **ep, const char **vp, const char **rp,
   		const char **ap)
   {
  -    HGE_t hge = (HGE_t)headerGetEntry;
  -    int type;
  +    rpmTagType type;
       int count;
   
       if (np) {
  -	if (!(hge(h, RPMTAG_NAME, &type, np, &count)
  +	if (!(headerGetEntry(h, RPMTAG_NAME, &type, np, &count)
   	    && type == RPM_STRING_TYPE && count == 1))
   		*np = NULL;
       }
       if (vp) {
  -	if (!(hge(h, RPMTAG_VERSION, &type, vp, &count)
  +	if (!(headerGetEntry(h, RPMTAG_VERSION, &type, vp, &count)
   	    && type == RPM_STRING_TYPE && count == 1))
   		*vp = NULL;
       }
       if (rp) {
  -	if (!(hge(h, RPMTAG_RELEASE, &type, rp, &count)
  +	if (!(headerGetEntry(h, RPMTAG_RELEASE, &type, rp, &count)
   	    && type == RPM_STRING_TYPE && count == 1))
   		*rp = NULL;
       }
  @@ -173,7 +172,7 @@
   	    *ap = "src";
   /*@=observertrans =readonlytrans@*/
   	else
  -	if (!(hge(h, RPMTAG_ARCH, &type, ap, &count)
  +	if (!(headerGetEntry(h, RPMTAG_ARCH, &type, ap, &count)
   	    && type == RPM_STRING_TYPE && count == 1))
   		*ap = NULL;
       }
  @@ -183,7 +182,7 @@
   uint_32 hGetColor(Header h)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -208,7 +207,9 @@
   {
       HFD_t hfd = (HFD_t) headerFreeData;
       HeaderIterator hi;
  -    int_32 tag, type, count;
  +    int_32 tag;
  +    rpmTagType type;
  +    int_32 count;
       const void * ptr;
       int xx;
   
  @@ -266,6 +267,9 @@
   	    if (count < 0 || hdrchkData(count))
   		continue;
   	    switch(type) {
  +	    case RPM_MASK_TYPE:
  +	    case RPM_OPENPGP_TYPE:
  +	    case RPM_ASN1_TYPE:
   	    case RPM_NULL_TYPE:
   		continue;
   		/*@notreached@*/ /*@switchbreak@*/ break;
  @@ -273,6 +277,7 @@
   	    case RPM_INT8_TYPE:
   	    case RPM_INT16_TYPE:
   	    case RPM_INT32_TYPE:
  +	    case RPM_INT64_TYPE:
   		if (count != 1)
   		    continue;
   		/*@switchbreak@*/ break;
  @@ -297,7 +302,10 @@
       HFD_t hfd = (HFD_t) headerFreeData;
       Header sigh = headerNew();
       HeaderIterator hi;
  -    int_32 tag, stag, type, count;
  +    int_32 stag;
  +    int_32 tag;
  +    rpmTagType type;
  +    int_32 count;
       const void * ptr;
       int xx;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c	30 Sep 2007 17:29:05 -0000	1.7
  +++ rpm/rpmdb/hdrfmt.c	14 Oct 2007 22:54:00 -0000	1.8
  @@ -833,58 +833,40 @@
   /**
    * Retrieve install prefixes.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int instprefixTag(Header h, /*@null@*/ /*@out@*/ rpmTagType * type,
  -		/*@null@*/ /*@out@*/ const void ** data,
  -		/*@null@*/ /*@out@*/ int_32 * count,
  -		/*@null@*/ /*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +static int instprefixTag(Header h, HE_t he)
  +	/*@modifies he @*/
   {
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
  -    HFD_t hfd = headerFreeData;
       rpmTagType ipt;
       char ** array;
   
  -    if (hge(h, RPMTAG_INSTALLPREFIX, type, data, count)) {
  -	if (freeData) *freeData = 0;
  +    he->tag = RPMTAG_INSTALLPREFIX;
  +    if (headerGetEntry(h, RPMTAG_INSTALLPREFIX, he->t, he->p, he->c)) {
  +	he->freeData = 0;
   	return 0;
  -    } else if (hge(h, RPMTAG_INSTPREFIXES, &ipt, &array, count)) {
  -	if (type) *type = RPM_STRING_TYPE;
  -	if (data) *data = xstrdup(array[0]);
  -	if (freeData) *freeData = 1;
  -	array = hfd(array, ipt);
  +    }
  +    he->tag = RPMTAG_INSTPREFIXES;
  +    if (headerGetEntry(h, he->tag, &ipt, &array, he->c)) {
  +	if (he->t) *he->t = RPM_STRING_TYPE;
  +	if (he->p) (*he->p).str = xstrdup(array[0]);
  +	he->freeData = 1;
  +	array = headerFreeData(array, ipt);
   	return 0;
       }
  -
       return 1;
   }
   
   /**
    * Retrieve trigger info.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int triggercondsTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  -{
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
  -    HFD_t hfd = headerFreeData;
  -    rpmTagType tnt, tvt, tst;
  +static int triggercondsTag(Header h, HE_t he)
  +	/*@modifies he @*/
  +{
       int_32 * indices, * flags;
       char ** names, ** versions;
       int numNames, numScripts;
  @@ -894,21 +876,21 @@
       int i, j, xx;
       char buf[5];
   
  -    if (!hge(h, RPMTAG_TRIGGERNAME, &tnt, &names, &numNames)) {
  -	*freeData = 0;
  +    he->freeData = 0;
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERNAME, NULL, &names, &numNames);
  +    if (!xx)
   	return 0;
  -    }
   
  -    xx = hge(h, RPMTAG_TRIGGERINDEX, NULL, &indices, NULL);
  -    xx = hge(h, RPMTAG_TRIGGERFLAGS, NULL, &flags, NULL);
  -    xx = hge(h, RPMTAG_TRIGGERVERSION, &tvt, &versions, NULL);
  -    xx = hge(h, RPMTAG_TRIGGERSCRIPTS, &tst, &s, &numScripts);
  -    s = hfd(s, tst);
  -
  -    *freeData = 1;
  -    *data = conds = xmalloc(sizeof(*conds) * numScripts);
  -    *count = numScripts;
  -    *type = RPM_STRING_ARRAY_TYPE;
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERINDEX, NULL, &indices, NULL);
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERFLAGS, NULL, &flags, NULL);
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERVERSION, NULL, &versions, NULL);
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERSCRIPTS, NULL, &s, &numScripts);
  +    s = headerFreeData(s, -1);
  +
  +    he->freeData = 1;
  +    (*he->p).ptr = conds = xmalloc(sizeof(*conds) * numScripts);
  +    *he->c = numScripts;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
       for (i = 0; i < numScripts; i++) {
   	chptr = xstrdup("");
   
  @@ -935,8 +917,8 @@
   	conds[i] = chptr;
       }
   
  -    names = hfd(names, tnt);
  -    versions = hfd(versions, tvt);
  +    names = headerFreeData(names, -1);
  +    versions = headerFreeData(versions, -1);
   
       return 0;
   }
  @@ -944,41 +926,30 @@
   /**
    * Retrieve trigger type info.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int triggertypeTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  -{
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
  -    HFD_t hfd = headerFreeData;
  -    rpmTagType tst;
  +static int triggertypeTag(Header h, HE_t he)
  +	/*@modifies he @*/
  +{
       int_32 * indices, * flags;
       const char ** conds;
       const char ** s;
       int i, j, xx;
       int numScripts, numNames;
   
  -    if (!hge(h, RPMTAG_TRIGGERINDEX, NULL, &indices, &numNames)) {
  -	*freeData = 0;
  +    he->freeData = 0;
  +    if (!headerGetEntry(h, RPMTAG_TRIGGERINDEX, NULL, &indices, &numNames))
   	return 1;
  -    }
   
  -    xx = hge(h, RPMTAG_TRIGGERFLAGS, NULL, &flags, NULL);
  -    xx = hge(h, RPMTAG_TRIGGERSCRIPTS, &tst, &s, &numScripts);
  -    s = hfd(s, tst);
  -
  -    *freeData = 1;
  -    *data = conds = xmalloc(sizeof(*conds) * numScripts);
  -    *count = numScripts;
  -    *type = RPM_STRING_ARRAY_TYPE;
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERFLAGS, NULL, &flags, NULL);
  +    xx = headerGetEntry(h, RPMTAG_TRIGGERSCRIPTS, NULL, &s, &numScripts);
  +    s = headerFreeData(s, -1);
  +
  +    he->freeData = 1;
  +    *he->t = RPM_STRING_ARRAY_TYPE;
  +    (*he->p).ptr = conds = xmalloc(sizeof(*conds) * numScripts);
  +    *he->c = numScripts;
       for (i = 0; i < numScripts; i++) {
   	for (j = 0; j < numNames; j++) {
   	    if (indices[j] != i)
  @@ -1018,29 +989,20 @@
   /**
    * Retrieve i18n text.
    * @param h		header
  - * @param tag		tag
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int i18nTag(Header h, int_32 tag, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int i18nTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno @*/
  -	/*@modifies *type, *data, *count, *freeData, rpmGlobalMacroContext @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +	/*@modifies he, rpmGlobalMacroContext @*/
   {
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
       char * dstring = rpmExpand(_macro_i18ndomains, NULL);
       int rc;
   
  -    *type = RPM_STRING_TYPE;
  -    *data = NULL;
  -    *count = 0;
  -    *freeData = 0;
  +    *he->t = RPM_STRING_TYPE;
  +    (*he->p).ptr = NULL;
  +    *he->c = 0;
  +    he->freeData = 0;
   
       if (dstring && *dstring) {
   	char *domain, *de;
  @@ -1048,7 +1010,7 @@
   	const char * msgkey;
   	const char * msgid;
   
  -	{   const char * tn = tagName(tag);
  +	{   const char * tn = tagName(he->tag);
   	    const char * n = NULL;
   	    char * mk;
   	    size_t nb = sizeof("()");
  @@ -1086,70 +1048,67 @@
   #endif
   
   	if (domain && msgid) {
  -	    *data = /*@-unrecog@*/ dgettext(domain, msgid) /*@=unrecog@*/;
  -	    *data = xstrdup(*data);	/* XXX xstrdup has side effects. */
  -	    *count = 1;
  -	    *freeData = 1;
  +	    const char * s = /*@-unrecog@*/ dgettext(domain, msgid) /*@=unrecog@*/;
  +	    (*he->p).str = xstrdup(s);	/* XXX xstrdup has side effects. */
  +	    *he->c = 1;
  +	    he->freeData = 1;
   	}
   	dstring = _free(dstring);
  -	if (*data)
  +	if ((*he->p).str)
   	    return 0;
       }
   
       dstring = _free(dstring);
   
  -    rc = hge(h, tag, type, (void **)data, count);
  +    rc = headerGetEntry(h, he->tag, he->t, (*he->p).ptr, he->c);
   
  -    if (rc && (*data) != NULL) {
  -	*data = xstrdup(*data);
  -	*data = xstrtolocale(*data);
  -	*freeData = 1;
  +    if (rc && (*he->p).ptr != NULL) {
  +	(*he->p).str = xstrdup((*he->p).str);
  +	(*he->p).str = xstrtolocale((*he->p).str);
  +	he->freeData = 1;
   	return 0;
       }
   
  -    *freeData = 0;
  -    *data = NULL;
  -    *count = 0;
  +    he->freeData = 0;
  +    (*he->p).ptr = NULL;
  +    *he->c = 0;
       return 1;
   }
   
   /**
    * Retrieve text and convert to locale.
    */
  -static int localeTag(Header h, int_32 tag, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  +static int localeTag(Header h, HE_t he)
  +	/*@modifies he @*/
   {
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
       rpmTagType t;
       char **d, **d2, *dp;
       int rc, i, l;
   
  -    rc = hge(h, tag, &t, &d, count);
  -    if (!rc || d == NULL || *count == 0) {
  -	*freeData = 0;
  -	*data = NULL;
  -	*count = 0;
  +    rc = headerGetEntry(h, he->tag, &t, &d, he->c);
  +    if (!rc || d == NULL || *he->c == 0) {
  +	he->freeData = 0;
  +	(*he->p).ptr = NULL;
  +	*he->c = 0;
   	return 1;
       }
  -    if (type)
  -	*type = t;
  +    if (he->t)
  +	*he->t = t;
       if (t == RPM_STRING_TYPE) {
   	d = (char **)xstrdup((char *)d);
   	d = (char **)xstrtolocale((char *)d);
  -	*freeData = 1;
  +	he->freeData = 1;
       } else if (t == RPM_STRING_ARRAY_TYPE) {
   	l = 0;
  -	for (i = 0; i < *count; i++) {
  +	for (i = 0; i < *he->c; i++) {
   	    d[i] = xstrdup(d[i]);
   	    d[i] = (char *)xstrtolocale(d[i]);
   assert(d[i] != NULL);
   	    l += strlen(d[i]) + 1;
   	}
  -	d2 = xmalloc(*count * sizeof(*d2) + l);
  -	dp = (char *)(d2 + *count);
  -	for (i = 0; i < *count; i++) {
  +	d2 = xmalloc(*he->c * sizeof(*d2) + l);
  +	dp = (char *)(d2 + *he->c);
  +	for (i = 0; i < *he->c; i++) {
   	    d2[i] = dp;
   	    strcpy(dp, d[i]);
   	    dp += strlen(dp) + 1;
  @@ -1157,121 +1116,90 @@
   	}
   	d = _free(d);
   	d = d2;
  -	*freeData = 1;
  +	he->freeData = 1;
       } else
  -	*freeData = 0;
  -    *data = (void **)d;
  +	he->freeData = 0;
  +    (*he->p).ptr = (void **)d;
       return 0;
   }
   
   /**
    * Retrieve summary text.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int summaryTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int summaryTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno @*/
  -	/*@modifies *type, *data, *count, *freeData, rpmGlobalMacroContext @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +	/*@modifies he, rpmGlobalMacroContext @*/
   {
  -    return i18nTag(h, RPMTAG_SUMMARY, type, data, count, freeData);
  +    he->tag = RPMTAG_SUMMARY;
  +    return i18nTag(h, he);
   }
   
   /**
    * Retrieve description text.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int descriptionTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int descriptionTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno @*/
  -	/*@modifies *type, *data, *count, *freeData, rpmGlobalMacroContext @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +	/*@modifies he, rpmGlobalMacroContext @*/
   {
  -    return i18nTag(h, RPMTAG_DESCRIPTION, type, data, count, freeData);
  +    he->tag = RPMTAG_DESCRIPTION;
  +    return i18nTag(h, he);
   }
   
  -static int changelognameTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +static int changelognameTag(Header h, HE_t he)
  +	/*@modifies he @*/
   {
  -    return localeTag(h, RPMTAG_CHANGELOGNAME, type, data, count, freeData);
  +    he->tag = RPMTAG_CHANGELOGNAME;
  +    return localeTag(h, he);
   }
   
  -static int changelogtextTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +static int changelogtextTag(Header h, HE_t he)
  +	/*@modifies he @*/
   {
  -    return localeTag(h, RPMTAG_CHANGELOGTEXT, type, data, count, freeData);
  +    he->tag = RPMTAG_CHANGELOGTEXT;
  +    return localeTag(h, he);
   }
   
   /**
    * Retrieve group text.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int groupTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int groupTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno @*/
  -	/*@modifies *type, *data, *count, *freeData, rpmGlobalMacroContext @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +	/*@modifies he, rpmGlobalMacroContext @*/
   {
  -    return i18nTag(h, RPMTAG_GROUP, type, data, count, freeData);
  +    he->tag = RPMTAG_GROUP;
  +    return i18nTag(h, he);
   }
   
   /**
    * Retrieve db instance from header.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
   /*@-globuse@*/
  -static int dbinstanceTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int dbinstanceTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno,
   		fileSystem, internalState @*/
  -	/*@modifies *type, *data, *count, *freeData, rpmGlobalMacroContext,
  +	/*@modifies he, rpmGlobalMacroContext,
   		fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
       int_32 * valuep = xcalloc(1, sizeof(*valuep));
   
       *valuep = headerGetInstance(h);
   
  -    *type = RPM_INT32_TYPE;
  -    *data = valuep;
  -    *count = 1;
  -    *freeData = 1;
  +    *he->t = RPM_INT32_TYPE;
  +    (*he->p).ptr = valuep;
  +    *he->c = 1;
  +    he->freeData = 1;
   
       return 0;
   }
  @@ -1311,28 +1239,20 @@
   /**
    * Retrieve N-V-R.A compound string from header.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
   /*@-globuse@*/
  -static int nvraTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  +static int nvraTag(Header h, HE_t he)
   	/*@globals rpmGlobalMacroContext, h_errno,
   		fileSystem, internalState @*/
  -	/*@modifies h, *type, *data, *count, *freeData, rpmGlobalMacroContext,
  +	/*@modifies h, he, rpmGlobalMacroContext,
   		fileSystem, internalState @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
   {
  -    if (type) *type = RPM_STRING_TYPE;
  -    if (data) *data = hGetNVRA(h);
  -    if (count) *count = 1;
  -    if (freeData) *freeData = 1;
  -
  +    if (he->t) *he->t = RPM_STRING_TYPE;
  +    if (he->p) (*he->p).str = hGetNVRA(h);
  +    if (he->c) *he->c = 1;
  +    he->freeData = 1;
       return 0;
   }
   /*@=globuse@*/
  @@ -1358,8 +1278,6 @@
   		/*@out@*/ const char *** fnp, /*@out@*/ int * fcp)
   	/*@modifies *fnp, *fcp @*/
   {
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
  -    HFD_t hfd = headerFreeData;
       const char ** baseNames;
       const char ** dirNames;
       int * dirIndexes;
  @@ -1380,14 +1298,14 @@
   	dirIndexesTag = RPMTAG_ORIGDIRINDEXES;
       }
   
  -    if (!hge(h, tagN, &bnt, &baseNames, &count)) {
  +    if (!headerGetEntry(h, tagN, &bnt, &baseNames, &count)) {
   	if (fnp) *fnp = NULL;
   	if (fcp) *fcp = 0;
   	return;		/* no file list */
       }
   
  -    xx = hge(h, dirNameTag, &dnt, &dirNames, NULL);
  -    xx = hge(h, dirIndexesTag, NULL, &dirIndexes, &count);
  +    xx = headerGetEntry(h, dirNameTag, &dnt, &dirNames, NULL);
  +    xx = headerGetEntry(h, dirIndexesTag, NULL, &dirIndexes, &count);
   
       size = sizeof(*fileNames) * count;
       for (i = 0; i < count; i++) {
  @@ -1405,8 +1323,8 @@
   	t = stpcpy( stpcpy(t, dn), baseNames[i]);
   	*t++ = '\0';
       }
  -    baseNames = hfd(baseNames, bnt);
  -    dirNames = hfd(dirNames, dnt);
  +    baseNames = headerFreeData(baseNames, bnt);
  +    dirNames = headerFreeData(dirNames, dnt);
   
       if (fnp)
   	*fnp = fileNames;
  @@ -1418,60 +1336,60 @@
   /**
    * Retrieve file paths.
    * @param h		header
  - * @retval *type	tag type
  - * @retval *data	tag value
  - * @retval *count	no. of data items
  - * @retval *freeData	data-was-malloc'ed indicator
  + * @retval *he		tag container
    * @return		0 on success
    */
  -static int _fnTag(Header h, rpmTag tag, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  -{
  -    if (type) *type = RPM_STRING_ARRAY_TYPE;
  -    rpmfiBuildFNames(h, tag, (const char ***) data, count);
  -    if (freeData) *freeData = 1;
  +static int _fnTag(Header h, HE_t he)
  +	/*@modifies he @*/
  +{
  +    if (he->t) *he->t = RPM_STRING_ARRAY_TYPE;
  +    rpmfiBuildFNames(h, he->tag, (const char ***) he->p, he->c);
  +    he->freeData = 1;
       return 0;
   }
   
  -static int filepathsTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  -{
  -    return _fnTag(h, RPMTAG_BASENAMES, type, data, count, freeData);
  -}
  -
  -static int origpathsTag(Header h, /*@out@*/ rpmTagType * type,
  -		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
  -		/*@out@*/ int * freeData)
  -	/*@modifies *type, *data, *count, *freeData @*/
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/
  +static int filepathsTag(Header h, HE_t he)
  +	/*@modifies he @*/
  +{
  +    he->tag = RPMTAG_BASENAMES;
  +    return _fnTag(h, he);
  +}
  +
  +static int origpathsTag(Header h, HE_t he)
  +	/*@modifies he @*/
   {
  -    return _fnTag(h, RPMTAG_ORIGBASENAMES, type, data, count, freeData);
  +    he->tag = RPMTAG_ORIGBASENAMES;
  +    return _fnTag(h, he);
   }
   
   /*@-type@*/ /* FIX: cast? */
   const struct headerSprintfExtension_s headerCompoundFormats[] = {
  -    { HEADER_EXT_TAG, "RPMTAG_CHANGELOGNAME",	{ changelognameTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_CHANGELOGTEXT",	{ changelogtextTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_DESCRIPTION",	{ descriptionTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_GROUP",		{ groupTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_INSTALLPREFIX",	{ instprefixTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_SUMMARY",		{ summaryTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_TRIGGERCONDS",	{ triggercondsTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_TRIGGERTYPE",	{ triggertypeTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_DBINSTANCE",	{ dbinstanceTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_NVRA",		{ nvraTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FILENAMES",	{ filepathsTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_FILEPATHS",	{ filepathsTag } },
  -    { HEADER_EXT_TAG, "RPMTAG_ORIGPATHS",	{ origpathsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_CHANGELOGNAME",
  +	{ .tagFunction = changelognameTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_CHANGELOGTEXT",
  +	{ .tagFunction = changelogtextTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_DESCRIPTION",
  +	{ .tagFunction = descriptionTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_GROUP",
  +	{ .tagFunction = groupTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_INSTALLPREFIX",
  +	{ .tagFunction = instprefixTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_SUMMARY",
  +	{ .tagFunction = summaryTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_TRIGGERCONDS",
  +	{ .tagFunction = triggercondsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_TRIGGERTYPE",
  +	{ .tagFunction = triggertypeTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_DBINSTANCE",
  +	{ .tagFunction = dbinstanceTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_NVRA",
  +	{ .tagFunction = nvraTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FILENAMES",
  +	{ .tagFunction = filepathsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_FILEPATHS",
  +	{ .tagFunction = filepathsTag } },
  +    { HEADER_EXT_TAG, "RPMTAG_ORIGPATHS",
  +	{ .tagFunction = origpathsTag } },
       { HEADER_EXT_FORMAT, "armor",		{ armorFormat } },
       { HEADER_EXT_FORMAT, "base64",		{ base64Format } },
       { HEADER_EXT_FORMAT, "depflags",		{ depflagsFormat } },
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 header.c
  --- rpm/rpmdb/header.c	13 Oct 2007 19:56:45 -0000	1.75
  +++ rpm/rpmdb/header.c	14 Oct 2007 22:54:00 -0000	1.76
  @@ -1714,7 +1714,7 @@
    * @return		1 on success, 0 on not found
    */
   static int intGetEntry(Header h, int_32 tag,
  -		/*@null@*/ /*@out@*/ hTAG_t type,
  +		/*@null@*/ /*@out@*/ hTYP_t type,
   		/*@null@*/ /*@out@*/ hPTR_t * p,
   		/*@null@*/ /*@out@*/ hCNT_t c,
   		int minMem)
  @@ -1820,7 +1820,7 @@
       const char * name = tagName(tag);
       headerSprintfExtension exts = (headerSprintfExtension)headerCompoundFormats;
       headerSprintfExtension ext;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_t he = alloca(sizeof(*he));
  @@ -1849,7 +1849,7 @@
       }
   
       if (ext && ext->name != NULL && ext->type == HEADER_EXT_TAG)
  -	rc = ext->u.tagFunction(h, he->t, (hPTR_t *)he->p, he->c, &he->freeData);
  +	rc = ext->u.tagFunction(h, he);
       else
   	rc = intGetEntry(h, he->tag, he->t, (hPTR_t *)he->p, he->c, 0);
   
  @@ -1967,7 +1967,7 @@
       return rc;
   }
   
  -int headerGetRawEntry(Header h, int_32 tag, int_32 * type, void * p, int_32 * c)
  +int headerGetRawEntry(Header h, int_32 tag, rpmTagType * type, void * p, int_32 * c)
   {
       indexEntry entry;
       int rc;
  @@ -2537,7 +2537,9 @@
   {
       Header nh = headerNew();
       HeaderIterator hi;
  -    int_32 tag, type, count;
  +    int_32 tag;
  +    rpmTagType type;
  +    int_32 count;
       hPTR_t ptr;
      
       for (hi = headerInitIterator(h);
  @@ -2622,7 +2624,7 @@
   	    hsa->i++;
   	} else {
   	    int_32 tagno;
  -	    int_32 type;
  +	    rpmTagType type;
   	    int_32 count;
   
   	    if (!headerNextIterator(hsa->hi, &tagno, &type, NULL, &count))
  @@ -3160,8 +3162,16 @@
   		/\ maxSet(countptr) >= 0 @*/
   {
       if (!ec->avail) {
  -	if (fn(hsa->h, &ec->type, &ec->data, &ec->count, &ec->freeit))
  +	HE_s he_s;
  +	HE_t he = &he_s;
  +	he->tag = 0;
  +	he->t = &ec->type;
  +	(*he->p).ptr = &ec->data;
  +	he->c = &ec->count;
  +	he->freeData = 0;
  +	if (fn(hsa->h, he))
   	    return 1;
  +	ec->freeit = he->freeData;
   	ec->avail = 1;
       }
   
  @@ -3187,8 +3197,9 @@
       size_t need = 0;
       char * t, * te;
       char buf[20];
  -    int_32 count, type;
  +    rpmTagType type;
       hPTR_t data;
  +    int_32 count;
       unsigned int intVal;
       uint_64 llVal;
       const char ** strarray;
  @@ -3398,7 +3409,7 @@
       char * t, * te;
       int i, j;
       int numElements;
  -    int_32 type;
  +    rpmTagType type;
       int_32 count;
       sprintfToken spft;
       int condNumFormats;
  @@ -3953,7 +3964,7 @@
   
       for (p = tagstocopy; *p != 0; p++) {
   	char *s;
  -	int_32 type;
  +	rpmTagType type;
   	int_32 count;
   	if (headerIsEntry(headerTo, *p))
   	    continue;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.h
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 header.h
  --- rpm/rpmdb/header.h	14 Oct 2007 19:26:02 -0000	1.31
  +++ rpm/rpmdb/header.h	14 Oct 2007 22:54:00 -0000	1.32
  @@ -98,15 +98,22 @@
   typedef unsigned short uint_16;
   typedef unsigned char uint_8;
   
  -/*@-redef@*/	/* LCL: no clue */
   /** \ingroup header
    */
   typedef const char *	errmsg_t;
   
   /** \ingroup header
    */
  +typedef enum rpmTag_e rpmTag;
  +
  +/** \ingroup header
  + */
  +typedef enum rpmTagType_e rpmTagType;
  +
  +/** \ingroup header
  + */
   typedef int_32 *	hTAG_t;
  -typedef int_32 *	hTYP_t;
  +typedef rpmTagType *	hTYP_t;
   typedef const void *	hPTR_t;
   typedef int_32 *	hCNT_t;
   
  @@ -116,6 +123,46 @@
   
   /** \ingroup header
    */
  +/*@-typeuse -fielduse@*/
  +typedef union hRET_s hRET_t;
  +#if !defined(SWIG)
  +union hRET_s {
  +    void * ptr;
  +    const char ** argv;
  +    const char * str;
  +    uint_64 * ui64p;
  +    uint_32 * ui32p;
  +    uint_16 * ui16p;
  +    uint_8 * ui8p;
  +    int_64 * i64p;
  +    int_32 * i32p;
  +    int_16 * i16p;
  +    int_8 * i8p;
  +};
  +#endif
  +/*@=typeuse =fielduse@*/
  +
  +/** \ingroup header
  + */
  +/*@-typeuse -fielduse@*/
  +#if !defined(SWIG)
  +struct _HE_s {
  +    int_32 tag;
  +/*@null@*/
  +    hTYP_t t;
  +/*@null@*/
  +    hRET_t * p;
  +/*@null@*/
  +    hCNT_t c;
  +    int freeData;
  +};
  +typedef struct _HE_s HE_s;
  +#endif
  +typedef HE_s * HE_t;
  +/*@=typeuse =fielduse@*/
  +
  +/** \ingroup header
  + */
   typedef /*@abstract@*/ struct headerIterator_s * HeaderIterator;
   
   /** \ingroup header
  @@ -195,13 +242,8 @@
    * @retval *freedata	data-was-malloc'ed indicator
    * @return		0 on success
    */
  -typedef int (*headerTagTagFunction) (Header h,
  -		/*@null@*/ /*@out@*/ hTYP_t type,
  -		/*@null@*/ /*@out@*/ hPTR_t * data,
  -		/*@null@*/ /*@out@*/ hCNT_t count,
  -		/*@null@*/ /*@out@*/ int * freeData)
  -	/*@requires maxSet(type) >= 0 /\ maxSet(data) >= 0
  -		/\ maxSet(count) >= 0 /\ maxSet(freeData) >= 0 @*/;
  +typedef int (*headerTagTagFunction) (Header h, HE_t he)
  +	/*@modifies he */;
   
   /** \ingroup header
    * Define header tag output formats.
  @@ -238,14 +280,10 @@
   extern const struct headerSprintfExtension_s headerCompoundFormats[];
   /*@=redecl@*/
   
  -/**
  - */
  -typedef enum rpmTag_e rpmTag;
  -
   /** \ingroup header
    * The basic types of data in tags from headers.
    */
  -typedef enum rpmTagType_e {
  +enum rpmTagType_e {
       RPM_NULL_TYPE		=  0,
       RPM_CHAR_TYPE		=  1,
       RPM_INT8_TYPE		=  2,
  @@ -259,7 +297,7 @@
       RPM_ASN1_TYPE		= 10,
       RPM_OPENPGP_TYPE		= 11,
       RPM_MASK_TYPE		= 0x0000ffff
  -} rpmTagType;
  +};
   #define	RPM_MIN_TYPE		0
   #define	RPM_MAX_TYPE		11
   
  @@ -309,46 +347,6 @@
   #define	HEADER_TAGBASE		1000
   
   /**
  - */
  -/*@-typeuse -fielduse@*/
  -typedef union hRET_s hRET_t;
  -#if !defined(SWIG)
  -union hRET_s {
  -    void * ptr;
  -    const char ** argv;
  -    const char * str;
  -    uint_64 * ui64p;
  -    uint_32 * ui32p;
  -    uint_16 * ui16p;
  -    uint_8 * ui8p;
  -    int_64 * i64p;
  -    int_32 * i32p;
  -    int_16 * i16p;
  -    int_8 * i8p;
  -};
  -#endif
  -/*@=typeuse =fielduse@*/
  -
  -/**
  - */
  -/*@-typeuse -fielduse@*/
  -#if !defined(SWIG)
  -struct _HE_s {
  -    int_32 tag;
  -/*@null@*/
  -    hTYP_t t;
  -/*@null@*/
  -    hRET_t * p;
  -/*@null@*/
  -    hCNT_t c;
  -    int freeData;
  -};
  -typedef struct _HE_s HE_s;
  -#endif
  -typedef HE_s * HE_t;
  -/*@=typeuse =fielduse@*/
  -
  -/**
    * Prototype for headerFreeData() vector.
    *
    * @param data		address of data (or NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header_internal.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 header_internal.c
  --- rpm/rpmdb/header_internal.c	4 Oct 2007 07:20:43 -0000	1.9
  +++ rpm/rpmdb/header_internal.c	14 Oct 2007 22:54:00 -0000	1.10
  @@ -64,7 +64,8 @@
   char ** headerGetLangs(Header h)
   {
       char **s, *e, **table;
  -    int i, type, count;
  +    rpmTagType type;
  +    int i, count;
   
       if (!headerGetRawEntry(h, HEADER_I18NTABLE, &type, &s, &count))
   	return NULL;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header_internal.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 header_internal.h
  --- rpm/rpmdb/header_internal.h	7 Oct 2007 14:00:13 -0000	1.20
  +++ rpm/rpmdb/header_internal.h	14 Oct 2007 22:54:00 -0000	1.21
  @@ -129,7 +129,7 @@
    */
   typedef /*@abstract@*/ struct rpmec_s * rpmec;
   struct rpmec_s {
  -    int_32 type;
  +    rpmTagType type;
       int_32 count;
       int avail;
       int freeit;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 pkgio.c
  --- rpm/rpmdb/pkgio.c	13 Oct 2007 08:42:08 -0000	1.16
  +++ rpm/rpmdb/pkgio.c	14 Oct 2007 22:54:00 -0000	1.17
  @@ -74,7 +74,7 @@
   rpmRC rpmtsFindPubkey(rpmts ts, void * _dig)
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -541,7 +541,7 @@
   	/*@modifies *ptr, *msg, fileSystem @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.180 -r1.181 rpmdb.c
  --- rpm/rpmdb/rpmdb.c	13 Oct 2007 09:23:20 -0000	1.180
  +++ rpm/rpmdb/rpmdb.c	14 Oct 2007 22:54:00 -0000	1.181
  @@ -860,7 +860,7 @@
   		fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -1410,7 +1410,7 @@
   	/*@requires maxSet(matches) >= 0 @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -2152,7 +2152,7 @@
   	/*@modifies mi->mi_re @*/
   {
       HGE_t hge = (HGE_t) headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -2783,7 +2783,7 @@
   DBT * data = alloca(sizeof(*data));
   union _dbswap mi_offset;
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -3089,7 +3089,7 @@
   DBT * data = alloca(sizeof(*data));
       HGE_t hge = (HGE_t) headerGetExtension;
       HAE_t hae = (HAE_t) headerAddEntry;
  -    int_32 he_t;
  +    rpmTagType he_t;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ -3541,7 +3541,7 @@
   DBT * key;
   DBT * data;
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/signature.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 signature.c
  --- rpm/rpmdb/signature.c	13 Oct 2007 00:27:17 -0000	1.7
  +++ rpm/rpmdb/signature.c	14 Oct 2007 22:54:00 -0000	1.8
  @@ -524,7 +524,7 @@
   	/*@modifies sigh, sigTag, rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       HGE_t hge = (HGE_t)headerGetExtension;
  -    int_32 he_t = 0;
  +    rpmTagType he_t = 0;
       hRET_t he_p = { .ptr = NULL };
       int_32 he_c = 0;
       HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  @@ .
Received on Mon Oct 15 00:54:01 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.