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:   30-Mar-2011 16:17:31
  Branch: rpm-5_4                          Handle: 2011033014173100

  Modified files:           (Branch: rpm-5_4)
    rpm                     CHANGES
    rpm/tools               dbconvert.c

  Log:
    fix conversion to older hash database format resulting in "missing"
    package from rpmdb

  Summary:
    Revision    Changes     Path
    1.3501.2.83 +2  -0      rpm/CHANGES
    2.1.2.3     +13 -2      rpm/tools/dbconvert.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3501.2.82 -r1.3501.2.83 CHANGES
  --- rpm/CHANGES       30 Mar 2011 11:09:47 -0000      1.3501.2.82
  +++ rpm/CHANGES       30 Mar 2011 14:17:31 -0000      1.3501.2.83
  @@ -1,4 +1,6 @@
   5.4.0 -> 5.4.1:
  +    - proyvind: dbconvert: fix conversion to older hash database format
  +     resulting in "missing" package from rpmdb
       - devzero2000: add %_initddir macro for Mandriva
         (ref http://lists.mandriva.com/maintainers/2011-03/msg00252.php)
       - jbj: fix: reduce false positives checking for duplicate 
keys(mdvbz#62822).
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/tools/dbconvert.c
  ============================================================================
  $ cvs diff -u -r2.1.2.2 -r2.1.2.3 dbconvert.c
  --- rpm/tools/dbconvert.c     27 Jan 2011 01:10:02 -0000      2.1.2.2
  +++ rpm/tools/dbconvert.c     30 Mar 2011 14:17:31 -0000      2.1.2.3
  @@ -151,6 +151,17 @@
            int doswap = -1;
            float pct = 0;
            uint8_t tmp;
  +         /* 
  +          * Older rpm places number of keys as first entry of hash database,
  +          * so any package placed at beginning of it will be "missing" from
  +          * rpmdb...
  +          */
  +         if (dbtype == 1){
  +           key.data = &i;
  +           data.data = &nkeys;
  +           key.size = data.size = sizeof(uint32_t);
  +           xx = dbiNew->dbi_db->put(dbiNew->dbi_db, NULL, &key, &data, 0);
  +         }
            while ((xx = dbcpCur->c_get(dbcpCur, &key, &data, DB_NEXT)) == 0) {
              tmp = pct;
              pct = (100*(float)++i/nkeys) + 0.5;
  @@ -159,8 +170,8 @@
                fprintf(stderr, "\rconverting %s%s/Packages: %u/%u %d%%", 
prefix && prefix[0] ? prefix : "", tmppath, i, nkeys, (int)pct);
              }
              fflush(stdout);
  -           if(!*(uint32_t*)key.data)
  -             continue;
  +           if(i == 1 && !*(uint32_t*)key.data)
  +                 continue;
              if(__builtin_expect(doswap, 1) < 0) {
                if((htole32(*(uint32_t*)key.data) > 10000000 && swap < 0) ||
                    (htole32(*(uint32_t*)key.data) < 10000000 && swap > 0))
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to