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