RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ rpmchecksig.c rpmgi.c rpm/rpmdb/ head...

From: Jeff Johnson <jbj@rpm5.org>
Date: Wed 21 Nov 2007 - 22:58:48 CET
Message-Id: <20071121215848.762D334845C@rpm5.org>
  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 22:58:48
  Branch: HEAD                             Handle: 2007112121584602

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmchecksig.c rpmgi.c
    rpm/rpmdb               header.c header_internal.h pkgio.c pkgio.h
    rpm/rpmio               rpmio.c rpmio_internal.h

  Log:
    - functional (and leak free) queries of both *.rpm and *.xar.
    - transparently recognize XAR magic when reading.
    - eliminate rpmpkgClean, rpmxar memory free on Fclose instead.

  Summary:
    Revision    Changes     Path
    1.1865      +4  -0      rpm/CHANGES
    1.191       +0  -16     rpm/lib/rpmchecksig.c
    2.42        +0  -2      rpm/lib/rpmgi.c
    1.123       +7  -2      rpm/rpmdb/header.c
    1.33        +1  -0      rpm/rpmdb/header_internal.h
    1.51        +84 -99     rpm/rpmdb/pkgio.c
    1.12        +0  -8      rpm/rpmdb/pkgio.h
    1.106       +2  -1      rpm/rpmio/rpmio.c
    2.91        +7  -8      rpm/rpmio/rpmio_internal.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1864 -r1.1865 CHANGES
  --- rpm/CHANGES	21 Nov 2007 18:21:46 -0000	1.1864
  +++ rpm/CHANGES	21 Nov 2007 21:58:46 -0000	1.1865
  @@ -1,4 +1,8 @@
   5.0a2 -> 5.0a3:
  +    - jbj: functional (and leak free) queries of both *.rpm and *.xar.
  +    - jbj: transparently recognize XAR magic when reading.
  +    - jbj: eliminate rpmpkgClean, rpmxar memory free on Fclose instead.
  +    - jbj: use refcounted rpmxar attached to FD_t to handle xar state.
       - jbj: switch to using rpmxar instead of rpmwf most everywhere.
       - jbj: stub in rpmio/rpmxar.c xar payload extraction.
       - jbj: create rpmWriteHeader with error msg returns.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmchecksig.c
  ============================================================================
  $ cvs diff -u -r1.190 -r1.191 rpmchecksig.c
  --- rpm/lib/rpmchecksig.c	21 Nov 2007 18:21:47 -0000	1.190
  +++ rpm/lib/rpmchecksig.c	21 Nov 2007 21:58:47 -0000	1.191
  @@ -16,8 +16,6 @@
   #include "rpmgi.h"
   
   #include <rpmxar.h>
  -#define	_RPMWF_INTERNAL
  -#include <rpmwf.h>
   #include <pkgio.h>
   
   #include "signature.h"
  @@ -27,7 +25,6 @@
   /*@access Header @*/		/* XXX void * arg */
   /*@access pgpDig @*/
   /*@access pgpDigParams @*/
  -/*@access rpmwf @*/
   
   /*@unchecked@*/
   int _print_pkts = 0;
  @@ -782,7 +779,6 @@
   	/*@globals fileSystem, internalState @*/
   	/*@modifies fd, fileSystem, internalState @*/
   {
  -rpmwf wf = fdGetWF(fd);
   pgpDig dig = fdGetDig(fd);
       HGE_t hge = headerGetExtension;
       HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
  @@ -833,7 +829,6 @@
   	h = headerFree(h);
       }
   
  -if (wf == NULL) {
       /* Read the payload from the package. */
       while ((count = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0)
   	dig->nbytes += count;
  @@ -841,7 +836,6 @@
   	rpmlog(RPMLOG_ERR, _("%s: Fread failed: %s\n"), fn, Fstrerror(fd));
   	goto exit;
       }
  -}
   
       /* XXX Steal the digest-in-progress from the file handle. */
       for (i = fd->ndigests - 1; i >= 0; i--) {
  @@ -869,15 +863,6 @@
   	}
       }
   
  -if (wf != NULL) {
  -    if (dig->md5ctx)
  -	(void) rpmDigestUpdate(dig->md5ctx, wf->h, wf->nh);
  -    if ((xx = rpmxarNext(wf->xar)) != 0)	return RPMRC_FAIL;
  -    if ((rc = rpmwfPullXAR(wf, "Payload")) != RPMRC_OK) return rc;
  -    if (dig->md5ctx)
  -	(void) rpmDigestUpdate(dig->md5ctx, wf->p, wf->np);
  -}
  -
       rc = RPMRC_OK;	/* XXX unnecessary */
   
   exit:
  @@ -1198,7 +1183,6 @@
   	}
   
   	if (fd != NULL) {
  -	    (void) rpmpkgClean(fd);
   	    xx = Fclose(fd);
   	}
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmgi.c
  ============================================================================
  $ cvs diff -u -r2.41 -r2.42 rpmgi.c
  --- rpm/lib/rpmgi.c	21 Nov 2007 00:25:04 -0000	2.41
  +++ rpm/lib/rpmgi.c	21 Nov 2007 21:58:47 -0000	2.42
  @@ -143,7 +143,6 @@
   	/* XXX what if path needs expansion? */
   	rpmRC rpmrc = rpmReadPackageFile(gi->ts, fd, path, &h);
   
  -	(void) rpmpkgClean(fd);
   	(void) Fclose(fd);
   
   	switch (rpmrc) {
  @@ -499,7 +498,6 @@
   	gi->fts = NULL;
       }
       if (gi->fd != NULL) {
  -	(void) rpmpkgClean(gi->fd);
   	(void) Fclose(gi->fd);
   	gi->fd = NULL;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.122 -r1.123 header.c
  --- rpm/rpmdb/header.c	21 Nov 2007 14:24:35 -0000	1.122
  +++ rpm/rpmdb/header.c	21 Nov 2007 21:58:47 -0000	1.123
  @@ -265,8 +265,13 @@
   	for (i = 0; i < h->indexUsed; i++, entry++) {
   	    if ((h->flags & HEADERFLAG_ALLOCATED) && ENTRY_IS_REGION(entry)) {
   		if (entry->length > 0) {
  -		    int_32 * ei = entry->data;
  -		    if ((ei - 2) == h->blob) h->blob = _free(h->blob);
  +		    uint32_t * ei = entry->data;
  +		    if ((ei - 2) == h->blob) {
  +			/* Adjust for XAR including 8b of magic. */
  +			if (h->flags & HEADERFLAG_XARALLOCATED)
  +			    h->blob = &((char *)h->blob)[-8];
  +			h->blob = _free(h->blob);
  +		    }
   		    entry->data = NULL;
   		}
   	    } else if (!ENTRY_IN_REGION(entry)) {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header_internal.h
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 header_internal.h
  --- rpm/rpmdb/header_internal.h	17 Nov 2007 16:56:21 -0000	1.32
  +++ rpm/rpmdb/header_internal.h	21 Nov 2007 21:58:47 -0000	1.33
  @@ -102,6 +102,7 @@
   #define	HEADERFLAG_LEGACY	(1 << 2) /*!< Header came from legacy source? */
   #define HEADERFLAG_DEBUG	(1 << 3) /*!< Debug this header? */
   #define HEADERFLAG_SIGNATURE	(1 << 4) /*!< Signature header? */
  +#define HEADERFLAG_XARALLOCATED	(1 << 5) /*!< Did XAR allocate the region? */
   /*@refs@*/
       int nrefs;			/*!< Reference count. */
   };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 pkgio.c
  --- rpm/rpmdb/pkgio.c	21 Nov 2007 18:21:47 -0000	1.50
  +++ rpm/rpmdb/pkgio.c	21 Nov 2007 21:58:47 -0000	1.51
  @@ -27,15 +27,12 @@
   #include "rpmts.h"
   
   #include <rpmxar.h>
  -#define	_RPMWF_INTERNAL
  -#include <rpmwf.h>
   
   #include "header_internal.h"
   #include "signature.h"
   #include "debug.h"
   
   /*@access rpmts @*/
  -/*@access rpmwf @*/
   /*@access pgpDig @*/
   /*@access pgpDigParams @*/
   /*@access Header @*/            /* XXX compared with NULL */
  @@ -462,7 +459,7 @@
   	/*@globals fileSystem @*/
   	/*@modifies *ptr, *msg, fileSystem @*/
   {
  -rpmwf wf = fdGetWF(fd);
  +    rpmxar xar = fdGetXAR(fd);
       struct rpmlead ** leadp = ptr;
       struct rpmlead * l = xcalloc(1, sizeof(*l));
       char buf[BUFSIZ];
  @@ -472,12 +469,7 @@
       buf[0] = '\0';
       if (leadp != NULL) *leadp = NULL;
   
  -if (wf != NULL) {
  -    if ((xx = rpmxarNext(wf->xar)) != 0)	return RPMRC_FAIL;
  -    if ((rc = rpmwfPullXAR(wf, "Lead")) != RPMRC_OK) return rc;
  -assert(wf->nl == sizeof(*l));
  -    memcpy(l, wf->l, sizeof(*l));
  -} else {
  +    /* Read the first 96 bytes of the file. */
       if ((xx = (int) timedRead(fd, (char *)l, sizeof(*l))) != (int) sizeof(*l)) {
   	if (Ferror(fd)) {
   	    (void) snprintf(buf, sizeof(buf),
  @@ -492,7 +484,35 @@
   	}
   	goto exit;
       }
  -}
  +
  +    /* Attach rpmxar handler to fd if this is a xar archive. */
  +    if (xar == NULL) {
  +	unsigned char * bh = (unsigned char *)l;
  +	if (bh[0] == 'x' && bh[1] == 'a' && bh[2] == 'r' && bh[3] == '!') {
  +	    const char * fn = fdGetOPath(fd);
  +	    xar = rpmxarNew(fn, "r");
  +	    fdSetXAR(fd, xar);
  +	    (void) rpmxarFree(xar);
  +	}
  +    }
  +
  +    /* With XAR, read lead from a xar archive file called "Lead". */
  +    if (xar != NULL) {
  +	void *b;
  +	size_t nb;
  +	if ((xx = rpmxarNext(xar)) != 0)	return RPMRC_FAIL;
  +	if ((xx = rpmxarPull(xar, "Lead", &b, &nb)) != 0) return RPMRC_FAIL;
  +	if (nb != sizeof(*l)) {
  +	    b = _free(b);
  +	    (void) snprintf(buf, sizeof(buf),
  +		_("lead size(%u): BAD, xar read(%u)"),
  +		(unsigned)sizeof(*l), (unsigned)nb);
  +	    rc = RPMRC_NOTFOUND;
  +	    goto exit;
  +	}
  +	memcpy(l, b, nb);
  +	b = _free(b);
  +    }
   
       l->type = (unsigned short) ntohs(l->type);
       l->archnum = (unsigned short) ntohs(l->archnum);
  @@ -623,7 +643,7 @@
   	/*@globals fileSystem @*/
   	/*@modifies *ptr, *msg, fileSystem @*/
   {
  -rpmwf wf = fdGetWF(fd);
  +rpmxar xar = fdGetXAR(fd);
       HGE_t hge = headerGetExtension;
       HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
       Header * sighp = ptr;
  @@ -643,17 +663,19 @@
       rpmRC rc = RPMRC_FAIL;		/* assume failure */
       int xx;
       uint32_t i;
  +    unsigned char * bh = NULL;
  +    size_t nbh = 0;
   
       buf[0] = '\0';
       if (sighp)
   	*sighp = NULL;
   
       memset(block, 0, sizeof(block));
  -if (wf != NULL) {
  -    if ((xx = rpmxarNext(wf->xar)) != 0)	return RPMRC_FAIL;
  -    if ((rc = rpmwfPullXAR(wf, "Signature")) != RPMRC_OK) return rc;
  -assert(wf->ns > sizeof(block));
  -    memcpy(block, wf->s, sizeof(block));
  +if (xar != NULL) {
  +    if ((xx = rpmxarNext(xar)) != 0)	return RPMRC_FAIL;
  +    if ((xx = rpmxarPull(xar, "Signature", &bh, &nbh)) != 0) return RPMRC_FAIL;
  +assert(nbh > sizeof(block));
  +    memcpy(block, bh, sizeof(block));
   } else {
       if ((xx = (int) timedRead(fd, (void *)block, sizeof(block))) != (int) sizeof(block)) {
   	(void) snprintf(buf, sizeof(buf),
  @@ -691,21 +713,21 @@
   /*@-sizeoftype@*/
       nb = (il * sizeof(struct entryInfo_s)) + dl;
   /*@=sizeoftype@*/
  -    ei = xmalloc(sizeof(il) + sizeof(dl) + nb);
  -    ei[0] = block[2];
  -    ei[1] = block[3];
  -    pe = (entryInfo) &ei[2];
  -    dataStart = (unsigned char *) (pe + il);
  -if (wf != NULL) {
  -assert(wf->ns >= (sizeof(block)+nb));
  -    memcpy(pe, wf->s+sizeof(block), nb);
  +if (xar != NULL) {
  +assert(nbh >= (sizeof(block)+nb));
  +    ei = &((uint32_t *)bh)[2];
   } else {
  -    if ((xx = (int) timedRead(fd, (void *)pe, nb)) != (int) nb) {
  +    ei = xmalloc(sizeof(il) + sizeof(dl) + nb);
  +    if ((xx = (int) timedRead(fd, (void *)&ei[2], nb)) != (int) nb) {
   	(void) snprintf(buf, sizeof(buf),
   		_("sigh blob(%u): BAD, read returned %d\n"), (unsigned) nb, xx);
   	goto exit;
       }
   }
  +    ei[0] = block[2];
  +    ei[1] = block[3];
  +    pe = (entryInfo) &ei[2];
  +    dataStart = (unsigned char *) (pe + il);
       
       /* Check (and convert) the 1st tag element. */
       xx = headerVerifyInfo(1, dl, pe, &entry->info, 0);
  @@ -789,6 +811,7 @@
   	(void) snprintf(buf, sizeof(buf), _("sigh load: BAD\n"));
   	goto exit;
       }
  +if (xar != NULL) sigh->flags |= HEADERFLAG_XARALLOCATED;
       sigh->flags |= HEADERFLAG_ALLOCATED;
       sigh->flags |= HEADERFLAG_SIGNATURE;
       if (_newmagic)	/* XXX FIXME: sigh needs its own magic. */
  @@ -1170,9 +1193,6 @@
       rpmRC rc = RPMRC_OK;
       Header h;
   
  -    if (msg)
  -	*msg = NULL;
  -
       h = headerLoad((void *)ptr);
       if (h == NULL)
   	rc = RPMRC_FAIL;
  @@ -1194,7 +1214,7 @@
           /*@globals fileSystem, internalState @*/
           /*@modifies fd, *hdrp, *msg, fileSystem, internalState @*/
   {
  -    rpmwf wf = fdGetWF(fd);
  +rpmxar xar = fdGetXAR(fd);
       pgpDig dig = fdGetDig(fd);
       char buf[BUFSIZ];
       uint32_t block[4];
  @@ -1207,6 +1227,8 @@
       Header h = NULL;
       const char * origin = NULL;
       rpmRC rc = RPMRC_FAIL;		/* assume failure */
  +    unsigned char * bh = NULL;
  +    size_t nbh = 0;
       int xx;
   
       /* Create (if not already) a signature parameters container. */
  @@ -1219,15 +1241,17 @@
   
       if (hdrp)
   	*hdrp = NULL;
  -    if (msg)
  -	*msg = NULL;
   
       memset(block, 0, sizeof(block));
  -if (wf != NULL) {
  -    if ((xx = rpmxarNext(wf->xar)) != 0)	return RPMRC_FAIL;
  -    if ((rc = rpmwfPullXAR(wf, "Header")) != RPMRC_OK) return rc;
  -assert(wf->nh > sizeof(block));
  -    memcpy(block, wf->h, sizeof(block));
  +if (xar != NULL) {
  +    if ((xx = rpmxarNext(xar)) != 0)	return RPMRC_FAIL;
  +    if ((xx = rpmxarPull(xar, "Header", &bh, &nbh)) != 0) return RPMRC_FAIL;
  +    if (nbh <= sizeof(block)) {
  +	(void) snprintf(buf, sizeof(buf),
  +		_("hdr size(%u): BAD, xar read returned %u\n"), (unsigned)sizeof(block), (unsigned)nb);
  +	goto exit;
  +    }
  +    memcpy(block, bh, sizeof(block));
   } else {
       if ((xx = (int) timedRead(fd, (char *)block, sizeof(block))) != (int)sizeof(block)) {
   	(void) snprintf(buf, sizeof(buf),
  @@ -1262,19 +1286,24 @@
       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 (wf != NULL) {
  -assert(wf->nh == (sizeof(block)+nb));
  -    memcpy(&ei[2], wf->h+sizeof(block), nb);
  +if (xar != NULL) {
  +    if (nbh != (sizeof(block)+nb)) {
  +	(void) snprintf(buf, sizeof(buf),
  +		_("hdr size(%u): BAD, xar read returned %u\n"), (unsigned)(sizeof(block)+nb), (unsigned)nb);
  +	goto exit;
  +    }
  +    ei = &((uint32_t *)bh)[2];
   } else {
  +    bh = xmalloc(uc);
  +    ei = (uint32_t *)bh;
       if ((xx = (int) timedRead(fd, (char *)&ei[2], nb)) != (int) nb) {
   	(void) snprintf(buf, sizeof(buf),
   		_("hdr blob(%u): BAD, read returned %d\n"), (unsigned)nb, xx);
   	goto exit;
       }
   }
  +    ei[0] = block[2];
  +    ei[1] = block[3];
   
       /* Sanity check header tags */
       rc = headerCheck(dig, ei, uc, msg);
  @@ -1287,8 +1316,9 @@
   	(void) snprintf(buf, sizeof(buf), _("hdr load: BAD\n"));
           goto exit;
       }
  +if (xar != NULL) h->flags |= HEADERFLAG_XARALLOCATED;
       h->flags |= HEADERFLAG_ALLOCATED;
  -    ei = NULL;	/* XXX will be freed with header */
  +    bh = NULL;	/* XXX will be freed with header */
   
       /* Save the opened path as the header origin. */
       origin = fdGetOPath(fd);
  @@ -1298,7 +1328,7 @@
   exit:
       if (hdrp && h && rc == RPMRC_OK)
   	*hdrp = headerLink(h);
  -    ei = _free(ei);
  +    bh = _free(bh);
       h = headerFree(h);
   
       if (msg != NULL && *msg == NULL && buf[0] != '\0') {
  @@ -1321,38 +1351,8 @@
   	/*@globals fileSystem @*/
   	/*@modifies fd, *ptr, *msg, fileSystem @*/
   {
  -rpmwf wf = fdGetWF(fd);
       Header * hdrp = ptr;
  -    Header h = NULL;
  -    rpmRC rc = RPMRC_OK;
  -    int xx;
  -
  -    if (msg)
  -	*msg = NULL;
  -
  -if (wf != NULL) {
  -uint32_t * ei;
  -    if ((xx = rpmxarNext(wf->xar)) != 0)	return RPMRC_FAIL;
  -    if ((rc = rpmwfPullXAR(wf, "Header")) != RPMRC_OK) return rc;
  -ei = (uint32_t *)wf->h;
  -fprintf(stderr, "==> Header %p[%u] 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", wf->h, (unsigned) wf->nh, ei[0], ei[1], ei[2], ei[3], ei[4], ei[5]);
  -    h = headerLoad(&ei[2]);
  -    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 (hdrp)
  -	*hdrp = headerLink(h);
  -    h = headerFree(h);
  -
  -    return rc;
  +    return rpmReadHeader(fd, hdrp, msg);
   }
   
   /**
  @@ -1393,6 +1393,9 @@
   {
       rpmRC rc = RPMRC_FAIL;
   
  +    if (msg)
  +	*msg = NULL;
  +
       if (!strcmp(fn, "Header"))
   	rc = ckHeader(fd, ptr, msg);
       return rc;
  @@ -1402,17 +1405,8 @@
   {
       rpmRC rc = RPMRC_FAIL;
   
  -if (_use_xar) {
  -rpmwf wf = fdGetWF(fd);
  -const char * fn = fdGetOPath(fd);
  -if (wf == NULL) {
  -    wf = rpmwfNew(fn);
  -    fdSetWF(fd, wf);
  -    wf->xar = rpmxarNew(fn, "r");
  -    assert(wf->xar != NULL);
  -}
  -assert(wf != NULL);
  -}
  +    if (msg)
  +	*msg = NULL;
   
       if (!strcmp(fn, "Lead"))
   	rc = rdLead(fd, ptr, msg);
  @@ -1429,6 +1423,9 @@
   {
       rpmRC rc = RPMRC_FAIL;
   
  +    if (msg)
  +	*msg = NULL;
  +
       if (!strcmp(fn, "Lead"))
   	rc = wrLead(fd, ptr, msg);
       else
  @@ -1439,15 +1436,3 @@
   	rc = wrHeader(fd, ptr, msg);
       return rc;
   }
  -
  -rpmRC rpmpkgClean(FD_t fd)
  -{
  -    rpmwf wf = fdGetWF(fd);
  -    if (wf != NULL) {
  -	fdSetWF(fd, NULL);
  -/*@-dependenttrans -modfilesys -observertrans -refcounttrans @*/
  -	wf = rpmwfFree(wf);
  -/*@=dependenttrans =modfilesys =observertrans =refcounttrans @*/
  -    }
  -    return RPMRC_OK;
  -}
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pkgio.h
  --- rpm/rpmdb/pkgio.h	20 Nov 2007 21:45:23 -0000	1.11
  +++ rpm/rpmdb/pkgio.h	21 Nov 2007 21:58:47 -0000	1.12
  @@ -80,14 +80,6 @@
   	/*@globals fileSystem @*/
   	/*@modifies ptr, *msg, fileSystem @*/;
   
  -/**
  - * Clean attached data.
  - * @param fd		file handle
  - * @return		RPMRC_OK on success
  - */
  -rpmRC rpmpkgClean(FD_t fd)
  -	/*@modifies fd @*/;
  -
   #ifdef __cplusplus
   }
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 rpmio.c
  --- rpm/rpmio/rpmio.c	20 Nov 2007 18:44:25 -0000	1.105
  +++ rpm/rpmio/rpmio.c	21 Nov 2007 21:58:48 -0000	1.106
  @@ -345,6 +345,7 @@
   	}
   	fd->ndigests = 0;
   /*@-onlytrans@*/
  +	fd->xar = rpmxarFree(fd->xar);
   	fd->dig = pgpDigFree(fd->dig);
   /*@=onlytrans@*/
   	memset(fd, 0, sizeof(*fd));	/* XXX trash and burn */
  @@ -383,7 +384,7 @@
       fd->syserrno = 0;
       fd->errcookie = NULL;
       fd->stats = xcalloc(1, sizeof(*fd->stats));
  -    fd->wf = NULL;
  +    fd->xar = NULL;
       fd->dig = NULL;
   
       fd->ndigests = 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio_internal.h
  ============================================================================
  $ cvs diff -u -r2.90 -r2.91 rpmio_internal.h
  --- rpm/rpmio/rpmio_internal.h	21 Nov 2007 14:24:36 -0000	2.90
  +++ rpm/rpmio/rpmio_internal.h	21 Nov 2007 21:58:48 -0000	2.91
  @@ -15,6 +15,7 @@
   
   #include <rpmpgp.h>
   #include <rpmsw.h>
  +#include <rpmxar.h>
   
   /* Drag in the beecrypt includes. */
   #include <beecrypt/beecrypt.h>
  @@ -187,8 +188,8 @@
       int		oflags;
       mode_t	omode;
   
  -/*@kept@*/
  -    void *	wf;		/* wrapper format descriptor */
  +/*@refcounted@*/ /*@relnull@*/
  +    rpmxar	xar;		/* xar archive wrapper */
   /*@refcounted@*/ /*@relnull@*/
       pgpDig	dig;		/* signature parameters */
   
  @@ -345,24 +346,22 @@
   /** \ingroup rpmio
    */
   /*@unused@*/ static inline
  -void fdSetWF(FD_t fd, /*@kept@*/ void * wf)
  +void fdSetXAR(FD_t fd, rpmxar xar)
   	/*@modifies fd @*/
   {
       FDSANE(fd);
  -    /*@-assignexpose@*/
  -    fd->wf = wf;
  -    /*@=assignexpose@*/
  +    fd->xar = rpmxarLink(xar, "fdSetXAR");
   }
   
   /** \ingroup rpmio
    */
   /*@unused@*/ static inline
  -/*@null@*/ /*@kept@*/ void * fdGetWF(FD_t fd)
  +/*@null@*/ /*@kept@*/ void * fdGetXAR(FD_t fd)
   	/*@*/
   {
       FDSANE(fd);
       /*@-retexpose -usereleased @*/
  -    return fd->wf;
  +    return fd->xar;
       /*@=retexpose =usereleased @*/
   }
   
  @@ .
Received on Wed Nov 21 22:58:48 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.