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: 21-Nov-2007 15:24:36
Branch: HEAD Handle: 2007112114243501
Modified files:
rpm CHANGES
rpm/rpmdb header.c header.h pkgio.c
rpm/rpmio rpmio_internal.h
Log:
- create rpmWriteHeader with error msg returns.
- use rpmReadHeader with error msg returns.
- eliminate HDRread/HDRwrite vectors.
Summary:
Revision Changes Path
1.1862 +3 -0 rpm/CHANGES
1.122 +0 -127 rpm/rpmdb/header.c
1.67 +0 -22 rpm/rpmdb/header.h
1.49 +89 -68 rpm/rpmdb/pkgio.c
2.90 +2 -2 rpm/rpmio/rpmio_internal.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1861 -r1.1862 CHANGES
--- rpm/CHANGES 21 Nov 2007 13:31:37 -0000 1.1861
+++ rpm/CHANGES 21 Nov 2007 14:24:35 -0000 1.1862
@@ -1,4 +1,7 @@
5.0a2 -> 5.0a3:
+ - jbj: create rpmWriteHeader with error msg returns.
+ - jbj: use rpmReadHeader with error msg returns.
+ - jbj: eliminate HDRread/HDRwrite vectors.
- jbj: revert "rebase rpmParseState_e +256", more than rebasing needs doing.
- jbj: convert+remove headerRead() from the API, use rpmpkgRead instead.
- jbj: rebase rpmParseState_e +256 to permit rpmRC to be returned too.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.121 -r1.122 header.c
--- rpm/rpmdb/header.c 15 Nov 2007 23:14:53 -0000 1.121
+++ rpm/rpmdb/header.c 21 Nov 2007 14:24:35 -0000 1.122
@@ -1410,131 +1410,6 @@
}
/** \ingroup header
- * Read (and load) header from file handle.
- * @param _fd file handle
- * @return header (or NULL on error)
- */
-static /*@null@*/
-Header headerRead(void * _fd)
- /*@modifies _fd @*/
-{
- FD_t fd = _fd;
- uint32_t block[4];
- uint32_t reserved;
- uint32_t * ei = NULL;
- uint32_t il;
- uint32_t dl;
- uint32_t magic;
- Header h = NULL;
- size_t len;
- int i;
-
- memset(block, 0, sizeof(block));
- i = 2;
- i += 2; /* XXX HEADER_MAGIC_YES */
-
- /*@-type@*/ /* FIX: cast? */
- if (timedRead(fd, (char *)block, i*sizeof(*block)) != (i * sizeof(*block)))
- goto exit;
- /*@=type@*/
-
- i = 0;
-
- { /* XXX HEADER_MAGIC_YES */
- magic = block[i++];
- if (!( !memcmp(&magic, header_magic, sizeof(magic))
- || !memcmp(&magic, sigh_magic, sizeof(magic))
- || !memcmp(&magic, meta_magic, sizeof(magic))
- ))
- goto exit;
- reserved = block[i++];
- }
-
- il = (uint32_t) ntohl(block[i]); i++;
- dl = (uint32_t) ntohl(block[i]); i++;
-
- /*@-sizeoftype@*/
- len = sizeof(il) + sizeof(dl) + (il * sizeof(struct entryInfo_s)) + dl;
- /*@=sizeoftype@*/
-
- /* Sanity checks on header intro. */
- if (hdrchkTags(il) || hdrchkData(dl) || len > headerMaxbytes)
- goto exit;
-
- ei = xmalloc(len);
- ei[0] = (uint32_t) htonl(il);
- ei[1] = (uint32_t) htonl(dl);
- len -= sizeof(il) + sizeof(dl);
-
- /*@-type@*/ /* FIX: cast? */
- if (timedRead(fd, (char *)&ei[2], len) != len)
- goto exit;
- /*@=type@*/
-
- h = headerLoad(ei);
-
- { const char * origin = fdGetOPath(fd);
- if (origin != NULL)
- (void) headerSetOrigin(h, origin);
- }
-
-exit:
- if (h) {
- if (h->flags & HEADERFLAG_ALLOCATED)
- ei = _free(ei);
- h->flags |= HEADERFLAG_ALLOCATED;
- } else if (ei)
- ei = _free(ei);
- /*@-mustmod@*/ /* FIX: timedRead macro obscures annotation */
- return h;
- /*@-mustmod@*/
-}
-
-/** \ingroup header
- * Write (with unload) header to file handle.
- * @param _fd file handle
- * @param h header
- * @return 0 on success, 1 on error
- */
-static
-int headerWrite(void * _fd, /*@null@*/ Header h)
- /*@globals fileSystem @*/
- /*@modifies _fd, h, fileSystem @*/
-{
- FD_t fd = _fd;
- ssize_t nb;
- size_t length;
- const void * uh;
-
- if (h == NULL)
- return 1;
- uh = headerUnload(h, &length);
- if (uh == NULL)
- return 1;
- { /* XXX HEADER_MAGIC_YES */
- unsigned char mymagic[sizeof(header_magic)];
-
- /* XXX create new magic from region marker. */
- memcpy(mymagic, header_magic, sizeof(header_magic));
- if (_newmagic && length > 8+3)
- mymagic[3] = ((unsigned char *)uh)[8+3];
- /*@-sizeoftype@*/
- nb = Fwrite(mymagic, sizeof(char), sizeof(mymagic), fd);
- /*@=sizeoftype@*/
- if (nb != sizeof(header_magic))
- goto exit;
- }
-
- /*@-sizeoftype@*/
- nb = Fwrite(uh, sizeof(char), length, fd);
- /*@=sizeoftype@*/
-
-exit:
- uh = _free(uh);
- return (nb == length ? 0 : 1);
-}
-
-/** \ingroup header
* Check if tag is in header.
* @param h header
* @param tag tag
@@ -4070,8 +3945,6 @@
headerCopy,
headerLoad,
headerCopyLoad,
- headerRead,
- headerWrite,
headerIsEntry,
headerFreeTag,
headerGetExtension,
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.h
============================================================================
$ cvs diff -u -r1.66 -r1.67 header.h
--- rpm/rpmdb/header.h 15 Nov 2007 23:14:53 -0000 1.66
+++ rpm/rpmdb/header.h 21 Nov 2007 14:24:35 -0000 1.67
@@ -515,26 +515,6 @@
/*@*/;
/** \ingroup header
- * Read (and load) header from file handle.
- * @param fd file handle
- * @return header (or NULL on error)
- */
-typedef
-/*@null@*/ Header (*HDRread) (void * fd)
- /*@modifies fd @*/;
-
-/** \ingroup header
- * Write (with unload) header to file handle.
- * @param fd file handle
- * @param h header
- * @return 0 on success, 1 on error
- */
-typedef
-int (*HDRwrite) (void * fd, /*@null@*/ Header h)
- /*@globals fileSystem @*/
- /*@modifies fd, h, fileSystem @*/;
-
-/** \ingroup header
* Check if tag is in header.
* @param h header
* @param tag tag
@@ -844,8 +824,6 @@
HDRcopy hdrcopy;
HDRload hdrload;
HDRcopyload hdrcopyload;
- HDRread hdrread;
- HDRwrite hdrwrite;
HDRisentry hdrisentry;
HDRfreetag hdrfreetag;
HDRext hdrext;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/pkgio.c
============================================================================
$ cvs diff -u -r1.48 -r1.49 pkgio.c
--- rpm/rpmdb/pkgio.c 21 Nov 2007 00:25:04 -0000 1.48
+++ rpm/rpmdb/pkgio.c 21 Nov 2007 14:24:35 -0000 1.49
@@ -41,8 +41,9 @@
/*@access pgpDig @*/
/*@access pgpDigParams @*/
/*@access Header @*/ /* XXX compared with NULL */
-/*@access entryInfo @*/ /* XXX rdSignature */
-/*@access indexEntry @*/ /* XXX rdSignature */
+/*@access HV_t @*/
+/*@access entryInfo @*/
+/*@access indexEntry @*/
/*@access FD_t @*/ /* XXX stealing digests */
/*@unchecked@*/
@@ -51,33 +52,77 @@
/*@unchecked@*/
static int _print_pkts = 0;
-/*===============================================*/
-/** \ingroup header
- * Read (and load) header from file handle.
- * @param _fd file handle
- * @return header (or NULL on error)
- */
-/*@unused@*/ static inline
-/*@null@*/ Header headerRead(void * _fd)
- /*@modifies _fd @*/
-{
- return hdrVec->hdrread(_fd);
-}
+/*@-redecl@*/
+/*@unchecked@*/
+extern int _newmagic;
+/*@=redecl@*/
+
+/*@-type@*/
+/*@observer@*/ /*@unchecked@*/
+static unsigned char sigh_magic[8] = {
+ 0x8e, 0xad, 0xe8, 0x3e, 0x00, 0x00, 0x00, 0x00
+};
+/*@=type@*/
+/*===============================================*/
/** \ingroup header
* Write (with unload) header to file handle.
- * @param _fd file handle
+ * @param fd file handle
* @param h header
- * @return 0 on success, 1 on error
+ * @return RPMRC_OK on success
*/
-/*@unused@*/ static inline
-int headerWrite(void * _fd, /*@null@*/ Header h)
- /*@modifies _fd, h @*/
-{
- /*@-abstract@*/
- if (h == NULL) return 0;
- /*@=abstract@*/
- return (h2hv(h)->hdrwrite) (_fd, h);
+static
+rpmRC rpmWriteHeader(FD_t fd, /*@null@*/ Header h, /*@null@*/ const char ** msg)
+ /*@globals fileSystem @*/
+ /*@modifies fd, h, fileSystem @*/
+{
+ const void * uh = NULL;
+ ssize_t nb;
+ size_t length;
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+
+ if (h == NULL) {
+ if (msg)
+ *msg = xstrdup(_("write of NULL header"));
+ goto exit;
+ }
+
+ uh = headerUnload(h, &length);
+ if (uh == NULL) {
+ if (msg)
+ *msg = xstrdup(_("headerUnload failed"));
+ goto exit;
+ }
+
+ { unsigned char * hmagic = NULL;
+ size_t nmagic = 0;
+
+ (void) headerGetMagic(NULL, &hmagic, &nmagic);
+ nb = Fwrite(hmagic, sizeof(hmagic[0]), nmagic, fd);
+ if (nb != nmagic || Ferror(fd)) {
+ if (msg)
+ *msg = (nb > 0
+ ? xstrdup(_("short write of header magic"))
+ : xstrdup(Fstrerror(fd)) );
+ goto exit;
+ }
+ }
+
+ /*@-sizeoftype@*/
+ nb = Fwrite(uh, sizeof(char), length, fd);
+ /*@=sizeoftype@*/
+ if (nb != length || Ferror(fd)) {
+ if (msg)
+ *msg = (nb > 0
+ ? xstrdup(_("short write of header"))
+ : xstrdup(Fstrerror(fd)) );
+ goto exit;
+ }
+ rc = RPMRC_OK;
+
+exit:
+ uh = _free(uh);
+ return rc;
}
/*===============================================*/
@@ -498,18 +543,6 @@
/*===============================================*/
-/*@-redecl@*/
-/*@unchecked@*/
-extern int _newmagic;
-/*@=redecl@*/
-
-/*@-type@*/
-/*@observer@*/ /*@unchecked@*/
-static unsigned char sigh_magic[8] = {
- 0x8e, 0xad, 0xe8, 0x3e, 0x00, 0x00, 0x00, 0x00
-};
-/*@=type@*/
-
/**
* Write signature header.
* @param fd file handle
@@ -527,11 +560,10 @@
size_t sigSize;
size_t pad;
rpmRC rc = RPMRC_OK;
- int xx;
- xx = headerWrite(fd, sigh);
- if (xx)
- return RPMRC_FAIL;
+ rc = rpmWriteHeader(fd, sigh, msg);
+ if (rc != RPMRC_OK)
+ return rc;
sigSize = headerSizeof(sigh);
pad = (8 - (sigSize % 8)) % 8;
@@ -1159,9 +1191,10 @@
* @retval *msg verification error message (or NULL)
* @return RPMRC_OK on success
*/
-static rpmRC rpmReadHeader(FD_t fd, Header *hdrp, const char ** msg)
+static rpmRC rpmReadHeader(FD_t fd, /*@null@*/ Header * hdrp,
+ /*@null@*/ const char ** msg)
/*@globals fileSystem, internalState @*/
- /*@modifies dig, *_fd, *hdrp, *msg, fileSystem, internalState @*/
+ /*@modifies fd, *hdrp, *msg, fileSystem, internalState @*/
{
rpmwf wf = fdGetWF(fd);
pgpDig dig = fdGetDig(fd);
@@ -1178,15 +1211,12 @@
rpmRC rc = RPMRC_FAIL; /* assume failure */
int xx;
+ /* Create (if not already) a signature parameters container. */
if (dig == NULL) {
- *hdrp = headerRead(fd);
- if (*hdrp == NULL) {
- if (msg)
- *msg = xstrdup(Fstrerror(fd));
- return RPMRC_FAIL;
- }
- return RPMRC_OK;
+ dig = pgpDigNew(0);
+ (void) fdSetDig(fd, dig);
}
+
buf[0] = '\0';
if (hdrp)
@@ -1305,19 +1335,20 @@
if ((rc = rpmwfNextXAR(wf)) != RPMRC_OK) return rc;
if ((rc = rpmwfPullXAR(wf, "Header")) != RPMRC_OK) return rc;
h = headerLoad(wf->h);
+ if (h == NULL) {
+ if (msg)
+ *msg = xstrdup(_("headerLoad failed"));
+ rc = RPMRC_FAIL;
+ }
} else {
rc = rpmReadHeader(fd, &h, msg);
+}
+
if (rc != RPMRC_OK)
return rc;
-}
- if (h == NULL) {
- if (msg)
- *msg = xstrdup(Fstrerror(fd));
- rc = RPMRC_FAIL;
- } else if (hdrp) {
+ if (hdrp)
*hdrp = headerLink(h);
- h = headerFree(h);
- }
+ h = headerFree(h);
return rc;
}
@@ -1334,17 +1365,7 @@
/*@modifies fd, ptr, *msg, fileSystem @*/
{
Header h = ptr;
- rpmRC rc = RPMRC_OK;
- int xx;
-
- xx = headerWrite(fd, h);
- if (xx) {
- if (msg)
- *msg = xstrdup(Fstrerror(fd));
- rc = RPMRC_FAIL;
- }
-
- return rc;
+ return rpmWriteHeader(fd, h, msg);
}
/*@=globuse@*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmio_internal.h
============================================================================
$ cvs diff -u -r2.89 -r2.90 rpmio_internal.h
--- rpm/rpmio/rpmio_internal.h 20 Nov 2007 19:24:01 -0000 2.89
+++ rpm/rpmio/rpmio_internal.h 21 Nov 2007 14:24:36 -0000 2.90
@@ -337,9 +337,9 @@
/*@*/
{
FDSANE(fd);
- /*@-retexpose -refcounttrans -usereleased @*/
+ /*@-compdef -retexpose -refcounttrans -usereleased @*/
return fd->dig;
- /*@=retexpose =refcounttrans =usereleased @*/
+ /*@=compdef =retexpose =refcounttrans =usereleased @*/
}
/** \ingroup rpmio
@@ .
Received on Wed Nov 21 15:24:36 2007