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: 03-Dec-2007 15:42:04
Branch: HEAD Handle: 2007120314420301
Modified files:
rpm CHANGES
rpm/rpmdb hdrfmt.c tagname.c
Log:
- re-enable binary, not linear, tag lookups.
- strip leading "RPMTAG_" prefix, in tagValue lookup.
- test arbitrary bit, not tag lookup failure, for --yaml/--xml display.
Summary:
Revision Changes Path
1.1912 +3 -0 rpm/CHANGES
1.50 +17 -15 rpm/rpmdb/hdrfmt.c
1.21 +4 -0 rpm/rpmdb/tagname.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1911 -r1.1912 CHANGES
--- rpm/CHANGES 3 Dec 2007 13:11:45 -0000 1.1911
+++ rpm/CHANGES 3 Dec 2007 14:42:03 -0000 1.1912
@@ -1,4 +1,7 @@
5.0a4 -> 5.0b1:
+ - jbj: re-enable binary, not linear, tag lookups.
+ - jbj: strip leading "RPMTAG_" prefix, in tagValue lookup.
+ - jbj: test arbitrary bit, not tag lookup failure, for --yaml/--xml display.
- afb: pass level on, to %{__lzma}.
- jbj: revert binary search, todo++.
- jbj: using tagValue instead permits queries of arbitrary tags.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/hdrfmt.c
============================================================================
$ cvs diff -u -r1.49 -r1.50 hdrfmt.c
--- rpm/rpmdb/hdrfmt.c 3 Dec 2007 12:59:08 -0000 1.49
+++ rpm/rpmdb/hdrfmt.c 3 Dec 2007 14:42:04 -0000 1.50
@@ -2061,7 +2061,6 @@
const char * s;
char *t;
-#ifdef NOTYET
/* XXX Use bsearch on the "normal" rpmTagTable lookup. */
if (tbl == NULL || tbl == rpmTagTable) {
s = tagName(val);
@@ -2069,7 +2068,6 @@
*typep = tagType(val);
return s;
}
-#endif
for (; tbl->name != NULL; tbl++) {
if (tbl->val == val)
@@ -2097,17 +2095,19 @@
static uint32_t myTagValue(headerTagTableEntry tbl, const char * name)
/*@*/
{
-#ifdef NOTYET
+ uint32_t val = 0;
+
/* XXX Use bsearch on the "normal" rpmTagTable lookup. */
if (tbl == NULL || tbl == rpmTagTable)
return tagValue(name);
-#endif
for (; tbl->name != NULL; tbl++) {
- if (!xstrcasecmp(tbl->name, name))
- return tbl->val;
+ if (xstrcasecmp(tbl->name, name))
+ continue;
+ val = tbl->val;
+ break;
}
- return 0;
+ return val;
}
/**
@@ -2847,14 +2847,15 @@
!strcmp(tag->type, "yaml"));
if (isxml) {
- const char * tagN = myTagName(hsa->tags, tag->tagno, NULL);
- /* XXX display "Tag_0x01234567" for unknown tags. */
- if (tagN == NULL) {
+ const char * tagN;
+ /* XXX display "Tag_0x01234567" for arbitrary tags. */
+ if (tag->tagno & 0x40000000) {
(void) snprintf(numbuf, sizeof(numbuf), "Tag_0x%08x",
(unsigned) tag->tagno);
numbuf[sizeof(numbuf)-1] = '\0';
tagN = numbuf;
- }
+ } else
+ tagN = myTagName(hsa->tags, tag->tagno, NULL);
need = sizeof(" <rpmTag name=\"\">\n") + strlen(tagN);
te = t = hsaReserve(hsa, need);
te = stpcpy( stpcpy( stpcpy(te, " <rpmTag name=\""), tagN), "\">\n");
@@ -2862,9 +2863,9 @@
}
if (isyaml) {
rpmTag tagT = 0;
- const char * tagN = myTagName(hsa->tags, tag->tagno, &tagT);
- /* XXX display "Tag_0x01234567" for unknown tags. */
- if (tagN == NULL) {
+ const char * tagN;
+ /* XXX display "Tag_0x01234567" for arbitrary tags. */
+ if (tag->tagno & 0x40000000) {
(void) snprintf(numbuf, sizeof(numbuf), "Tag_0x%08x",
(unsigned) tag->tagno);
numbuf[sizeof(numbuf)-1] = '\0';
@@ -2873,7 +2874,8 @@
tagT = numElements > 1
? RPM_ARRAY_RETURN_TYPE : RPM_SCALAR_RETURN_TYPE;
/*@=type@*/
- }
+ } else
+ tagN = myTagName(hsa->tags, tag->tagno, &tagT);
need = sizeof(" : - ") + strlen(tagN);
te = t = hsaReserve(hsa, need);
*te++ = ' ';
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/tagname.c
============================================================================
$ cvs diff -u -r1.20 -r1.21 tagname.c
--- rpm/rpmdb/tagname.c 2 Dec 2007 23:06:02 -0000 1.20
+++ rpm/rpmdb/tagname.c 3 Dec 2007 14:42:04 -0000 1.21
@@ -320,6 +320,10 @@
rpmTag tag;
int xx;
+ /* XXX headerSprintf looks up by "RPMTAG_FOO", not "FOO". */
+ if (!strncasecmp(tagstr, "RPMTAG_", sizeof("RPMTAG_")-1))
+ tagstr += sizeof("RPMTAG_") - 1;
+
if (!xstrcasecmp(tagstr, "Packages"))
return RPMDBI_PACKAGES;
if (!xstrcasecmp(tagstr, "Depends"))
@@ .
Received on Mon Dec 3 15:42:04 2007