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 18:31:28
Branch: HEAD Handle: 2008051216312700
Modified files:
rpm CHANGES
rpm/rpmdb hdrfmt.c header.c header_internal.h librpmdb.vers
pkgio.c rpmtag.h
Log:
- 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.
- jbj: add stat(2) of origin *.rpm to Header internal store.
Summary:
Revision Changes Path
1.2339 +4 -0 rpm/CHANGES
1.91 +39 -12 rpm/rpmdb/hdrfmt.c
1.159 +9 -9 rpm/rpmdb/header.c
1.41 +1 -1 rpm/rpmdb/header_internal.h
1.44 +1 -4 rpm/rpmdb/librpmdb.vers
1.79 +2 -4 rpm/rpmdb/pkgio.c
1.46 +7 -6 rpm/rpmdb/rpmtag.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.2338 -r1.2339 CHANGES
--- rpm/CHANGES 11 May 2008 19:11:02 -0000 1.2338
+++ rpm/CHANGES 12 May 2008 16:31:27 -0000 1.2339
@@ -1,5 +1,9 @@
5.1.0 -> 5.2a0:
+ - 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.
+ - jbj: add stat(2) of origin *.rpm to Header internal store.
- jbj: permit file digests through (e.g.) :stat(sha512) format extension.
- jbj: add :uuid(vN) format. UUIDv5 URI design & tag type coercion
todo++.
- jbj: rpmuuid: add i18n to error messages.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/hdrfmt.c
============================================================================
$ cvs diff -u -r1.90 -r1.91 hdrfmt.c
--- rpm/rpmdb/hdrfmt.c 11 May 2008 19:11:02 -0000 1.90
+++ rpm/rpmdb/hdrfmt.c 12 May 2008 16:31:27 -0000 1.91
@@ -1953,9 +1953,9 @@
fileSystem, internalState @*/
{
he->tag = RPMTAG_HEADERSTARTOFF;
- he->t = RPM_UINT32_TYPE;
- he->p.ui32p = xmalloc(sizeof(*he->p.ui32p));
- he->p.ui32p[0] = headerGetStartOff(h);
+ he->t = RPM_UINT64_TYPE;
+ he->p.ui64p = xmalloc(sizeof(*he->p.ui64p));
+ he->p.ui64p[0] = headerGetStartOff(h);
he->freeData = 1;
he->c = 1;
return 0;
@@ -1976,9 +1976,9 @@
fileSystem, internalState @*/
{
he->tag = RPMTAG_HEADERENDOFF;
- he->t = RPM_UINT32_TYPE;
- he->p.ui32p = xmalloc(sizeof(*he->p.ui32p));
- he->p.ui32p[0] = headerGetEndOff(h);
+ he->t = RPM_UINT64_TYPE;
+ he->p.ui64p = xmalloc(sizeof(*he->p.ui64p));
+ he->p.ui64p[0] = headerGetEndOff(h);
he->freeData = 1;
he->c = 1;
return 0;
@@ -2014,22 +2014,47 @@
/[EMAIL PROTECTED]@*/
/**
- * Retrieve package time from header.
+ * Retrieve *.rpm package st->st_mtime from header.
* @param h header
* @retval *he tag container
* @return 0 on success
*/
/[EMAIL PROTECTED]@*/
-static int pkgtimeTag(Header h, HE_t he)
+static int pkgmtimeTag(Header h, HE_t he)
/[EMAIL PROTECTED] rpmGlobalMacroContext, h_errno,
fileSystem, internalState @*/
/[EMAIL PROTECTED] he, rpmGlobalMacroContext,
fileSystem, internalState @*/
{
+ struct stat * st = headerGetStatbuf(h);
he->tag = RPMTAG_PACKAGETIME;
- he->t = RPM_UINT32_TYPE;
- he->p.ui32p = xmalloc(sizeof(*he->p.ui32p));
- he->p.ui32p[0] = headerGetTime(h);
+ he->t = RPM_UINT64_TYPE;
+ he->p.ui64p = xmalloc(sizeof(*he->p.ui64p));
+ he->p.ui64p[0] = st->st_mtime;
+ he->freeData = 1;
+ he->c = 1;
+ return 0;
+}
+/[EMAIL PROTECTED]@*/
+
+/**
+ * Retrieve *.rpm package st->st_size from header.
+ * @param h header
+ * @retval *he tag container
+ * @return 0 on success
+ */
+/[EMAIL PROTECTED]@*/
+static int pkgsizeTag(Header h, HE_t he)
+ /[EMAIL PROTECTED] rpmGlobalMacroContext, h_errno,
+ fileSystem, internalState @*/
+ /[EMAIL PROTECTED] he, rpmGlobalMacroContext,
+ fileSystem, internalState @*/
+{
+ struct stat * st = headerGetStatbuf(h);
+ he->tag = RPMTAG_PACKAGETIME;
+ he->t = RPM_UINT64_TYPE;
+ he->p.ui64p = xmalloc(sizeof(*he->p.ui64p));
+ he->p.ui64p[0] = st->st_size;
he->freeData = 1;
he->c = 1;
return 0;
@@ -3423,8 +3448,10 @@
{ .tagFunction = headerendoffTag } },
{ HEADER_EXT_TAG, "RPMTAG_PACKAGEORIGIN",
{ .tagFunction = pkgoriginTag } },
+ { HEADER_EXT_TAG, "RPMTAG_PACKAGESIZE",
+ { .tagFunction = pkgsizeTag } },
{ HEADER_EXT_TAG, "RPMTAG_PACKAGETIME",
- { .tagFunction = pkgtimeTag } },
+ { .tagFunction = pkgmtimeTag } },
{ HEADER_EXT_TAG, "RPMTAG_NVRA",
{ .tagFunction = nvraTag } },
{ HEADER_EXT_TAG, "RPMTAG_FILENAMES",
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.158 -r1.159 header.c
--- rpm/rpmdb/header.c 4 May 2008 13:14:50 -0000 1.158
+++ rpm/rpmdb/header.c 12 May 2008 16:31:27 -0000 1.159
@@ -1206,27 +1206,27 @@
return 0;
}
-uint32_t headerGetInstance(Header h)
+struct stat * headerGetStatbuf(Header h)
{
- return (h != NULL ? h->instance : 0);
+ return &h->sb;
}
-uint32_t headerSetInstance(Header h, uint32_t instance)
+int headerSetStatbuf(Header h, struct stat * st)
{
- if (h != NULL)
- h->instance = instance;
+ if (h != NULL && st != NULL)
+ memcpy(&h->sb, st, sizeof(h->sb));
return 0;
}
-uint32_t headerGetTime(Header h)
+uint32_t headerGetInstance(Header h)
{
- return (h != NULL ? h->time : 0);
+ return (h != NULL ? h->instance : 0);
}
-uint32_t headerSetTime(Header h, uint32_t time)
+uint32_t headerSetInstance(Header h, uint32_t instance)
{
if (h != NULL)
- h->time = time;
+ h->instance = instance;
return 0;
}
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header_internal.h
============================================================================
$ cvs diff -u -r1.40 -r1.41 header_internal.h
--- rpm/rpmdb/header_internal.h 23 Mar 2008 02:49:47 -0000 1.40
+++ rpm/rpmdb/header_internal.h 12 May 2008 16:31:27 -0000 1.41
@@ -87,7 +87,7 @@
void * blob; /*!< Header region blob. */
/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
const char * origin; /*!< Header origin (e.g. path or URL). */
- uint32_t time; /*!< Header time. */
+ 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. */
uint32_t endoff; /*!< Header ending byte offset in package. */
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/librpmdb.vers
============================================================================
$ cvs diff -u -r1.43 -r1.44 librpmdb.vers
--- rpm/rpmdb/librpmdb.vers 23 Mar 2008 13:01:38 -0000 1.43
+++ rpm/rpmdb/librpmdb.vers 12 May 2008 16:31:27 -0000 1.44
@@ -41,11 +41,8 @@
headerGetMagic;
headerGetOrigin;
headerGetEndOff;
- headerSetEndOff;
headerGetStartOff;
- headerSetStartOff;
- headerGetTime;
- headerSetTime;
+ headerGetStatbuf;
headerInit;
headerIsEntry;
headerLink;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/pkgio.c
============================================================================
$ cvs diff -u -r1.78 -r1.79 pkgio.c
--- rpm/rpmdb/pkgio.c 3 Apr 2008 16:40:46 -0000 1.78
+++ rpm/rpmdb/pkgio.c 12 May 2008 16:31:27 -0000 1.79
@@ -1351,12 +1351,10 @@
} else
(void) headerSetOrigin(h, origin);
}
- { struct stat sb;
+ { struct stat * st = headerGetStatbuf(h);
int saveno = errno;
- memset(&sb, 0, sizeof(sb));
- (void) fstat(Fileno(fd), &sb);
+ (void) fstat(Fileno(fd), st);
errno = saveno;
- (void) headerSetTime(h, (uint32_t)sb.st_mtime);
}
(void) headerSetStartOff(h, startoff);
(void) headerSetEndOff(h, fd->stats->ops[FDSTAT_READ].bytes);
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmtag.h
============================================================================
$ cvs diff -u -r1.45 -r1.46 rpmtag.h
--- rpm/rpmdb/rpmtag.h 9 May 2008 22:22:48 -0000 1.45
+++ rpm/rpmdb/rpmtag.h 12 May 2008 16:31:27 -0000 1.46
@@ -417,6 +417,7 @@
RPMTAG_HEADERSTARTOFF = 1211, /* i */
RPMTAG_HEADERENDOFF = 1212, /* i */
RPMTAG_PACKAGETIME = 1213, /* i */
+ RPMTAG_PACKAGESIZE = 1214, /* i */
/[EMAIL PROTECTED]@*/
RPMTAG_FIRSTFREE_TAG /*!< internal */
@@ -964,20 +965,20 @@
/[EMAIL PROTECTED] h @*/;
/** \ingroup header
- * Return header time.
+ * Return header stat(2) buffer (of origin *.rpm file).
* @param h header
- * @return header time
+ * @return header stat(2) buffer
*/
-uint32_t headerGetTime(/[EMAIL PROTECTED]@*/ Header h)
+struct stat * headerGetStatbuf(/[EMAIL PROTECTED]@*/ Header h)
/[EMAIL PROTECTED]/;
/** \ingroup header
- * Store header time.
+ * Copy into header stat(2) buffer (of origin *.rpm file).
* @param h header
- * @param origin new header time
+ * @param st new header stat(2) buffer
* @return 0 always
*/
-uint32_t headerSetTime(/[EMAIL PROTECTED]@*/ Header h, uint32_t time)
+int headerSetStatbuf(/[EMAIL PROTECTED]@*/ Header h, struct stat * st)
/[EMAIL PROTECTED] h @*/;
/** \ingroup header
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository [email protected]