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