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: 10-Nov-2007 20:36:00
Branch: HEAD Handle: 2007111019355900
Added files:
rpm/rpmdb rpmwf.c rpmwf.h
Modified files:
rpm CHANGES
rpm/lib librpm.vers package.c
rpm/rpmdb Makefile.am librpmdb.vers pkgio.c
Log:
- hotwire -lxar linkage for the moment.
- add proof-of-concept rpmwf "wrapper format" to rpmdb.
- move rpmReadHeader from lib/package.c to rpmdb/pkgio.c.
Summary:
Revision Changes Path
1.1798 +3 -0 rpm/CHANGES
1.25 +0 -1 rpm/lib/librpm.vers
2.181 +0 -98 rpm/lib/package.c
1.86 +2 -2 rpm/rpmdb/Makefile.am
1.22 +1 -0 rpm/rpmdb/librpmdb.vers
1.26 +98 -0 rpm/rpmdb/pkgio.c
1.1 +375 -0 rpm/rpmdb/rpmwf.c
1.1 +82 -0 rpm/rpmdb/rpmwf.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1797 -r1.1798 CHANGES
--- rpm/CHANGES 10 Nov 2007 18:06:41 -0000 1.1797
+++ rpm/CHANGES 10 Nov 2007 19:35:59 -0000 1.1798
@@ -1,4 +1,7 @@
4.5 -> 5.0:
+ - jbj: hotwire -lxar linkage for the moment.
+ - jbj: add proof-of-concept rpmwf "wrapper format" to rpmdb.
+ - jbj: move rpmReadHeader from lib/package.c to rpmdb/pkgio.c.
- jbj: remove HGE_t casts everywhere.
- jbj: hmmm, rpm-perl seems to have issues on BIGENDIAN non-int32 retrieves.
- jbj: use HE_t instead of individual args. dunno HGE_t et al desired ...
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/librpm.vers
============================================================================
$ cvs diff -u -r1.24 -r1.25 librpm.vers
--- rpm/lib/librpm.vers 9 Nov 2007 21:15:45 -0000 1.24
+++ rpm/lib/librpm.vers 10 Nov 2007 19:35:59 -0000 1.25
@@ -250,7 +250,6 @@
rpmQVKArgs;
rpmQVSourcePoptTable;
rpmReadConfigFiles;
- rpmReadHeader;
rpmReadPackageFile;
rpmReadPackageManifest;
rpmRollback;
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/package.c
============================================================================
$ cvs diff -u -r2.180 -r2.181 package.c
--- rpm/lib/package.c 10 Nov 2007 18:06:42 -0000 2.180
+++ rpm/lib/package.c 10 Nov 2007 19:35:59 -0000 2.181
@@ -82,104 +82,6 @@
return 0;
}
-rpmRC rpmReadHeader(rpmts ts, void * _fd, Header *hdrp, const char ** msg)
-{
- FD_t fd = _fd;
- char buf[BUFSIZ];
- int_32 block[4];
- int_32 il;
- int_32 dl;
- int_32 * ei = NULL;
- size_t uc;
- unsigned char * b;
- size_t nb;
- Header h = NULL;
- const char * origin = NULL;
- rpmRC rc = RPMRC_FAIL; /* assume failure */
- int xx;
-
- buf[0] = '\0';
-
- if (hdrp)
- *hdrp = NULL;
- if (msg)
- *msg = NULL;
-
- memset(block, 0, sizeof(block));
- if ((xx = timedRead(fd, (char *)block, sizeof(block))) != sizeof(block)) {
- (void) snprintf(buf, sizeof(buf),
- _("hdr size(%d): BAD, read returned %d\n"), (int)sizeof(block), xx);
- goto exit;
- }
-
- b = NULL;
- nb = 0;
- (void) headerGetMagic(NULL, &b, &nb);
- if (memcmp(block, b, nb)) {
- (void) snprintf(buf, sizeof(buf), _("hdr magic: BAD\n"));
- goto exit;
- }
-
- il = ntohl(block[2]);
- if (hdrchkTags(il)) {
- (void) snprintf(buf, sizeof(buf),
- _("hdr tags: BAD, no. of tags(%d) out of range\n"), il);
-
- goto exit;
- }
- dl = ntohl(block[3]);
- if (hdrchkData(dl)) {
- (void) snprintf(buf, sizeof(buf),
- _("hdr data: BAD, no. of bytes(%d) out of range\n"), dl);
- goto exit;
- }
-
-/*@-sizeoftype@*/
- nb = (il * sizeof(struct entryInfo_s)) + dl;
-/*@=sizeoftype@*/
- uc = sizeof(il) + sizeof(dl) + nb;
- ei = xmalloc(uc);
- ei[0] = block[2];
- ei[1] = block[3];
- if ((xx = timedRead(fd, (char *)&ei[2], nb)) != nb) {
- (void) snprintf(buf, sizeof(buf),
- _("hdr blob(%u): BAD, read returned %d\n"), (unsigned)nb, xx);
- goto exit;
- }
-
- /* Sanity check header tags */
- rc = headerCheck(ts, ei, uc, msg);
- if (rc != RPMRC_OK)
- goto exit;
-
- /* OK, blob looks sane, load the header. */
- h = headerLoad(ei);
- if (h == NULL) {
- (void) snprintf(buf, sizeof(buf), _("hdr load: BAD\n"));
- goto exit;
- }
- h->flags |= HEADERFLAG_ALLOCATED;
- ei = NULL; /* XXX will be freed with header */
-
- /* Save the opened path as the header origin. */
- origin = fdGetOPath(fd);
- if (origin != NULL)
- (void) headerSetOrigin(h, origin);
-
-exit:
- if (hdrp && h && rc == RPMRC_OK)
- *hdrp = headerLink(h);
- ei = _free(ei);
- h = headerFree(h);
-
- if (msg != NULL && *msg == NULL && buf[0] != '\0') {
- buf[sizeof(buf)-1] = '\0';
- *msg = xstrdup(buf);
- }
-
- return rc;
-}
-
/*@-mods@*/
rpmRC rpmReadPackageFile(rpmts ts, void * _fd, const char * fn, Header * hdrp)
{
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/Makefile.am
============================================================================
$ cvs diff -u -r1.85 -r1.86 Makefile.am
--- rpm/rpmdb/Makefile.am 8 Nov 2007 15:15:40 -0000 1.85
+++ rpm/rpmdb/Makefile.am 10 Nov 2007 19:35:59 -0000 1.86
@@ -41,7 +41,7 @@
librpmdb_la_SOURCES = \
dbconfig.c fprint.c \
hdrfmt.c hdrNVR.c header.c header_internal.c legacy.c merge.c \
- pkgio.c poptDB.c rpmdb.c \
+ pkgio.c poptDB.c rpmdb.c rpmwf.c \
signature.c tagname.c tagtbl.c
librpmdb_la_LDFLAGS = -release $(LT_CURRENT).$(LT_REVISION)
if HAVE_LD_VERSION_SCRIPT
@@ -55,7 +55,7 @@
endif
if ENABLE_BUILD_MAXEXTLIBDEP
librpmdb_la_LDFLAGS += $(LDFLAGS)
-librpmdb_la_LIBADD += $(LIBS)
+librpmdb_la_LIBADD += $(LIBS) -lxar
endif
librpmdb_la_DEPENDENCIES = $(DBLIBOBJS)
librpmdb.la: $(librpmdb_la_OBJECTS) $(librpmdb_la_DEPENDENCIES)
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/librpmdb.vers
============================================================================
$ cvs diff -u -r1.21 -r1.22 librpmdb.vers
--- rpm/rpmdb/librpmdb.vers 20 Oct 2007 18:52:34 -0000 1.21
+++ rpm/rpmdb/librpmdb.vers 10 Nov 2007 19:35:59 -0000 1.22
@@ -84,6 +84,7 @@
rpmpkgRead;
rpmpkgSizeof;
rpmpkgWrite;
+ rpmReadHeader;
rpm_mergesort;
rpmTagTable;
rpmTagTableSize;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/pkgio.c
============================================================================
$ cvs diff -u -r1.25 -r1.26 pkgio.c
--- rpm/rpmdb/pkgio.c 10 Nov 2007 18:06:43 -0000 1.25
+++ rpm/rpmdb/pkgio.c 10 Nov 2007 19:35:59 -0000 1.26
@@ -1089,6 +1089,104 @@
return rc;
}
+rpmRC rpmReadHeader(rpmts ts, void * _fd, Header *hdrp, const char ** msg)
+{
+ FD_t fd = _fd;
+ char buf[BUFSIZ];
+ int_32 block[4];
+ int_32 il;
+ int_32 dl;
+ int_32 * ei = NULL;
+ size_t uc;
+ unsigned char * b;
+ size_t nb;
+ Header h = NULL;
+ const char * origin = NULL;
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ int xx;
+
+ buf[0] = '\0';
+
+ if (hdrp)
+ *hdrp = NULL;
+ if (msg)
+ *msg = NULL;
+
+ memset(block, 0, sizeof(block));
+ if ((xx = timedRead(fd, (char *)block, sizeof(block))) != sizeof(block)) {
+ (void) snprintf(buf, sizeof(buf),
+ _("hdr size(%d): BAD, read returned %d\n"), (int)sizeof(block), xx);
+ goto exit;
+ }
+
+ b = NULL;
+ nb = 0;
+ (void) headerGetMagic(NULL, &b, &nb);
+ if (memcmp(block, b, nb)) {
+ (void) snprintf(buf, sizeof(buf), _("hdr magic: BAD\n"));
+ goto exit;
+ }
+
+ il = ntohl(block[2]);
+ if (hdrchkTags(il)) {
+ (void) snprintf(buf, sizeof(buf),
+ _("hdr tags: BAD, no. of tags(%d) out of range\n"), il);
+
+ goto exit;
+ }
+ dl = ntohl(block[3]);
+ if (hdrchkData(dl)) {
+ (void) snprintf(buf, sizeof(buf),
+ _("hdr data: BAD, no. of bytes(%d) out of range\n"), dl);
+ goto exit;
+ }
+
+/*@-sizeoftype@*/
+ nb = (il * sizeof(struct entryInfo_s)) + dl;
+/*@=sizeoftype@*/
+ uc = sizeof(il) + sizeof(dl) + nb;
+ ei = xmalloc(uc);
+ ei[0] = block[2];
+ ei[1] = block[3];
+ if ((xx = timedRead(fd, (char *)&ei[2], nb)) != nb) {
+ (void) snprintf(buf, sizeof(buf),
+ _("hdr blob(%u): BAD, read returned %d\n"), (unsigned)nb, xx);
+ goto exit;
+ }
+
+ /* Sanity check header tags */
+ rc = headerCheck(ts, ei, uc, msg);
+ if (rc != RPMRC_OK)
+ goto exit;
+
+ /* OK, blob looks sane, load the header. */
+ h = headerLoad(ei);
+ if (h == NULL) {
+ (void) snprintf(buf, sizeof(buf), _("hdr load: BAD\n"));
+ goto exit;
+ }
+ h->flags |= HEADERFLAG_ALLOCATED;
+ ei = NULL; /* XXX will be freed with header */
+
+ /* Save the opened path as the header origin. */
+ origin = fdGetOPath(fd);
+ if (origin != NULL)
+ (void) headerSetOrigin(h, origin);
+
+exit:
+ if (hdrp && h && rc == RPMRC_OK)
+ *hdrp = headerLink(h);
+ ei = _free(ei);
+ h = headerFree(h);
+
+ if (msg != NULL && *msg == NULL && buf[0] != '\0') {
+ buf[sizeof(buf)-1] = '\0';
+ *msg = xstrdup(buf);
+ }
+
+ return rc;
+}
+
/**
* Read metadata header.
* @param fd file handle
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmwf.c
============================================================================
$ cvs diff -u -r0 -r1.1 rpmwf.c
--- /dev/null 2007-11-10 20:33:00 +0100
+++ rpmwf.c 2007-11-10 20:36:00 +0100
@@ -0,0 +1,375 @@
+
+#define RPM2XAR
+#include "system.h"
+#include <inttypes.h>
+#include <xar/xar.h>
+#include <rpmio.h>
+#include <rpmlib.h>
+
+#define _RPMWF_INTERNAL
+#include <rpmwf.h>
+
+#include "debug.h"
+
+int _rpmwf_debug = 0;
+
+rpmRC rpmwfFiniXAR(rpmwf wf)
+{
+if (_rpmwf_debug)
+fprintf(stderr, "*** rpmwfFiniXAR(%p)\n", wf);
+ if (wf->i) {
+ xar_iter_free(wf->i);
+ wf->i = NULL;
+ }
+ if (wf->x) {
+ xar_close(wf->x);
+ wf->x = NULL;
+ }
+ return RPMRC_OK;
+}
+
+rpmRC rpmwfInitXAR(rpmwf wf, const char * fn, const char * fmode)
+{
+ int flags = ((fmode && *fmode == 'w') ? WRITE : READ);
+
+if (_rpmwf_debug)
+fprintf(stderr, "*** rpmwfInitXAR(%p, %s, %s)\n", wf, fn, fmode);
+ if (fn == NULL)
+ fn = wf->fn;
+assert(fn);
+
+ wf->x = xar_open(fn, flags);
+ if (flags == READ) {
+ wf->i = xar_iter_new();
+ wf->first = 1;
+ }
+ return RPMRC_OK;
+}
+
+rpmRC rpmwfNextXAR(rpmwf wf)
+{
+if (_rpmwf_debug)
+fprintf(stderr, "*** rpmwfNextXAR(%p) first %d\n", wf, wf->first);
+ if (wf->first) {
+ wf->f = xar_file_first(wf->x, wf->i);
+ wf->first = 0;
+ } else
+ wf->f = xar_file_next(wf->i);
+
+ if (wf->f == NULL)
+ return RPMRC_NOTFOUND;
+
+ return RPMRC_OK;
+}
+
+rpmRC rpmwfPushXAR(rpmwf wf, const char * fn)
+{
+ char * b = NULL;
+ size_t nb = 0;
+
+ if (!strcmp(fn, "Lead")) {
+ b = wf->l;
+ nb = wf->nl;
+ } else
+ if (!strcmp(fn, "Signature")) {
+ b = wf->s;
+ nb = wf->ns;
+ } else
+ if (!strcmp(fn, "Header")) {
+ b = wf->h;
+ nb = wf->nh;
+ } else
+ if (!strcmp(fn, "Payload")) {
+ b = wf->p;
+ nb = wf->np;
+ }
+
+ if (wf->x && b && nb > 0) {
+ wf->f = xar_add_frombuffer(wf->x, NULL, fn, b, nb);
+ if (wf->f == NULL)
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+rpmRC rpmwfPullXAR(rpmwf wf, const char * fn)
+{
+ const char * path = xar_get_path(wf->f);
+ char * b = NULL;
+ size_t nb = 0;
+ rpmRC rc = RPMRC_OK;
+ int xx;
+
+#ifdef NOTYET
+ const char * name = NULL;
+ const char * type = NULL;
+
+ xx = xar_prop_get(wf->f, "name", &name);
+if (_rpmwf_debug)
+fprintf(stderr, "*** xx %d name %s\n", xx, name);
+ if (xx || name == NULL)
+ return RPMRC_NOTFOUND;
+
+ xx = xar_prop_get(wf->f, "type", &type);
+if (_rpmwf_debug)
+fprintf(stderr, "*** xx %d type %s\n", xx, type);
+ if (xx || type == NULL || strcmp(type, "file"))
+ return RPMRC_NOTFOUND;
+#endif
+
+ if (fn == NULL)
+ fn = path;
+ else
+ assert(!strcmp(fn, path));
+
+ xx = xar_extract_tobuffersz(wf->x, wf->f, &b, &nb);
+if (_rpmwf_debug)
+fprintf(stderr, "*** xx %d %p[%lu]\n", xx, b, (unsigned long)nb);
+ if (xx || b == NULL || nb == 0)
+ return RPMRC_NOTFOUND;
+
+if (_rpmwf_debug)
+fprintf(stderr, "*** %s %p[%lu]\n", xar_get_path(wf->f), b, (unsigned long)nb);
+ if (!strcmp(fn, "Lead")) {
+ wf->l = b;
+ wf->nl = nb;
+ } else
+ if (!strcmp(fn, "Signature")) {
+ wf->s = b;
+ wf->ns = nb;
+ } else
+ if (!strcmp(fn, "Header")) {
+ wf->h = b;
+ wf->nh = nb;
+ } else
+ if (!strcmp(fn, "Payload")) {
+ wf->p = b;
+ wf->np = nb;
+ } else
+ rc = RPMRC_NOTFOUND;
+
+ return rc;
+}
+
+rpmRC rpmwfFiniRPM(rpmwf wf)
+{
+ int xx;
+
+ if (wf->b && wf->b != (void *)-1) {
+ xx = munmap(wf->b, wf->nb);
+ wf->b = NULL;
+ }
+ if (wf->fd) {
+ (void) Fclose(wf->fd);
+ wf->fd = NULL;
+ }
+ return RPMRC_OK;
+}
+
+static size_t hSize(uint_32 *p)
+{
+ return (8 + 8 + 16 * ntohl(p[2]) + ntohl(p[3]));
+}
+
+rpmRC rpmwfInitRPM(rpmwf wf, const char * fn, const char * fmode)
+{
+if (_rpmwf_debug)
+fprintf(stderr, "*** rpmwfInitRPM(%p, %s, %s)\n", wf, fn, fmode);
+ if (fn == NULL)
+ fn = wf->fn;
+assert(fn);
+
+ wf->fd = Fopen(fn, fmode);
+if (_rpmwf_debug)
+fprintf(stderr, "*** Fopen(%s, %s) fd %p nb %u\n", fn, fmode, wf->fd, (unsigned)wf->nb);
+ if (wf->fd == NULL || Ferror(wf->fd)) {
+ (void) rpmwfFiniRPM(wf);
+ return RPMRC_NOTFOUND;
+ }
+
+ if (fmode && *fmode == 'r') {
+ wf->b = mmap(NULL, wf->nb, PROT_READ, MAP_SHARED, Fileno(wf->fd), 0L);
+
+ if (wf->b == (void *)-1) {
+ wf->b = NULL;
+ (void) rpmwfFiniRPM(wf);
+ return RPMRC_NOTFOUND;
+ }
+
+ wf->l = wf->b;
+ wf->nl = 96;
+
+ wf->s = wf->l + wf->nl;
+ wf->ns = hSize((void *)wf->s);
+ wf->ns += (8 - (wf->ns % 8)); /* padding */
+
+ wf->h = wf->s + wf->ns;
+ wf->nh = hSize((void *)wf->h);
+
+ wf->p = wf->h + wf->nh;
+ wf->np = wf->nb;
+ wf->np -= wf->nl + wf->ns + wf->nh;
+ }
+
+ return RPMRC_OK;
+}
+
+rpmRC rpmwfPushRPM(rpmwf wf, const char * fn)
+{
+ char * b = NULL;
+ size_t nb = 0;
+
+ if (!strcmp(fn, "Lead")) {
+ b = wf->l;
+ nb = wf->nl;
+ } else
+ if (!strcmp(fn, "Signature")) {
+ b = wf->s;
+ nb = wf->ns;
+ } else
+ if (!strcmp(fn, "Header")) {
+ b = wf->h;
+ nb = wf->nh;
+ } else
+ if (!strcmp(fn, "Payload")) {
+ b = wf->p;
+ nb = wf->np;
+ }
+
+ if (!(b && nb > 0))
+ return RPMRC_NOTFOUND;
+
+ if (Fwrite(b, 1, nb, wf->fd) != nb)
+ return RPMRC_FAIL;
+
+ return RPMRC_OK;
+}
+
+rpmwf rpmwfFree(rpmwf wf)
+{
+if (_rpmwf_debug)
+fprintf(stderr, "*** rpmwfFree(%p)\n", wf);
+ if (wf) {
+
+ if (wf->b == NULL) {
+ wf->l = _free(wf->l);
+ wf->s = _free(wf->s);
+ wf->h = _free(wf->h);
+ wf->p = _free(wf->p);
+ }
+
+ (void) rpmwfFiniXAR(wf);
+ (void) rpmwfFiniRPM(wf);
+
+ wf->fn = _free(wf->fn);
+ wf = _free(wf);
+ }
+ return NULL;
+}
+
+rpmwf rpmwfNew(const char * fn)
+{
+ struct stat sb, *st = &sb;
+ rpmwf wf;
+ int xx;
+
+ if ((xx = Stat(fn, st)) < 0)
+ return NULL;
+ wf = xcalloc(1, sizeof(*wf));
+ wf->fn = xstrdup(fn);
+ wf->nb = st->st_size;
+
+if (_rpmwf_debug)
+fprintf(stderr, "*** rpmwfNew(%s) wf %p nb %u\n", wf->fn, wf, (unsigned)wf->nb);
+ return wf;
+}
+
+rpmwf rdRPM(const char * rpmfn)
+{
+ rpmwf wf;
+ rpmRC rc;
+
+ if ((wf = rpmwfNew(rpmfn)) == NULL)
+ return wf;
+
+ if ((rc = rpmwfInitRPM(wf, NULL, "r")) != RPMRC_OK) {
+ wf = rpmwfFree(wf);
+ return NULL;
+ }
+
+if (_rpmwf_debug)
+fprintf(stderr, "*** rdRPM(%s) wf %p\n", rpmfn, wf);
+
+ return wf;
+}
+
+rpmwf rdXAR(const char * xarfn)
+{
+ rpmwf wf;
+ rpmRC rc;
+
+ if ((wf = rpmwfNew(xarfn)) == NULL)
+ return wf;
+
+ if ((rc = rpmwfInitXAR(wf, NULL, "r")) != RPMRC_OK) {
+ wf = rpmwfFree(wf);
+ return NULL;
+ }
+if (_rpmwf_debug)
+fprintf(stderr, "*** rdXAR(%s) wf %p\n", xarfn, wf);
+
+ while ((rc = rpmwfNextXAR(wf)) == RPMRC_OK) {
+ rc = rpmwfPullXAR(wf, NULL);
+ }
+
+ (void) rpmwfFiniXAR(wf);
+ return wf;
+}
+
+rpmRC wrXAR(const char * xarfn, rpmwf wf)
+{
+ rpmRC rc;
+
+ if ((rc = rpmwfInitXAR(wf, xarfn, "w")) != RPMRC_OK)
+ goto exit;
+if (_rpmwf_debug)
+fprintf(stderr, "*** wrXAR(%s, %p)\n", xarfn, wf);
+
+ if ((rc = rpmwfPushXAR(wf, "Lead")) != RPMRC_OK)
+ goto exit;
+ if ((rc = rpmwfPushXAR(wf, "Signature")) != RPMRC_OK)
+ goto exit;
+ if ((rc = rpmwfPushXAR(wf, "Header")) != RPMRC_OK)
+ goto exit;
+ if ((rc = rpmwfPushXAR(wf, "Payload")) != RPMRC_OK)
+ goto exit;
+
+exit:
+ (void) rpmwfFiniXAR(wf);
+
+ return rc;
+}
+
+rpmRC wrRPM(const char * rpmfn, rpmwf wf)
+{
+ rpmRC rc;
+
+ if ((rc = rpmwfInitRPM(wf, rpmfn, "w")) != RPMRC_OK)
+ goto exit;
+if (_rpmwf_debug)
+fprintf(stderr, "*** wrRPM(%s, %p)\n", rpmfn, wf);
+
+ if ((rc = rpmwfPushRPM(wf, "Lead")) != RPMRC_OK)
+ goto exit;
+ if ((rc = rpmwfPushRPM(wf, "Signature")) != RPMRC_OK)
+ goto exit;
+ if ((rc = rpmwfPushRPM(wf, "Header")) != RPMRC_OK)
+ goto exit;
+ if ((rc = rpmwfPushRPM(wf, "Payload")) != RPMRC_OK)
+ goto exit;
+
+exit:
+ (void) rpmwfFiniRPM(wf);
+
+ return rc;
+}
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmwf.h
============================================================================
$ cvs diff -u -r0 -r1.1 rpmwf.h
--- /dev/null 2007-11-10 20:33:00 +0100
+++ rpmwf.h 2007-11-10 20:36:00 +0100
@@ -0,0 +1,82 @@
+#ifndef H_RPMWF
+#define H_RPMWF
+
+/*@unchecked@*/
+extern int _rpmwf_debug;
+
+typedef /*@abstract@*/ struct rpmwf_s * rpmwf;
+
+#ifdef _RPMWF_INTERNAL
+struct rpmwf_s {
+ const char * fn;
+ FD_t fd;
+ void * b;
+ size_t nb;
+ char * l;
+ size_t nl;
+ char * s;
+ size_t ns;
+ char * h;
+ size_t nh;
+ char * p;
+ size_t np;
+ xar_t x;
+ xar_file_t f;
+ xar_iter_t i;
+ int first;
+};
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rpmRC rpmwfFiniXAR(rpmwf wf)
+ /*@*/;
+
+rpmRC rpmwfInitXAR(rpmwf wf, const char * fn, const char * fmode)
+ /*@*/;
+
+rpmRC rpmwfNextXAR(rpmwf wf)
+ /*@*/;
+
+rpmRC rpmwfPushXAR(rpmwf wf, const char * fn)
+ /*@*/;
+
+rpmRC rpmwfPullXAR(rpmwf wf, const char * fn)
+ /*@*/;
+
+rpmRC rpmwfFiniRPM(rpmwf wf)
+ /*@*/;
+
+rpmRC rpmwfInitRPM(rpmwf wf, const char * fn, const char * fmode)
+ /*@*/;
+
+rpmRC rpmwfPushRPM(rpmwf wf, const char * fn)
+ /*@*/;
+
+rpmwf rpmwfFree(rpmwf wf)
+ /*@*/;
+
+rpmwf rpmwfNew(const char * fn)
+ /*@*/;
+
+rpmwf rdRPM(const char * rpmfn)
+ /*@*/;
+
+rpmwf rdXAR(const char * xarfn)
+ /*@*/;
+
+rpmRC wrXAR(const char * xarfn, rpmwf wf)
+ /*@*/;
+
+rpmRC wrRPM(const char * rpmfn, rpmwf wf)
+ /*@*/;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_RPMWF */
@@ .
Received on Sat Nov 10 20:36:00 2007