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: 21-Oct-2007 05:40:48
Branch: HEAD Handle: 2007102104404701
Modified files:
rpm CHANGES
rpm/rpmdb header.c header.h
Log:
- start rearranging header.h prior to moving typedefs to rpmtag.h.
- rewrite several toy routines to use HE_t instead.
- replace hRET_t with rpmTagType, avoiding "hRET_t *" issues for now.
Summary:
Revision Changes Path
1.1748 +3 -0 rpm/CHANGES
1.108 +38 -55 rpm/rpmdb/header.c
1.52 +28 -23 rpm/rpmdb/header.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1747 -r1.1748 CHANGES
--- rpm/CHANGES 21 Oct 2007 00:25:23 -0000 1.1747
+++ rpm/CHANGES 21 Oct 2007 03:40:47 -0000 1.1748
@@ -1,4 +1,7 @@
4.5 -> 5.0:
+ - jbj: start rearranging header.h prior to moving typedefs to rpmtag.h.
+ - jbj: rewrite several toy routines to use HE_t instead.
+ - jbj: replace hRET_t with rpmTagType, avoiding "hRET_t *" issues for now.
- jbj: hmmm, b0rken --fileclass et al extensions in lib/format.c, todo++.
- jbj: mark private extension handling for destruction, enabled for now.
- jbj: permit headerSprintf tbls/exts args tp be NULL using sane default.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.107 -r1.108 header.c
--- rpm/rpmdb/header.c 21 Oct 2007 00:25:24 -0000 1.107
+++ rpm/rpmdb/header.c 21 Oct 2007 03:40:48 -0000 1.108
@@ -382,8 +382,8 @@
* @param pend pointer to end of data (or NULL)
* @return no. bytes in data, -1 on failure
*/
-static int dataLength(rpmTagType type, hRET_t p, rpmTagCount count, int onDisk,
- /*@null@*/ hRET_t pend)
+static int dataLength(rpmTagType type, rpmTagData p, rpmTagCount count, int onDisk,
+ /*@null@*/ rpmTagData pend)
/*@*/
{
const unsigned char * s = p.ui8p;
@@ -471,7 +471,7 @@
int regionid)
/*@modifies *entry, *dataStart @*/
{
- hRET_t p, pend;
+ rpmTagData p, pend;
unsigned char * tprev = NULL;
unsigned char * t = NULL;
int tdel = 0;
@@ -2051,7 +2051,7 @@
/**
*/
-static void copyData(rpmTagType type, /*@out@*/ void * dstPtr, hRET_t srcPtr,
+static void copyData(rpmTagType type, /*@out@*/ void * dstPtr, rpmTagData srcPtr,
rpmTagCount cnt, int dataLength)
/*@modifies *dstPtr @*/
{
@@ -2087,14 +2087,14 @@
*/
/*@null@*/
static void *
-grabData(rpmTagType type, hRET_t p, rpmTagCount c, /*@out@*/ int * lenp)
+grabData(rpmTagType type, rpmTagData p, rpmTagCount c, /*@out@*/ int * lenp)
/*@modifies *lenp @*/
/*@requires maxSet(lenp) >= 0 @*/
{
void * data = NULL;
int length;
- length = dataLength(type, p, c, 0, (hRET_t)NULL); /* NOCAST */
+ length = dataLength(type, p, c, 0, (rpmTagData)NULL); /* NOCAST */
if (length > 0) {
data = xmalloc(length);
copyData(type, data, p, c, length);
@@ -2120,7 +2120,7 @@
* @return 1 on success, 0 on failure
*/
static
-int headerAddEntry(Header h, int_32 tag, rpmTagType type, hRET_t p, rpmTagCount c)
+int headerAddEntry(Header h, int_32 tag, rpmTagType type, rpmTagData p, rpmTagCount c)
/*@modifies h @*/
{
indexEntry entry;
@@ -2179,7 +2179,7 @@
*/
static
int headerAppendEntry(Header h, int_32 tag, rpmTagType type,
- hRET_t p, rpmTagCount c)
+ rpmTagData p, rpmTagCount c)
/*@modifies h @*/
{
indexEntry entry;
@@ -2195,7 +2195,7 @@
if (!entry)
return 0;
- length = dataLength(type, p, c, 0, (hRET_t)NULL); /* NOCAST */
+ length = dataLength(type, p, c, 0, (rpmTagData)NULL); /* NOCAST */
if (length < 0)
return 0;
@@ -2227,7 +2227,7 @@
*/
static
int headerAddOrAppendEntry(Header h, int_32 tag, rpmTagType type,
- hRET_t p, rpmTagCount c)
+ rpmTagData p, rpmTagCount c)
/*@modifies h @*/
{
return (findEntry(h, tag, type)
@@ -2261,7 +2261,7 @@
/*@modifies h @*/
{
indexEntry table, entry;
- hRET_t p;
+ rpmTagData p;
int length;
int ghosts;
int i, langNum;
@@ -2400,12 +2400,12 @@
*/
static
int headerModifyEntry(Header h, int_32 tag, rpmTagType type,
- hRET_t p, rpmTagCount c)
+ rpmTagData p, rpmTagCount c)
/*@modifies h @*/
{
indexEntry entry;
void * oldData;
- hRET_t data;
+ rpmTagData data;
int length;
/* First find the tag */
@@ -2670,18 +2670,15 @@
Header headerCopy(Header h)
/*@modifies h @*/
{
+ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
Header nh = headerNew();
HeaderIterator hi;
- int_32 tag;
- rpmTagType type;
- rpmTagCount count;
- hRET_t ptr;
for (hi = headerInitIterator(h);
- headerNextIterator(hi, &tag, &type, &ptr, &count);
- ptr.ptr = headerFreeData(ptr.ptr, type))
+ headerNextIterator(hi, &he->tag, &he->t, &he->p, &he->c);
+ he->p.ptr = headerFreeData(he->p.ptr, he->t))
{
- if (ptr.ptr) (void) headerAddEntry(nh, tag, type, ptr, count);
+ if (he->p.ptr) (void) headerAddEntry(nh, he->tag, he->t, he->p, he->c);
}
hi = headerFreeIterator(hi);
@@ -2702,8 +2699,10 @@
const char * errmsg;
HE_t ec; /*!< Extension data cache. */
int nec; /*!< No. of extension cache items. */
+#ifdef NOTYET
HE_t tc; /*!< Tag data cache. */
int ntc; /*!< No. of tag cache items. */
+#endif
sprintfToken format;
/*@relnull@*/
HeaderIterator hi;
@@ -3566,38 +3565,25 @@
* Call a header extension only once, saving results.
* @param hsa headerSprintf args
* @param fn function
- * @retval *typeptr extension type
- * @retval *data extension data
- * @retval *countptr extension size
+ * @retval he tag container
* @retval ec extension cache
* @return 0 on success, 1 on failure
*/
static int getExtension(headerSprintfArgs hsa, headerTagTagFunction fn,
- /*@out@*/ hTYP_t typeptr,
- /*@out@*/ hRET_t * data,
- /*@out@*/ hCNT_t countptr,
- HE_t ec)
- /*@modifies *typeptr, *data, *countptr, ec @*/
+ HE_t he, HE_t ec)
+ /*@modifies he, ec @*/
{
+ int rc = 0;
if (!ec->avail) {
- HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
- int xx;
-
- xx = fn(hsa->h, he);
- ec->t = he->t;
- ec->p.ptr = he->p.ptr;
- ec->c = he->c;
- ec->freeData = he->freeData;
- if (xx)
- return 1;
- ec->avail = 1;
- }
-
- if (typeptr) *typeptr = ec->t;
- if (data) (*data).ptr = ec->p.ptr;
- if (countptr) *countptr = ec->c;
-
- return 0;
+ he = rpmheClean(he);
+ rc = fn(hsa->h, he);
+ *ec = *he; /* structure copy. */
+ if (!rc)
+ ec->avail = 1;
+ } else
+ *he = *ec; /* structure copy. */
+ he->freeData = 0;
+ return rc;
}
#endif /* SUPPORT_SPRINTF_EXTTABLE */
@@ -3612,21 +3598,19 @@
static char * formatValue(headerSprintfArgs hsa, sprintfTag tag, int element)
/*@modifies hsa @*/
{
+ HE_t vhe = memset(alloca(sizeof(*vhe)), 0, sizeof(*vhe));
HE_t he = &tag->he;
char * val = NULL;
size_t need = 0;
char * t, * te;
- int xx;
-
- rpmTagCount countBuf;
-
- HE_t vhe = memset(alloca(sizeof(*vhe)), 0, sizeof(*vhe));
int_64 ival = 0;
+ rpmTagCount countBuf;
+ int xx;
/* XXX likely need to check !he->avail and he->tag == tag->tagno. */
#if defined(SUPPORT_SPRINTF_EXTTABLE)
if (tag->ext) {
- if (getExtension(hsa, tag->ext, &he->t, &he->p, &he->c, hsa->ec + tag->extNum))
+ if (getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum))
{
he->c = 1;
he->t = RPM_STRING_TYPE;
@@ -3836,8 +3820,7 @@
/* XXX likely need to check !he->avail and he->tag == tag->tagno. */
#if defined(SUPPORT_SPRINTF_EXTTABLE)
if (tag->ext) {
- if (getExtension(hsa, tag->ext, &he->t, &he->p, &he->c,
- hsa->ec + tag->extNum))
+ if (getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum))
continue;
} else
#endif /* SUPPORT_SPRINTF_EXTTABLE */
@@ -3853,7 +3836,7 @@
fprintf(stderr, " NEW: %p tag %s(%d)\t%d %p[%d:%d] free %d avail %d\n", he, tagName(he->tag), he->tag, he->t, he->p.ptr, he->ix, he->c, he->freeData, he->avail);
}
- /* Check that all iteration items are same size (or scalar). */
+ /* Check iteration arrays are same dimension (or scalar). */
switch (he->t) {
default:
if (numElements == -1) {
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.h
============================================================================
$ cvs diff -u -r1.51 -r1.52 header.h
--- rpm/rpmdb/header.h 21 Oct 2007 00:25:24 -0000 1.51
+++ rpm/rpmdb/header.h 21 Oct 2007 03:40:48 -0000 1.52
@@ -107,27 +107,6 @@
/** \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
- */
typedef enum rpmTag_e rpmTag;
/** \ingroup header
@@ -157,7 +136,7 @@
/** \ingroup header
*/
-typedef hRET_t rpmTagData;
+typedef union rpmDataType_u rpmTagData;
/** \ingroup header
*/
@@ -165,6 +144,33 @@
/** \ingroup header
*/
+typedef struct _HE_s * HE_t; /* tag container. */
+
+/** \ingroup header
+ */
+/*@-typeuse -fielduse@*/
+typedef union rpmDataType_u hRET_t;
+#if !defined(SWIG)
+union rpmDataType_u {
+ void * ptr;
+ int_8 * i8p; /*!< RPM_INT8_TYPE | RPM_CHAR_TYPE */
+ int_32 * i32p; /*!< RPM_INT32_TYPE */
+ int_16 * i16p; /*!< RPM_INT16_TYPE */
+ int_64 * i64p; /*!< RPM_INT64_TYPE */
+ const char * str; /*!< RPM_STRING_TYPE */
+ unsigned char * blob; /*!< RPM_BIN_TYPE */
+ const char ** argv; /*!< RPM_STRING_ARRAY_TYPE */
+ uint_8 * ui8p;
+ uint_16 * ui16p;
+ uint_32 * ui32p;
+ uint_64 * ui64p;
+ HE_t * he;
+};
+#endif
+/*@=typeuse =fielduse@*/
+
+/** \ingroup header
+ */
typedef int_32 * hTAG_t;
typedef rpmTagType * hTYP_t;
typedef rpmTagData * hPTR_t;
@@ -186,7 +192,6 @@
};
typedef struct _HE_s HE_s;
#endif
-typedef HE_s * HE_t; /* tag container. */
/*@=typeuse =fielduse@*/
/** \ingroup header
@@ .
Received on Sun Oct 21 05:40:48 2007