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: 20-Oct-2007 17:37:39
Branch: HEAD Handle: 2007102016373900
Modified files:
rpm CHANGES
rpm/rpmdb header.c
Log:
- jbj: add tag data cache.
Summary:
Revision Changes Path
1.1742 +1 -0 rpm/CHANGES
1.102 +43 -1 rpm/rpmdb/header.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1741 -r1.1742 CHANGES
--- rpm/CHANGES 20 Oct 2007 15:10:36 -0000 1.1741
+++ rpm/CHANGES 20 Oct 2007 15:37:39 -0000 1.1742
@@ -1,4 +1,5 @@
4.5 -> 5.0:
+ - jbj: add tag data cache.
- jbj: eliminate rpmec data type.
- jbj: merge rpmec into HE_t.
- jbj: not yet for binary search retrieve using tagValue.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.101 -r1.102 header.c
--- rpm/rpmdb/header.c 20 Oct 2007 15:10:37 -0000 1.101
+++ rpm/rpmdb/header.c 20 Oct 2007 15:37:39 -0000 1.102
@@ -3837,6 +3837,7 @@
/**
* Create an extension cache.
* @param exts headerSprintf extensions
+ * @retval *necp no. of elements
* @return new extension cache
*/
static /*@only@*/ HE_t
@@ -3856,7 +3857,7 @@
ec = xcalloc(extNum+1, sizeof(*ec));
if (*necp)
- necp = extNum;
+ *necp = extNum;
return ec;
}
@@ -3884,6 +3885,42 @@
return NULL;
}
+/**
+ * Create tag data cache.
+ * @param ntc no. of elements
+ * @return new tag data cache
+ */
+static /*@only@*/ HE_t
+rpmtcNew(int ntc)
+ /*@*/
+{
+ HE_t ec = xcalloc(ntc+1, sizeof(*ec));
+ return ec;
+}
+
+/**
+ * Destroy tag data cache.
+ * @param tc tag data cache
+ * @param ntc no. of elements
+ * @return NULL always
+ */
+static /*@null@*/ HE_t
+rpmtcFree(/*@only@*/ HE_t tc, int ntc)
+ /*@modifies ec @*/
+{
+ int i;
+
+ if (tc != NULL)
+ for (i = 0; i < ntc; i++) {
+ HE_t he = tc + i;
+ if (he->freeData)
+ he->p.ptr = _free(he->p.ptr);
+ memset(tc, 0, sizeof(*tc));
+ }
+ tc = _free(tc);
+ return NULL;
+}
+
/** \ingroup header
* Return formatted output string from header tags.
* The returned string must be free()d.
@@ -3924,7 +3961,10 @@
if (parseFormat(hsa, hsa->fmt, &hsa->format, &hsa->numTokens, NULL, PARSER_BEGIN))
goto exit;
+ hsa->nec = 0;
hsa->ec = rpmecNew(hsa->exts, &hsa->nec);
+ hsa->ntc = hsa->numTokens;
+ hsa->tc = rpmtcNew(hsa->ntc);
hsa->val = xstrdup("");
tag =
@@ -3977,6 +4017,8 @@
hsa->ec = rpmecFree(hsa->exts, hsa->ec);
hsa->nec = 0;
+ hsa->tc = rpmtcFree(hsa->tc, hsa->ntc);
+ hsa->ntc = 0;
hsa->format = freeFormat(hsa->format, hsa->numTokens);
exit:
@@ .
Received on Sat Oct 20 17:37:39 2007