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

  Server: rpm5.org                         Name:   Per Øyvind Karlsen
  Root:   /v/rpm/cvs                       Email:  pkarl...@rpm5.org
  Module: rpm                              Date:   16-Feb-2011 19:56:28
  Branch: rpm-5_3                          Handle: 2011021618562701

  Modified files:           (Branch: rpm-5_3)
    rpm                     CHANGES
    rpm/rpmdb               rpmdb.c

  Log:
    set mi->mi_count in rpmmiCount() when db cursor exists rather than
    always doing it in rpmmiNext()

  Summary:
    Revision    Changes     Path
    1.3296.2.162+2  -0      rpm/CHANGES
    1.386.2.10  +8  -7      rpm/rpmdb/rpmdb.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3296.2.161 -r1.3296.2.162 CHANGES
  --- rpm/CHANGES       16 Feb 2011 03:45:22 -0000      1.3296.2.161
  +++ rpm/CHANGES       16 Feb 2011 18:56:27 -0000      1.3296.2.162
  @@ -1,4 +1,6 @@
   5.3.8 -> 5.3.9:
  +    - proyvind: set mi->mi_count in rpmmiCount() when db cursor exists rather
  +     than always doing it in rpmmiNext()
       - jbj: rpmrc: fix: add missing nref++ on rpmdsFromPRCO() return segfault.
       - proyvind: set mi->mi_count when rpmmiNext() initializes db cursor so 
that
        rpmmiCount() won't break (mdvbz#62267)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.386.2.9 -r1.386.2.10 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 14 Feb 2011 01:57:48 -0000      1.386.2.9
  +++ rpm/rpmdb/rpmdb.c 16 Feb 2011 18:56:28 -0000      1.386.2.10
  @@ -1630,22 +1630,26 @@
   unsigned int rpmmiCount(rpmmi mi)
   {
       unsigned int rc;
  +    int initDbc;
   
       /* XXX Secondary db associated with Packages needs cursor record count */
  -    if (mi && mi->mi_primary && mi->mi_dbc == NULL) {
  +    if (mi && mi->mi_primary && ((initDbc = mi->mi_dbc == NULL) || 
mi->mi_count == 0)) {
        dbiIndex dbi = dbiOpen(mi->mi_db, mi->mi_rpmtag, 0);
        DBT k = DBT_INIT;
        DBT v = DBT_INIT;
        int xx;
  +     if(initDbc) {
   assert(dbi != NULL); /* XXX dbiCopen doesn't handle dbi == NULL */
  -     xx = dbiCopen(dbi, dbiTxnid(dbi), &mi->mi_dbc, mi->mi_cflags);
  +         xx = dbiCopen(dbi, dbiTxnid(dbi), &mi->mi_dbc, mi->mi_cflags);
  +     }
        k.data = mi->mi_keyp;
        k.size = (u_int32_t)mi->mi_keylen;
   if (k.data && k.size == 0) k.size = (UINT32_T) strlen((char *)k.data);
   if (k.data && k.size == 0) k.size++; /* XXX "/" fixup. */
        if (!dbiGet(dbi, mi->mi_dbc, &k, &v, DB_SET))
            xx = dbiCount(dbi, mi->mi_dbc, &mi->mi_count, 0);
  -     mi->mi_dbc = NULL;
  +     if(initDbc)
  +         mi->mi_dbc = NULL;
       }
   
       rc = (mi ? mi->mi_count : 0);
  @@ -2154,9 +2158,6 @@
   if (k.data && k.size == 0) k.size = (UINT32_T) strlen((char *)k.data);
   if (k.data && k.size == 0) k.size++; /* XXX "/" fixup. */
        _flags = DB_SET;
  -     if (!dbiGet(dbi, mi->mi_dbc, &k, &v, _flags))
  -         xx = dbiCount(dbi, mi->mi_dbc, &mi->mi_count, 0);
  -
       } else
        _flags = (mi->mi_setx ? DB_NEXT_DUP : DB_SET);
   
  @@ -2456,7 +2457,7 @@
        }
       }
       else if (dbi && dbi->dbi_primary != NULL) {
  -     /* XXX Special case #5: secondary ndex associated with primary table. */
  +     /* XXX Special case #5: secondary index associated w primary table. */
       }
       else {
        /* Common case: retrieve join keys. */
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to