- fix: -Va broken, make db cursors per-iterator, not per-dbi.
authorjbj <devnull@localhost>
Fri, 4 Aug 2000 19:48:28 +0000 (19:48 +0000)
committerjbj <devnull@localhost>
Fri, 4 Aug 2000 19:48:28 +0000 (19:48 +0000)
CVS patchset: 4013
CVS date: 2000/08/04 19:48:28

CHANGES
lib/db1.c
lib/db3.c
lib/rpmdb.c
rpm.spec

diff --git a/CHANGES b/CHANGES
index b797054..786963d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -86,6 +86,8 @@
        - link rpm2cpio dynamically since cpio is linked dynamically.
        - fix: uniqify dependency problems when printing (#14034).
        - fix: segfault on erase if filestates is missing in header (#14679).
+       - fix: popt POST callbacks typo.
+       - fix: -Va broken, make db cursors per-iterator, not per-dbi.
 
 3.0.4 -> 3.0.5
        - configure.in fiddles for BSD systems (Patrick Schoo).
index 6f634d9..7de04d0 100644 (file)
--- a/lib/db1.c
+++ b/lib/db1.c
@@ -197,7 +197,10 @@ exit:
     return uh;
 }
 
-static int db1copen(/*@unused@*/ dbiIndex dbi, /*@unused@*/ DBC ** dbcp, /*@unused@*/ unsigned int flags) {
+static int db1copen(/*@unused@*/ dbiIndex dbi, /*@unused@*/ DBC ** dbcp, unsigned int flags) {
+    /* XXX per-iterator cursors need to be set to non-NULL. */
+    if (flags)
+       *dbcp = (DBC *)-1;
     return 0;
 }
 
index 35f6426..fa744fc 100644 (file)
--- a/lib/db3.c
+++ b/lib/db3.c
@@ -706,10 +706,14 @@ static inline int db3c_open(dbiIndex dbi, /*@out@*/ DBC ** dbcp)
 }
 
 static int db3cclose(dbiIndex dbi, /*@only@*/ DBC * dbcursor,
-               /*@unused@*/ unsigned int flags)
+               unsigned int flags)
 {
     int rc = 0;
 
+    /* XXX per-iterator cursors */
+    if (flags == 1)
+       return db3c_close(dbi, dbcursor);
+
     if (!dbi->dbi_use_cursors)
        return 0;
 
@@ -723,12 +727,15 @@ static int db3cclose(dbiIndex dbi, /*@only@*/ DBC * dbcursor,
     return rc;
 }
 
-static int db3copen(dbiIndex dbi, /*@out@*/ DBC ** dbcp,
-               /*@unused@*/ unsigned int flags)
+static int db3copen(dbiIndex dbi, /*@out@*/ DBC ** dbcp, unsigned int flags)
 {
     DBC * dbcursor;
     int rc = 0;
 
+    /* XXX per-iterator cursors */
+    if (flags == 1)
+       return db3c_open(dbi, dbcp);
+
     if (!dbi->dbi_use_cursors) {
        if (dbcp) *dbcp = NULL;
        return 0;
index 4bc5ba7..7ff229c 100644 (file)
@@ -1249,6 +1249,7 @@ struct _rpmdbMatchIterator {
     rpmdb              mi_rpmdb;
     int                        mi_rpmtag;
     dbiIndexSet                mi_set;
+    DBC *              mi_dbc;
     int                        mi_setx;
     Header             mi_h;
     int                        mi_sorted;
@@ -1295,6 +1296,10 @@ void rpmdbFreeIterator(rpmdbMatchIterator mi)
        xfree(mi->mi_version);
        mi->mi_version = NULL;
     }
+    if (mi->mi_dbc) {
+       int xx = dbiCclose(dbi, mi->mi_dbc, 1);
+       mi->mi_dbc = NULL;
+    }
     if (mi->mi_set) {
        dbiFreeIndexSet(mi->mi_set);
        mi->mi_set = NULL;
@@ -1362,7 +1367,6 @@ int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified) {
 Header XrpmdbNextIterator(rpmdbMatchIterator mi, const char * f, unsigned l)
 {
     dbiIndex dbi;
-    DBC * dbcursor;
     void * uh = NULL;
     size_t uhlen = 0;
     void * keyp;
@@ -1376,7 +1380,10 @@ Header XrpmdbNextIterator(rpmdbMatchIterator mi, const char * f, unsigned l)
     dbi = dbiOpen(mi->mi_rpmdb, RPMDBI_PACKAGES, 0);
     if (dbi == NULL)
        return NULL;
-    xx = XdbiCopen(dbi, &dbcursor, 0, f, l);
+    /* XXX cursors need to be per-iterator, not per-dbi. Get a cursor now. */
+    if (mi->mi_dbc == NULL) {
+       xx = XdbiCopen(dbi, &mi->mi_dbc, 1, f, l);
+     }
 
 top:
     /* XXX skip over instances with 0 join key */
@@ -1392,7 +1399,7 @@ top:
            keyp = (void *)mi->mi_keyp;         /* XXX FIXME const */
            keylen = mi->mi_keylen;
 
-           rc = dbiGet(dbi, dbcursor, &keyp, &keylen, &uh, &uhlen, 0);
+           rc = dbiGet(dbi, mi->mi_dbc, &keyp, &keylen, &uh, &uhlen, 0);
 
            if (rc == 0 && keyp && mi->mi_setx)
                memcpy(&mi->mi_offset, keyp, sizeof(mi->mi_offset));
@@ -1409,7 +1416,7 @@ top:
 
     /* Retrieve next header */
     if (uh == NULL) {
-       rc = dbiGet(dbi, dbcursor, &keyp, &keylen, &uh, &uhlen, 0);
+       rc = dbiGet(dbi, mi->mi_dbc, &keyp, &keylen, &uh, &uhlen, 0);
        if (rc)
            return NULL;
     }
@@ -1417,7 +1424,7 @@ top:
     /* Free current header */
     if (mi->mi_h) {
        if (mi->mi_modified && mi->mi_prevoffset)
-           dbiUpdateRecord(dbi, dbcursor, mi->mi_prevoffset, mi->mi_h);
+           dbiUpdateRecord(dbi, mi->mi_dbc, mi->mi_prevoffset, mi->mi_h);
        headerFree(mi->mi_h);
        mi->mi_h = NULL;
     }
@@ -1593,6 +1600,7 @@ fprintf(stderr, "*** RMW %s %p\n", tagName(rpmtag), dbi->dbi_rmw);
     mi->mi_rpmdb = rpmdb;
     mi->mi_rpmtag = rpmtag;
 
+    mi->mi_dbc = NULL;
     mi->mi_set = set;
     mi->mi_setx = 0;
     mi->mi_h = NULL;
index 01e8da7..78b7700 100644 (file)
--- a/rpm.spec
+++ b/rpm.spec
@@ -8,7 +8,7 @@ Summary: The Red Hat package management system.
 Name: rpm
 %define version 4.0
 Version: %{version}
-Release: 0.65
+Release: 0.66
 Group: System Environment/Base
 Source: ftp://ftp.rpm.org/pub/rpm/dist/rpm-3.0.x/rpm-%{version}.tar.gz
 Copyright: GPL
@@ -266,6 +266,10 @@ fi
 %{__prefix}/include/popt.h
 
 %changelog
+* Fri Aug  4 2000 Jeff Johnson <jbj@redhat.com>
+- fix: popt POST callbacks typo.
+- fix: -Va broken, make db cursors per-iterator, not per-dbi.
+
 * Thu Aug  3 2000 Jeff Johnson <jbj@redhat.com>
 - add glibc requirement.