[prev in list] [next in list] [prev in thread] [next in thread]
List: rpm-cvs
Subject: [CVS] RPM: rpm-4_5: rpm/rpmdb/ header.c
From: "Jeff Johnson" <jbj () rpm5 ! org>
Date: 2007-10-23 17:44:39
Message-ID: 20071023174439.07F0D348459 () rpm5 ! org
[Download RAW message or body]
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: 23-Oct-2007 19:44:39
Branch: rpm-4_5 Handle: 2007102318443800
Modified files: (Branch: rpm-4_5)
rpm/rpmdb header.c
Log:
- jbj: propagate tag container data types downwards, rewriting as
necessary.
Summary:
Revision Changes Path
1.48.2.8 +37 -53 rpm/rpmdb/header.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.48.2.7 -r1.48.2.8 header.c
--- rpm/rpmdb/header.c 23 Oct 2007 17:02:10 -0000 1.48.2.7
+++ rpm/rpmdb/header.c 23 Oct 2007 17:44:38 -0000 1.48.2.8
@@ -589,7 +589,7 @@
* @return unloaded header blob (NULL on error)
*/
static /*@only@*/ /*@null@*/ void * doHeaderUnload(Header h,
- /*@out@*/ int * lengthPtr)
+ /*@out@*/ size_t * lengthPtr)
/*@modifies h, *lengthPtr @*/
/*@requires maxSet(lengthPtr) >= 0 @*/
/*@ensures maxRead(result) == (*lengthPtr) @*/
@@ -863,7 +863,7 @@
void * headerUnload(Header h)
/*@modifies h @*/
{
- int length;
+ size_t length;
void * uh = doHeaderUnload(h, &length);
return uh;
}
@@ -1012,17 +1012,6 @@
h->nrefs = 0;
h = headerLink(h);
- /*
- * XXX XFree86-libs, ash, and pdksh from Red Hat 5.2 have bogus
- * %verifyscript tag that needs to be diddled.
- */
- if (ntohl(pe->tag) == 15 &&
- ntohl(pe->type) == RPM_STRING_TYPE &&
- ntohl(pe->count) == 1)
- {
- pe->tag = htonl(1079);
- }
-
entry = h->index;
i = 0;
if (!(htonl(pe->tag) < HEADER_I18NTABLE)) {
@@ -1216,7 +1205,7 @@
/*@modifies h @*/
{
Header nh;
- int length;
+ size_t length;
/*@-onlytrans@*/
void * uh = doHeaderUnload(h, &length);
const char * origin;
@@ -1372,7 +1361,7 @@
{
FD_t fd = _fd;
ssize_t nb;
- int length;
+ size_t length;
const void * uh;
if (h == NULL)
@@ -1427,9 +1416,9 @@
* @return 1 on success, otherwise error.
*/
static int copyEntry(const indexEntry entry,
- /*@null@*/ /*@out@*/ hTYP_t type,
- /*@null@*/ /*@out@*/ hPTR_t * p,
- /*@null@*/ /*@out@*/ hCNT_t c,
+ /*@null@*/ /*@out@*/ rpmTagType * type,
+ /*@null@*/ /*@out@*/ rpmTagData * p,
+ /*@null@*/ /*@out@*/ rpmTagCount * c,
int minMem)
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
@@ -1466,8 +1455,8 @@
rdl += REGION_TAG_COUNT;
}
- *p = xmalloc(count);
- ei = (int_32 *) *p;
+ (*p).ptr = xmalloc(count);
+ ei = (*p).i32p;
ei[0] = htonl(ril);
ei[1] = htonl(rdl);
@@ -1483,41 +1472,36 @@
rc = (rc < 0) ? 0 : 1;
} else {
count = entry->length;
- *p = (!minMem
+ (*p).ptr = (!minMem
? memcpy(xmalloc(count), entry->data, count)
: entry->data);
}
break;
case RPM_STRING_TYPE:
if (count == 1) {
- *p = entry->data;
+ (*p).str = entry->data;
break;
}
/*@fallthrough@*/
case RPM_STRING_ARRAY_TYPE:
case RPM_I18NSTRING_TYPE:
- { const char ** ptrEntry;
- /*@-sizeoftype@*/
- int tableSize = count * sizeof(char *);
- /*@=sizeoftype@*/
+ { const char ** argv;
+ size_t nb = count * sizeof(*argv);
char * t;
int i;
/*@-mods@*/
if (minMem) {
- *p = xmalloc(tableSize);
- ptrEntry = (const char **) *p;
+ argv = (*p).argv = xmalloc(nb);
t = entry->data;
} else {
- t = xmalloc(tableSize + entry->length);
- *p = (void *)t;
- ptrEntry = (const char **) *p;
- t += tableSize;
+ argv = (*p).argv = xmalloc(nb + entry->length);
+ t = (char *) &argv[count];
memcpy(t, entry->data, entry->length);
}
/*@=mods@*/
for (i = 0; i < count; i++) {
- *ptrEntry++ = t;
+ argv[i] = t;
t = strchr(t, 0);
t++;
}
@@ -1526,7 +1510,7 @@
case RPM_OPENPGP_TYPE: /* XXX W2DO? */
case RPM_ASN1_TYPE: /* XXX W2DO? */
default:
- *p = entry->data;
+ (*p).ptr = entry->data;
break;
}
if (type) *type = entry->info.type;
@@ -1680,9 +1664,9 @@
* @return 1 on success, 0 on not found
*/
static int intGetEntry(Header h, int_32 tag,
- /*@null@*/ /*@out@*/ hTAG_t type,
- /*@null@*/ /*@out@*/ hPTR_t * p,
- /*@null@*/ /*@out@*/ hCNT_t c,
+ /*@null@*/ /*@out@*/ rpmTagType * type,
+ /*@null@*/ /*@out@*/ rpmTagData * p,
+ /*@null@*/ /*@out@*/ rpmTagCount * c,
int minMem)
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
@@ -1696,7 +1680,7 @@
/*@mods@*/
if (entry == NULL) {
if (type) type = 0;
- if (p) *p = NULL;
+ if (p) (*p).ptr = NULL;
if (c) *c = 0;
return 0;
}
@@ -1707,7 +1691,7 @@
if (type) *type = RPM_STRING_TYPE;
if (c) *c = 1;
/*@-dependenttrans@*/
- if (p) *p = headerFindI18NString(h, entry);
+ if (p) (*p).str = headerFindI18NString(h, entry);
/*@=dependenttrans@*/
break;
default:
@@ -1763,7 +1747,7 @@
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
{
- return intGetEntry(h, tag, type, (hPTR_t *)p, c, 0);
+ return intGetEntry(h, tag, (rpmTagType *)type, (rpmTagData *)p, (rpmTagCount *)c, 0);
}
/** \ingroup header
@@ -1786,7 +1770,7 @@
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
{
- return intGetEntry(h, tag, type, p, c, 1);
+ return intGetEntry(h, tag, (rpmTagType *)type, (rpmTagData *)p, (rpmTagCount *)c, 1);
}
int headerGetRawEntry(Header h, int_32 tag, rpmTagType * type, void * p, rpmTagCount * c)
@@ -1806,7 +1790,7 @@
return 0;
}
- rc = copyEntry(entry, (int_32 *)type, p, c, 0);
+ rc = copyEntry(entry, type, p, c, 0);
/* XXX 1 on success */
return ((rc == 1) ? 1 : 0);
@@ -2384,7 +2368,7 @@
if (tag)
*tag = entry->info.tag;
- rc = copyEntry(entry, type, p, c, 0);
+ rc = copyEntry(entry, (rpmTagType *)type, (rpmTagData *)p, (rpmTagCount *)c, 0);
/* XXX 1 on success */
return ((rc == 1) ? 1 : 0);
@@ -2918,7 +2902,7 @@
return 1;
}
- *chptr++ = '\0';;
+ *chptr++ = '\0';
if (*chptr != '{') {
hsa->errmsg = _("{ expected after ? in expression");
@@ -3807,21 +3791,21 @@
void headerCopyTags(Header headerFrom, Header headerTo, hTAG_t tagstocopy)
/*@modifies headerTo @*/
{
- int * p;
+ int * tagno;
if (headerFrom == headerTo)
return;
- for (p = tagstocopy; *p != 0; p++) {
- char *s;
- rpmTagType type;
- rpmTagCount count;
- if (headerIsEntry(headerTo, *p))
+ for (tagno = tagstocopy; *tagno != 0; tagno++) {
+ rpmTagType t;
+ rpmTagData p = { .ptr = NULL };
+ rpmTagCount c;
+ if (headerIsEntry(headerTo, *tagno))
continue;
- if (!headerGetEntryMinMemory(headerFrom, *p, (hTYP_t)&type, &s, &count))
+ if (!headerGetEntryMinMemory(headerFrom, *tagno, (hTYP_t)&t, &p, &c))
continue;
- (void) headerAddEntry(headerTo, *p, type, s, count);
- s = headerFreeData(s, type);
+ (void) headerAddEntry(headerTo, *tagno, t, p.ptr, c);
+ p.ptr = headerFreeData(p.ptr, t);
}
}
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic