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: 29-Sep-2007 20:18:58
Branch: HEAD Handle: 2007092919185700
Modified files:
rpm CHANGES
rpm/build pack.c
rpm/lib psm.c
rpm/rpmdb pkgio.c pkgio.h
Log:
- add metadata header stubs to pkgio.c.
Summary:
Revision Changes Path
1.1648 +1 -0 rpm/CHANGES
2.228 +2 -2 rpm/build/pack.c
2.230 +1 -1 rpm/lib/psm.c
1.8 +96 -19 rpm/rpmdb/pkgio.c
1.3 +5 -6 rpm/rpmdb/pkgio.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1647 -r1.1648 CHANGES
--- rpm/CHANGES 29 Sep 2007 17:06:25 -0000 1.1647
+++ rpm/CHANGES 29 Sep 2007 18:18:57 -0000 1.1648
@@ -1,4 +1,5 @@
4.5 -> 5.0:
+ - jbj: add metadata header stubs to pkgio.c.
- jbj: move rpmtsFindPubkey() and rpmtsOp() to rpmdb for forward linkage.
- jbj: add _RPMTS_PRINT to keep rpmrollback.c happy.
- jbj: rearrange package.c internals to new locations.
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/pack.c
============================================================================
$ cvs diff -u -r2.227 -r2.228 pack.c
--- rpm/build/pack.c 8 Sep 2007 22:42:36 -0000 2.227
+++ rpm/build/pack.c 29 Sep 2007 18:18:57 -0000 2.228
@@ -316,7 +316,7 @@
}
{ const char item[] = "Lead";
- size_t nl = rpmpkgSizeof(item);
+ size_t nl = rpmpkgSizeof(item, NULL);
if (nl == 0) {
rc = RPMRC_FAIL;
@@ -702,7 +702,7 @@
/* Write the lead section into the package. */
if (!_nolead) {
const char item[] = "Lead";
- size_t nl = rpmpkgSizeof(item);
+ size_t nl = rpmpkgSizeof(item, NULL);
rpmRC _rc;
if (nl == 0)
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/psm.c
============================================================================
$ cvs diff -u -r2.229 -r2.230 psm.c
--- rpm/lib/psm.c 22 Sep 2007 21:27:48 -0000 2.229
+++ rpm/lib/psm.c 29 Sep 2007 18:18:57 -0000 2.230
@@ -1794,7 +1794,7 @@
if (!_nolead) {
static const char item[] = "Lead";
const char * NEVR = rpmteNEVR(psm->te);
- size_t nb = rpmpkgSizeof(item);
+ size_t nb = rpmpkgSizeof(item, NULL);
if (nb == 0)
rc = RPMRC_FAIL;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/pkgio.c
============================================================================
$ cvs diff -u -r1.7 -r1.8 pkgio.c
--- rpm/rpmdb/pkgio.c 29 Sep 2007 17:06:25 -0000 1.7
+++ rpm/rpmdb/pkgio.c 29 Sep 2007 18:18:57 -0000 1.8
@@ -453,7 +453,7 @@
*/
static rpmRC wrSignature(FD_t fd, void * ptr, const char ** msg)
/*@globals fileSystem @*/
- /*@modifies fd, sigh, fileSystem @*/
+ /*@modifies fd, ptr, fileSystem @*/
{
Header sigh = ptr;
static unsigned char zero[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
@@ -491,7 +491,7 @@
int fdno = Fileno(fd);
struct stat sb, * st = &sb;
size_t expected;
- size_t nl = rpmpkgSizeof("Lead");
+ size_t nl = rpmpkgSizeof("Lead", NULL);
/* HACK: workaround for davRead wiring. */
if (fdno == 123456789) {
@@ -1060,16 +1060,108 @@
return rc;
}
+/**
+ * Return size of Header.
+ * @param ptr metadata header (at least 32 bytes)
+ * @return size of header
+ */
+static size_t szHeader(const void * ptr)
+{
+ uint32_t p[4];
+ memcpy(p, ptr, sizeof(p));
+ return (8 + 8 + 16 * ntohl(p[2]) + ntohl(p[3]));
+}
+
+/**
+ * Check metadata header.
+ * @param fd file handle
+ * @param ptr metadata header
+ * @retval *msg failure msg
+ * @return rpmRC return code
+ */
+static rpmRC ckHeader(FD_t fd, const void * ptr, const char ** msg)
+ /*@globals fileSystem @*/
+ /*@modifies fd, ptr, fileSystem @*/
+{
+ rpmRC rc = RPMRC_OK;
+
+ return rc;
+}
+
+/**
+ * Read metadata header.
+ * @param fd file handle
+ * @retval *ptr metadata header (or NULL)
+ * @retval *msg failure msg
+ * @return rpmRC return code
+ */
+static rpmRC rdHeader(FD_t fd, void * ptr, const char ** msg)
+ /*@globals fileSystem @*/
+ /*@modifies fd, *ptr, *msg, fileSystem @*/
+{
+ Header * hdrp = ptr;
+ Header h = NULL;
+ rpmRC rc = RPMRC_OK;
+
+ h = headerRead(fd);
+ if (h == NULL)
+ rc = RPMRC_FAIL;
+ else if (hdrp) {
+ *hdrp = headerLink(h);
+ h = headerFree(h);
+ }
+
+ return rc;
+}
+
+/**
+ * Write metadata header.
+ * @param fd file handle
+ * @param ptr metadata header
+ * @retval *msg failure msg
+ * @return rpmRC return code
+ */
+static rpmRC wrHeader(FD_t fd, void * ptr, const char ** msg)
+ /*@globals fileSystem @*/
+ /*@modifies fd, ptr, fileSystem @*/
+{
+ Header h = ptr;
+ rpmRC rc = RPMRC_OK;
+ int xx;
+
+ xx = headerWrite(fd, h);
+ if (xx)
+ rc = RPMRC_FAIL;
+
+ return rc;
+}
+
/*===============================================*/
-size_t rpmpkgSizeof(const char * fn)
+size_t rpmpkgSizeof(const char * fn, const void * ptr)
{
size_t len = 0;
- if (!strcmp(fn, "Lead"));
+ if (!strcmp(fn, "Lead"))
return 96; /* RPMLEAD_SIZE */
+ if (!strcmp(fn, "Signature")) {
+ size_t nb = szHeader(ptr);
+ nb += (8 - (nb % 8)); /* padding */
+ return nb;
+ }
+ if (!strcmp(fn, "Header"))
+ return szHeader(ptr);
return len;
}
+rpmRC rpmpkgCheck(const char * fn, FD_t fd, const void * ptr, const char ** msg)
+{
+ rpmRC rc = RPMRC_FAIL;
+
+ if (!strcmp(fn, "Header"))
+ return ckHeader(fd, ptr, msg);
+ return rc;
+}
+
rpmRC rpmpkgRead(const char * fn, FD_t fd, void * ptr, const char ** msg)
{
rpmRC rc = RPMRC_FAIL;
@@ -1078,10 +1170,8 @@
return rdLead(fd, ptr, msg);
if (!strcmp(fn, "Signature"))
return rdSignature(fd, ptr, msg);
-#ifdef NOTYET
if (!strcmp(fn, "Header"))
return rdHeader(fd, ptr, msg);
-#endif
return rc;
}
@@ -1093,20 +1183,7 @@
return wrLead(fd, ptr, msg);
if (!strcmp(fn, "Signature"))
return wrSignature(fd, ptr, msg);
-#ifdef NOTYET
if (!strcmp(fn, "Header"))
return wrHeader(fd, ptr, msg);
-#endif
- return rc;
-}
-
-#ifdef NOTYET
-rpmRC rpmpkgCheck(const char * fn, FD_t fd, void * ptr, const char ** msg)
-{
- rpmRC rc = RPMRC_FAIL;
-
- if (!strcmp(fn, "Lead"))
- return ckLead(fd, ptr, msg);
return rc;
}
-#endif
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/pkgio.h
============================================================================
$ cvs diff -u -r1.2 -r1.3 pkgio.h
--- rpm/rpmdb/pkgio.h 8 Sep 2007 18:22:56 -0000 1.2
+++ rpm/rpmdb/pkgio.h 29 Sep 2007 18:18:57 -0000 1.3
@@ -16,16 +16,17 @@
/**
* Return size of item in bytes.
* @param fn item name
+ * @param ptr item buffer
* @return size of item in bytes.
*/
-size_t rpmpkgSizeof(const char * fn)
+size_t rpmpkgSizeof(const char * fn, /*@null@*/ const void * ptr)
/*@*/;
/**
* Write item onto file descriptor.
* @param fn item name
* @param fd file handle
- * @retval *ptr item buffer
+ * @param ptr item buffer
* @retval *msg item check failure message
* @return RPMRC_OK on success
*/
@@ -41,22 +42,20 @@
* @retval *msg item check failure message
* @return RPMRC_OK on success
*/
-rpmRC rpmpkgRead(const char * fn, FD_t fd, /*@null@*/ /*@out@*/void * ptr,
+rpmRC rpmpkgRead(const char * fn, FD_t fd, /*@null@*/ /*@out@*/ void * ptr,
const char ** msg)
/*@modifies fd, *ptr, *msg @*/;
-#ifdef NOTYET
/**
* Verify item integrity.
* @param fn item name
* @param fd file handle
- * @retval *ptr item buffer
+ * @param ptr item buffer
* @retval *msg item check failure message
* @return RPMRC_OK on success
*/
rpmRC rpmpkgCheck(const char * fn, FD_t fd, const void * ptr, const char ** msg)
/*@modifies fd, *msg @*/;
-#endif
#ifdef __cplusplus
}
@@ .
Received on Sat Sep 29 20:18:58 2007