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: 02-Aug-2007 20:38:20
Branch: HEAD Handle: 2007080219381901
Modified files:
rpm CHANGES
rpm/rpmdb header.c
Log:
- teach headerGetExtension() to lookup extensions.
- chain through new headerCompundFormats.
Summary:
Revision Changes Path
1.1549 +2 -0 rpm/CHANGES
1.57 +38 -1 rpm/rpmdb/header.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1548 -r1.1549 CHANGES
--- rpm/CHANGES 2 Aug 2007 18:04:32 -0000 1.1548
+++ rpm/CHANGES 2 Aug 2007 18:38:19 -0000 1.1549
@@ -1,4 +1,6 @@
4.5 -> 5.0:
+ - jbj: teach headerGetExtension() to lookup extensions.
+ - jbj: chain through new headerCompundFormats.
- jbj: refactor most header extensions from -lrpm to -lrpmdb. heh, no filenames, very sick and sad.
- jbj: add headerGetExtension(), mapped to gud old stuff for now.
- jbj: skeletal configgery for standalone index tables.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.56 -r1.57 header.c
--- rpm/rpmdb/header.c 2 Aug 2007 17:30:12 -0000 1.56
+++ rpm/rpmdb/header.c 2 Aug 2007 18:38:20 -0000 1.57
@@ -1826,6 +1826,25 @@
return NULL;
}
+/*@unchecked@*/
+extern headerTagIndices rpmTags;
+
+/**
+ * Return tag name from value.
+ * @param tag tag value
+ * @return tag name, "(unknown)" on not found
+ */
+/*@-redecl@*/
+/*@unused@*/ static inline /*@observer@*/
+const char * tagName(int tag)
+ /*@*/
+{
+/*@-type@*/
+ return ((*rpmTags->tagName)(tag));
+/*@=type@*/
+}
+
+/*@=redecl@*/
/** \ingroup header
* Retrieve extension or tag value.
*
@@ -1844,7 +1863,25 @@
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
{
- return intGetEntry(h, tag, type, (hPTR_t *)p, c, 1);
+ const struct headerSprintfExtension_s * e = headerCompoundFormats;
+ const struct headerSprintfExtension_s * ext = NULL;
+ const char * str = tagName(tag);
+
+ while (e->name) {
+ if (e->type == HEADER_EXT_TAG && !xstrcasecmp(e->name + 7, str)) {
+ ext = e;
+ break;
+ }
+ e++;
+ if (e->type == HEADER_EXT_MORE)
+ e = e->u.more;
+ }
+
+ if (ext) {
+ int freeData = 0; /* XXX lots of memory leaks. */
+ return ext->u.tagFunction(h, type, p, c, &freeData);
+ } else
+ return intGetEntry(h, tag, type, (hPTR_t *)p, c, 1);
}
/** \ingroup header
@@ .
Received on Thu Aug 2 20:38:20 2007