RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/perl/ RPM_Header.xs rpm/rpmdb/ pkgio.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Sat 01 Dec 2007 - 20:20:00 CET
Message-Id: <20071201192000.B3908348454@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:   01-Dec-2007 20:20:00
  Branch: HEAD                             Handle: 2007120119195901

  Modified files:
    rpm                     CHANGES
    rpm/perl                RPM_Header.xs
    rpm/rpmdb               pkgio.c

  Log:
    - pkgio: hdlist readers need RPMRC_NOTFOUND EOF indicator.
    - pkgio: drill in sufficient debugging to sort per/python I/O issues.

  Summary:
    Revision    Changes     Path
    1.1903      +2  -0      rpm/CHANGES
    1.19        +9  -2      rpm/perl/RPM_Header.xs
    1.64        +30 -1      rpm/rpmdb/pkgio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1902 -r1.1903 CHANGES
  --- rpm/CHANGES	1 Dec 2007 17:58:46 -0000	1.1902
  +++ rpm/CHANGES	1 Dec 2007 19:19:59 -0000	1.1903
  @@ -1,4 +1,6 @@
   5.0a2 -> 5.0a3:
  +    - jbj: pkgio: hdlist readers need RPMRC_NOTFOUND EOF indicator.
  +    - jbj: pkgio: drill in sufficient debugging to sort per/python I/O issues.
       - jbj: re-add symbols for perl "make test". hmm, headerRead failure todo++.
       - afb: use %{?__lzma_encode_args} and %{?__lzma_decode_args} macros.
       - jbj: parse arbitrary tags permitted by _arbitrary_tags white list.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/RPM_Header.xs
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 RPM_Header.xs
  --- rpm/perl/RPM_Header.xs	1 Dec 2007 17:58:46 -0000	1.18
  +++ rpm/perl/RPM_Header.xs	1 Dec 2007 19:20:00 -0000	1.19
  @@ -41,11 +41,18 @@
   	while (1) {
   	    const char item[] = "Header";
   	    const char * msg = NULL;
  +	    rpmRC rc;
   	    header = NULL;
  -	    rpmRC rc = rpmpkgRead(item, fd, &header, &msg);
  -	    if (rc != RPMRC_OK) {
  +	    rc = rpmpkgRead(item, fd, &header, &msg);
  +	    switch (rc) {
  +	    default:
   		rpmlog(RPMLOG_ERR, "%s: %s: %s\n", "rpmpkgRead", item, msg);
  +		/*@fallthrough@*/
  +	    case RPMRC_NOTFOUND:
   		header = NULL;
  +		/*@fallthrough@*/
  +	    case RPMRC_OK:
  +		break;
   	    }
   	    msg = _free(msg);
   	    if (header == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 pkgio.c
  --- rpm/rpmdb/pkgio.c	27 Nov 2007 03:29:13 -0000	1.63
  +++ rpm/rpmdb/pkgio.c	1 Dec 2007 19:20:00 -0000	1.64
  @@ -42,6 +42,9 @@
   /*@access FD_t @*/              /* XXX stealing digests */
   
   /*@unchecked@*/
  +int _pkgio_debug = 0;
  +
  +/*@unchecked@*/
   int _use_xar = 0;
   
   /*@unchecked@*/
  @@ -85,6 +88,9 @@
       size_t length;
       rpmRC rc = RPMRC_FAIL;	/* assume failure */
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> rpmWriteHeader(%p, %p, %p)\n", fd, h, msg);
  +
       if (h == NULL) {
   	if (msg)
   	    *msg = xstrdup(_("write of NULL header"));
  @@ -433,6 +439,9 @@
   {
       struct rpmlead l;
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> wrLead(%p, %p, %p)\n", fd, ptr, msg);
  +
       memcpy(&l, ptr, sizeof(l));
   
       /* Set some sane defaults */
  @@ -474,6 +483,9 @@
       rpmRC rc = RPMRC_FAIL;		/* assume failure */
       int xx;
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> rdLead(%p, %p, %p)\n", fd, ptr, msg);
  +
       buf[0] = '\0';
       if (leadp != NULL) *leadp = NULL;
   
  @@ -596,6 +608,9 @@
       size_t pad;
       rpmRC rc = RPMRC_OK;
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> wrSignature(%p, %p, %p)\n", fd, ptr, msg);
  +
       rc = rpmWriteHeader(fd, sigh, msg);
       if (rc != RPMRC_OK)
   	return rc;
  @@ -680,6 +695,9 @@
       int xx;
       uint32_t i;
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> rdSignature(%p, %p, %p)\n", fd, ptr, msg);
  +
       buf[0] = '\0';
       if (sighp)
   	*sighp = NULL;
  @@ -909,6 +927,9 @@
       int xx;
       uint32_t i;
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> headerCheck(%p, %p[%u], %p)\n", dig, uh, (unsigned) uc, msg);
  +
       buf[0] = '\0';
   
       /* Is the blob the right size? */
  @@ -1242,6 +1263,9 @@
       rpmRC rc = RPMRC_FAIL;		/* assume failure */
       int xx;
   
  +if (_pkgio_debug)
  +fprintf(stderr, "--> rpmReadHeader(%p, %p, %p)\n", fd, hdrp, msg);
  +
       /* Create (if not already) a signature parameters container. */
       if (dig == NULL) {
   	dig = pgpDigNew(0);
  @@ -1263,8 +1287,13 @@
   	    goto exit;
   	}
       }
  +
       if ((xx = (int) timedRead(fd, (char *)block, sizeof(block))) != (int)sizeof(block)) {
  -	(void) snprintf(buf, sizeof(buf),
  +	/* XXX Handle EOF's as RPMRC_NOTFOUND, not RPMRC_FAIL, returns. */
  +	if (xx == 0)
  +	    rc = RPMRC_NOTFOUND;
  +	else
  +	    (void) snprintf(buf, sizeof(buf),
   		_("hdr size(%u): BAD, read returned %d"), (unsigned)sizeof(block), xx);
   	goto exit;
       }
  @@ .
Received on Sat Dec 1 20:20:00 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.