RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ header.c header.h pkgio.c rpm/rpmio...

From: Jeff Johnson <jbj@rpm5.org>
Date: Wed 21 Nov 2007 - 15:24:36 CET
Message-Id: <20071121142436.2CD5634845C@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 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
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.