RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: [EMAIL PROTECTED]
Module: rpm Date: 12-May-2008 20:17:57
Branch: HEAD Handle: 2008051218175600
Modified files:
rpm CHANGES
rpm/rpmdb hdrfmt.c header.c header_internal.h librpmdb.vers
rpmtag.h
Log:
- jbj: preserve stat(2) & digest through headerReload().
- jbj: get rid of copy-n-paste typos, add "l" type markers to rpmtag.h.
- jbj: add RPMTAG_PACKAGEDIGEST extension as RPM_STRING_TYPE.
- jbj: add digest of origin *.rpm to Header internal store.
Summary:
Revision Changes Path
1.2340 +4 -0 rpm/CHANGES
1.92 +30 -1 rpm/rpmdb/hdrfmt.c
1.160 +23 -0 rpm/rpmdb/header.c
1.42 +1 -0 rpm/rpmdb/header_internal.h
1.45 +7 -0 rpm/rpmdb/librpmdb.vers
1.47 +23 -4 rpm/rpmdb/rpmtag.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.2339 -r1.2340 CHANGES
--- rpm/CHANGES 12 May 2008 16:31:27 -0000 1.2339
+++ rpm/CHANGES 12 May 2008 18:17:56 -0000 1.2340
@@ -1,5 +1,9 @@
5.1.0 -> 5.2a0:
+ - jbj: preserve stat(2) & digest through headerReload().
+ - jbj: get rid of copy-n-paste typos, add "l" type markers to rpmtag.h.
+ - jbj: add RPMTAG_PACKAGEDIGEST extension as RPM_STRING_TYPE.
+ - jbj: add digest of origin *.rpm to Header internal store.
- jbj: add RPMTAG_PACKAGESIZE extension as RPM_UINT64_TYPE.
- jbj: rework RPMTAG_PACKAGETIME extension as RPM_UINT64_TYPE.
- jbj: rework header{Get,Set}Time as header{Get,Stat}Statbuf methods.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/hdrfmt.c
============================================================================
$ cvs diff -u -r1.91 -r1.92 hdrfmt.c
--- rpm/rpmdb/hdrfmt.c 12 May 2008 16:31:27 -0000 1.91
+++ rpm/rpmdb/hdrfmt.c 12 May 2008 18:17:56 -0000 1.92
@@ -2014,6 +2014,33 @@
/[EMAIL PROTECTED]@*/
/**
+ * Retrieve package digest from header.
+ * @param h header
+ * @retval *he tag container
+ * @return 0 on success
+ */
+/[EMAIL PROTECTED]@*/
+static int pkgdigestTag(Header h, HE_t he)
+ /[EMAIL PROTECTED] rpmGlobalMacroContext, h_errno,
+ fileSystem, internalState @*/
+ /[EMAIL PROTECTED] he, rpmGlobalMacroContext,
+ fileSystem, internalState @*/
+{
+ const char * digest;
+
+ he->tag = RPMTAG_PACKAGEDIGEST;
+ if ((digest = headerGetDigest(h)) != NULL)
+ {
+ he->t = RPM_STRING_TYPE;
+ he->p.str = xstrdup(digest);
+ he->c = 1;
+ he->freeData = 1;
+ }
+ return 0;
+}
+/[EMAIL PROTECTED]@*/
+
+/**
* Retrieve *.rpm package st->st_mtime from header.
* @param h header
* @retval *he tag container
@@ -2051,7 +2078,7 @@
fileSystem, internalState @*/
{
struct stat * st = headerGetStatbuf(h);
- he->tag = RPMTAG_PACKAGETIME;
+ he->tag = RPMTAG_PACKAGESIZE;
he->t = RPM_UINT64_TYPE;
he->p.ui64p = xmalloc(sizeof(*he->p.ui64p));
he->p.ui64p[0] = st->st_size;
@@ -3446,6 +3473,8 @@
{ .tagFunction = headerstartoffTag } },
{ HEADER_EXT_TAG, "RPMTAG_HEADERENDOFF",
{ .tagFunction = headerendoffTag } },
+ { HEADER_EXT_TAG, "RPMTAG_PACKAGEDIGEST",
+ { .tagFunction = pkgdigestTag } },
{ HEADER_EXT_TAG, "RPMTAG_PACKAGEORIGIN",
{ .tagFunction = pkgoriginTag } },
{ HEADER_EXT_TAG, "RPMTAG_PACKAGESIZE",
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.159 -r1.160 header.c
--- rpm/rpmdb/header.c 12 May 2008 16:31:27 -0000 1.159
+++ rpm/rpmdb/header.c 12 May 2008 18:17:56 -0000 1.160
@@ -154,6 +154,7 @@
h->index = _free(h->index);
}
h->origin = _free(h->origin);
+ h->digest = _free(h->digest);
/[EMAIL PROTECTED]@*/
if (_hdr_stats) {
@@ -176,6 +177,7 @@
(void) memcpy(h->magic, header_magic, sizeof(h->magic));
h->blob = NULL;
h->origin = NULL;
+ h->digest = NULL;
h->instance = 0;
h->indexAlloced = INDEX_MALLOC_SIZE;
h->indexUsed = 0;
@@ -1218,6 +1220,20 @@
return 0;
}
+const char * headerGetDigest(Header h)
+{
+ return (h != NULL ? h->digest : NULL);
+}
+
+int headerSetDigest(Header h, const char * digest)
+{
+ if (h != NULL) {
+ h->digest = _free(h->digest);
+ h->digest = xstrdup(digest);
+ }
+ return 0;
+}
+
uint32_t headerGetInstance(Header h)
{
return (h != NULL ? h->instance : 0);
@@ -1259,6 +1275,8 @@
Header nh;
void * uh;
const char * origin = (h->origin != NULL ? xstrdup(h->origin) : NULL);
+ const char * digest = (h->digest != NULL ? xstrdup(h->digest) : NULL);
+ struct stat sb = h->sb; /* structure assignment */
uint32_t instance = h->instance;
int xx;
@@ -1284,6 +1302,11 @@
xx = headerSetOrigin(nh, origin);
origin = _free(origin);
}
+ if (digest != NULL) {
+ xx = headerSetDigest(nh, digest);
+ digest = _free(digest);
+ }
+ nh->sb = sb; /* structure assignment */
xx = (int) headerSetInstance(nh, instance);
return nh;
}
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header_internal.h
============================================================================
$ cvs diff -u -r1.41 -r1.42 header_internal.h
--- rpm/rpmdb/header_internal.h 12 May 2008 16:31:27 -0000 1.41
+++ rpm/rpmdb/header_internal.h 12 May 2008 18:17:56 -0000 1.42
@@ -87,6 +87,7 @@
void * blob; /*!< Header region blob. */
/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
const char * origin; /*!< Header origin (e.g. path or URL). */
+ const char * digest; /*!< Header digest (from origin *.rpm file) */
struct stat sb; /*!< Header stat(2) (from origin *.rpm file) */
uint32_t instance; /*!< Header instance (if from rpmdb). */
uint32_t startoff; /*!< Header starting byte offset in
package. */
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/librpmdb.vers
============================================================================
$ cvs diff -u -r1.44 -r1.45 librpmdb.vers
--- rpm/rpmdb/librpmdb.vers 12 May 2008 16:31:27 -0000 1.44
+++ rpm/rpmdb/librpmdb.vers 12 May 2008 18:17:56 -0000 1.45
@@ -37,12 +37,19 @@
headerFini;
headerFree;
headerGet;
+ headerGetDigest;
+ headerSetDigest;
headerGetInstance;
+ headerSetInstance;
headerGetMagic;
headerGetOrigin;
+ headerSetOrigin;
headerGetEndOff;
+ headerSetEndOff;
headerGetStartOff;
+ headerSetStartOff;
headerGetStatbuf;
+ headerSetStatbuf;
headerInit;
headerIsEntry;
headerLink;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmtag.h
============================================================================
$ cvs diff -u -r1.46 -r1.47 rpmtag.h
--- rpm/rpmdb/rpmtag.h 12 May 2008 16:31:27 -0000 1.46
+++ rpm/rpmdb/rpmtag.h 12 May 2008 18:17:56 -0000 1.47
@@ -414,10 +414,11 @@
RPMTAG_STAT = 1208, /* s[] stat(2) from disk
extension */
RPMTAG_ORIGINTID = 1209, /* i[] */
RPMTAG_ORIGINTIME = 1210, /* i[] */
- RPMTAG_HEADERSTARTOFF = 1211, /* i */
- RPMTAG_HEADERENDOFF = 1212, /* i */
- RPMTAG_PACKAGETIME = 1213, /* i */
- RPMTAG_PACKAGESIZE = 1214, /* i */
+ RPMTAG_HEADERSTARTOFF = 1211, /* l */
+ RPMTAG_HEADERENDOFF = 1212, /* l */
+ RPMTAG_PACKAGETIME = 1213, /* l */
+ RPMTAG_PACKAGESIZE = 1214, /* l */
+ RPMTAG_PACKAGEDIGEST = 1215, /* s */
/[EMAIL PROTECTED]@*/
RPMTAG_FIRSTFREE_TAG /*!< internal */
@@ -982,6 +983,24 @@
/[EMAIL PROTECTED] h @*/;
/** \ingroup header
+ * Return digest of origin *.rpm file.
+ * @param h header
+ * @return header digest
+ */
+/[EMAIL PROTECTED]@*/
+const char * headerGetDigest(/[EMAIL PROTECTED]@*/ Header h)
+ /[EMAIL PROTECTED]/;
+
+/** \ingroup header
+ * Store digest of origin *.rpm file.
+ * @param h header
+ * @param st new header digest
+ * @return 0 always
+ */
+int headerSetDigest(/[EMAIL PROTECTED]@*/ Header h, const char * digest)
+ /[EMAIL PROTECTED] h @*/;
+
+/** \ingroup header
* Return header instance (if from rpmdb).
* @param h header
* @return header instance
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository [email protected]