RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   30-Apr-2010 17:07:17
  Branch: HEAD                             Handle: 2010043015071601

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               db3.c rpmdb.c

  Log:
    - rpmdb: fix: replace assert failures with RPMRC_FAIL returns.
    - dbi: rework the error message to supply copious debug details.
    - dbi: fix: --import as non-root assert failure.

  Summary:
    Revision    Changes     Path
    1.3342      +3  -0      rpm/CHANGES
    1.152       +15 -10     rpm/rpmdb/db3.c
    1.387       +28 -18     rpm/rpmdb/rpmdb.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3341 -r1.3342 CHANGES
  --- rpm/CHANGES       30 Apr 2010 00:42:02 -0000      1.3341
  +++ rpm/CHANGES       30 Apr 2010 15:07:16 -0000      1.3342
  @@ -1,5 +1,8 @@
   
   5.2b1 -> 5.3a1
  +    - jbj: rpmdb: fix: replace assert failures with RPMRC_FAIL returns.
  +    - jbj: dbi: rework the error message to supply copious debug details.
  +    - jbj: dbi: fix: --import as non-root assert failure.
       - jbj: DB_CONFIG: fix: add mutex_set_max 8000. better scaling needed, 
todo++.
       - jbj: beecrypt: permit --with-beecrypt=internal (w manual 
checkout/autogen)
       - jbj: resurrect "make dist".
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/db3.c
  ============================================================================
  $ cvs diff -u -r1.151 -r1.152 db3.c
  --- rpm/rpmdb/db3.c   2 Apr 2010 12:30:10 -0000       1.151
  +++ rpm/rpmdb/db3.c   30 Apr 2010 15:07:17 -0000      1.152
  @@ -498,27 +498,26 @@
   #undef       _ENTRY
   
   /*...@-globuse -mustmod @*/  /* FIX: rpmError not annotated yet. */
  -static int cvtdberr(/*...@unused@*/ dbiIndex dbi, const char * msg,
  -             int error, int printit)
  +static int Xcvtdberr(/*...@unused@*/ dbiIndex dbi, const char * msg,
  +             int error, int printit,
  +             const char * func, const char * fn, unsigned ln)
        /*...@globals fileSystem @*/
        /*...@modifies fileSystem @*/
   {
       int rc = error;
   
       if (printit && rc) {
  -     /*...@-moduncon@*/ /* FIX: annotate db3 methods */
  -     if (msg)
  -         rpmlog(RPMLOG_ERR, _("db%d error(%d) from %s: %s\n"),
  -             DB_VERSION_MAJOR, rc, msg, db_strerror(error));
  -     else
  -         rpmlog(RPMLOG_ERR, _("db%d error(%d): %s\n"),
  -             DB_VERSION_MAJOR, rc, db_strerror(error));
  -     /*...@=moduncon@*/
  +/*...@-moduncon@*/ /* FIX: annotate db3 methods */
  +     rpmlog(RPMLOG_ERR, "%s:%s:%u: %s(%d): %s\n",
  +             func, fn, ln, msg, rc, db_strerror(error));
  +/*...@=moduncon@*/
       }
   
       return rc;
   }
   /*...@=globuse =mustmod @*/
  +#define      cvtdberr(_dbi, _msg, _error, _printit)  \
  +    Xcvtdberr(_dbi, _msg, _error, _printit, __FUNCTION__, __FILE__, __LINE__)
   
   /**
    * Return (possibly renamed) tagName. Handles arbitrary tags.
  @@ -2552,10 +2551,16 @@
                xx = seqid_init(dbi,(const char *)&u, sizeof(u), &dbi->dbi_seq);
            else
                xx = seqid_init(dbi, dbi->dbi_seq_id, 0, &dbi->dbi_seq);
  +         if (xx) {
  +             (void) db3close(dbi, 0);
  +             dbi = NULL;
  +             if (dbip) *dbip = dbi;
  +         }
        }
       } else {
        (void) db3close(dbi, 0);
        dbi = NULL;
  +     if (dbip) *dbip = dbi;
       }
   
       urlfn = _free(urlfn);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.386 -r1.387 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 6 Mar 2010 16:20:46 -0000       1.386
  +++ rpm/rpmdb/rpmdb.c 30 Apr 2010 15:07:17 -0000      1.387
  @@ -2538,11 +2538,11 @@
       sigset_t signalMask;
       dbiIndex dbi;
       size_t dbix;
  -    int rc = 0;
  +    int rc = RPMRC_FAIL;             /* XXX RPMRC */
       int xx;
   
       if (db == NULL)
  -     return 0;
  +     return RPMRC_OK;                /* XXX RPMRC */
   
       /* Retrieve header for use by associated secondary index callbacks. */
       {        rpmmi mi;
  @@ -2556,7 +2556,7 @@
       if (h == NULL) {
        rpmlog(RPMLOG_ERR, _("%s: cannot read header at 0x%x\n"),
              "rpmdbRemove", (unsigned)hdrNum);
  -     return 1;
  +     return RPMRC_FAIL;              /* XXX RPMRC */
       }
   
       he->tag = RPMTAG_NVRA;
  @@ -2587,8 +2587,10 @@
            /* Don't bother if tag is not present. */
            if (!headerGet(h, he, 0))
                /*...@switchbreak@*/ break;
  +
            dbi = dbiOpen(db, he->tag, 0);
  -assert(dbi != NULL);                                 /* XXX sanity */
  +         if (dbi == NULL)    goto exit;
  +
            he->p.ptr = _free(he->p.ptr);
            /*...@switchbreak@*/ break;
        case RPMDBI_AVAILABLE:  /* Filter out temporary databases */
  @@ -2609,7 +2611,8 @@
            db->db_h = headerLink(h);
   
            dbi = dbiOpen(db, he->tag, 0);
  -assert(dbi != NULL);
  +         if (dbi == NULL)    goto exit;
  +
            rc = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, DB_WRITECURSOR);
            rc = dbiGet(dbi, dbcursor, &k, &v, DB_SET);
            if (!rc)
  @@ -2630,11 +2633,11 @@
       /* Unreference header used by associated secondary index callbacks. */
       (void) headerFree(h);
       h = NULL;
  +    rc = RPMRC_OK;           /* XXX RPMRC */
   
  +exit:
       (void) unblockSignals(db, &signalMask);
  -
  -    /* XXX return ret; */
  -    return 0;
  +    return rc;
   }
   
   /* XXX install.c */
  @@ -2645,11 +2648,11 @@
       dbiIndex dbi;
       size_t dbix;
       uint32_t hdrNum = headerGetInstance(h);
  -    int ret = 0;
  +    int rc = RPMRC_FAIL;             /* XXX RPMRC */
       int xx;
   
       if (db == NULL)
  -     return 0;
  +     return RPMRC_OK;                /* XXX RPMRC */
   
   if (_rpmdb_debug)
   fprintf(stderr, "--> %s(%p, %u, %p, %p) h# %u\n", __FUNCTION__, db, 
(unsigned)iid, h, ts, (unsigned)hdrNum);
  @@ -2679,12 +2682,15 @@
       /* Assign a primary Packages key for new Header's. */
       if (hdrNum == 0) {
        int64_t seqno = 0;
  +
        dbi = dbiOpen(db, RPMDBI_SEQNO, 0);
  -assert(dbi != NULL);                                 /* XXX sanity */
  -     if ((ret = dbiSeqno(dbi, &seqno, 0)) == 0) {
  +     if (dbi == NULL) goto exit;
  +
  +     if ((xx = dbiSeqno(dbi, &seqno, 0)) == 0) {
            hdrNum = seqno;
            (void) headerSetInstance(h, hdrNum);
  -     }
  +     } else
  +         goto exit;
       }
   
   /* XXX ensure that the header instance is set persistently. */
  @@ -2694,7 +2700,7 @@
   }
   
       dbi = dbiOpen(db, RPMDBI_PACKAGES, 0);
  -assert(dbi != NULL);                                 /* XXX sanity */
  +    if (dbi == NULL) goto exit;
   
       dbix = db->db_ndbi - 1;
       if (db->db_tags != NULL)
  @@ -2717,8 +2723,10 @@
            /* Don't bother if tag is not present. */
            if (!headerGet(h, he, 0))
                /*...@switchbreak@*/ break;
  +
            dbi = dbiOpen(db, he->tag, 0);
  -assert(dbi != NULL);                                 /* XXX sanity */
  +         if (dbi == NULL) goto exit;
  +
            he->p.ptr = _free(he->p.ptr);
            /*...@switchbreak@*/ break;
        case RPMDBI_AVAILABLE:  /* Filter out temporary databases */
  @@ -2745,7 +2753,8 @@
            db->db_h = headerLink(h);
   
            dbi = dbiOpen(db, he->tag, 0);
  -assert(dbi != NULL);                                 /* XXX sanity */
  +         if (dbi == NULL) goto exit;
  +
            xx = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, DB_WRITECURSOR);
            xx = dbiPut(dbi, dbcursor, &k, &v, DB_KEYLAST);
            xx = dbiCclose(dbi, dbcursor, DB_WRITECURSOR);
  @@ -2763,8 +2772,9 @@
        }
   
       } while (dbix-- > 0);
  +    rc = RPMRC_OK;                   /* XXX RPMRC */
   
  +exit:
       (void) unblockSignals(db, &signalMask);
  -
  -    return ret;
  +    return rc;
   }
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to