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:   10-Apr-2011 20:34:11
  Branch: HEAD                             Handle: 2011041018341100

  Modified files:
    rpm/tools               dbconvert.c

  Log:
    - dbconvert: reformat in K&R like most of the rest of rpm code.

  Summary:
    Revision    Changes     Path
    2.4         +395 -334   rpm/tools/dbconvert.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/tools/dbconvert.c
  ============================================================================
  $ cvs diff -u -r2.3 -r2.4 dbconvert.c
  --- rpm/tools/dbconvert.c     10 Apr 2011 10:16:29 -0000      2.3
  +++ rpm/tools/dbconvert.c     10 Apr 2011 18:34:11 -0000      2.4
  @@ -24,335 +24,397 @@
   #define bswap32(x) htole32(x)
   #endif
   
  -static int disable_fsync(int arg) {
  +static int disable_fsync(int arg)
  +{
       return 0;
   }
  -static int
  -bdb_log_archive(DB_ENV *dbenv, char ***list, uint32_t flags) {
  -  int ret;
  -  if ((ret = dbenv->log_archive(dbenv, list, flags)) != 0)
  -    dbenv->err(dbenv, ret, "DB_ENV->log_archive");
  -  return ret;
  -}
   
  -static int
  -bdb_log_lsn_reset(DB_ENV *dbenv) {
  -  int ret = 0;
  -  char **list = NULL;
  -  /* Reset log sequence numbers to allow for moving to new environment */
  -  if(!(ret = dbenv->log_archive(dbenv, &list, DB_ARCH_DATA|DB_ARCH_ABS))) {
  -    char **p = list;
  -    for(; *p; p++)
  -      if(!ret)
  -     ret = dbenv->lsn_reset(dbenv, *p, 0);
  -    _free(list);
  -  }
  -  return ret;
  +static int bdb_log_archive(DB_ENV * dbenv, char ***list, uint32_t flags)
  +{
  +    int ret;
  +    if ((ret = dbenv->log_archive(dbenv, list, flags)) != 0)
  +     dbenv->err(dbenv, ret, "DB_ENV->log_archive");
  +    return ret;
   }
   
  -static int
  -rpmdb_convert(const char *prefix, int dbtype, int swap, int rebuild) {
  -  rpmts tsCur = NULL;
  -  int xx, i;
  -  const char *dbpath = NULL;
  -  const char *__dbi_txn = NULL;
  -  const char *_dbi_tags = NULL;
  -  const char *_dbi_config = NULL;
  -  const char *_dbi_config_Packages = NULL;
  -  const char *fn = NULL;
  -  const char *tmppath = NULL;
  -  glob_t gl = { .gl_pathc = 0, .gl_pathv = NULL, .gl_offs = 0 };
  -  unsetenv("TMPDIR");
  -  rpmReadConfigFiles(NULL, NULL);
  -
  -  dbpath = rpmExpand("%{?_dbpath}", NULL);
  -  __dbi_txn = rpmExpand("%{__dbi_txn}", NULL);
  -  _dbi_tags = rpmExpand("%{_dbi_tags}", NULL);
  -  _dbi_config = rpmExpand("%{_dbi_config}", NULL);
  -  _dbi_config_Packages = rpmExpand("%{_dbi_config_Packages}", NULL);
  -  addMacro(NULL, "__dbi_txn", NULL, "create mpool txn thread thread_count=64 
nofsync", -1);
  -
  -  /* (ugly) clear any existing locks */
  -  fn = rpmGetPath(prefix[0] ? prefix : "", dbpath, "/", "__db.*", NULL);
  -  xx = Glob(fn, 0, NULL, &gl);
  -  for (i = 0; i < (int)gl.gl_pathc; i++)
  -    xx = Unlink(gl.gl_pathv[i]);
  -  fn = _free(fn);
  -  Globfree(&gl);
  -
  -  tsCur = rpmtsCreate();
  -  rpmtsSetRootDir(tsCur, prefix && prefix[0] ? prefix : NULL);
  -  if(!rpmtsOpenDB(tsCur, O_RDONLY)) {
  -    if(dbtype == 1) {
  -      addMacro(NULL, "_dbi_tags", NULL, 
"Packages:Name:Basenames:Group:Requirename:Providename:Conflictname:Triggername:Dirnames:Requireversion:Provideversion:Installtid:Sigmd5:Sha1header:Filedigests:Depends:Pubkeys",
 -1);
  -      addMacro(NULL, "_dbi_config", NULL, "%{_dbi_htconfig}", -1);
  -      addMacro(NULL, "_dbi_config_Packages", NULL, "%{_dbi_htconfig} 
lockdbfd", -1);
  +static int bdb_log_lsn_reset(DB_ENV * dbenv)
  +{
  +    int ret = 0;
  +    char **list = NULL;
  +    /* Reset log sequence numbers to allow for moving to new environment */
  +    if (!
  +     (ret =
  +      dbenv->log_archive(dbenv, &list, DB_ARCH_DATA | DB_ARCH_ABS))) {
  +     char **p = list;
  +     for (; *p; p++)
  +         if (!ret)
  +             ret = dbenv->lsn_reset(dbenv, *p, 0);
  +     _free(list);
       }
  +    return ret;
  +}
   
  -    rpmts tsNew = rpmtsCreate();
  -    rpmdb rdbNew = NULL;
  -    DB_ENV *dbenvNew = NULL;
  -    struct stat sb;
  -
  -    fn = rpmGetPath("%{_dbpath}", NULL);
  -    tmppath = tempnam(fn, "rpmdb_convert.XXXXXX");
  +static int
  +rpmdb_convert(const char *prefix, int dbtype, int swap, int rebuild)
  +{
  +    rpmts tsCur = NULL;
  +    int xx, i;
  +    const char *dbpath = NULL;
  +    const char *__dbi_txn = NULL;
  +    const char *_dbi_tags = NULL;
  +    const char *_dbi_config = NULL;
  +    const char *_dbi_config_Packages = NULL;
  +    const char *fn = NULL;
  +    const char *tmppath = NULL;
  +    glob_t gl = {.gl_pathc = 0,.gl_pathv = NULL,.gl_offs = 0 };
  +    unsetenv("TMPDIR");
  +    rpmReadConfigFiles(NULL, NULL);
  +
  +    dbpath = rpmExpand("%{?_dbpath}", NULL);
  +    __dbi_txn = rpmExpand("%{__dbi_txn}", NULL);
  +    _dbi_tags = rpmExpand("%{_dbi_tags}", NULL);
  +    _dbi_config = rpmExpand("%{_dbi_config}", NULL);
  +    _dbi_config_Packages = rpmExpand("%{_dbi_config_Packages}", NULL);
  +    addMacro(NULL, "__dbi_txn", NULL,
  +          "create mpool txn thread thread_count=64 nofsync", -1);
  +
  +    /* (ugly) clear any existing locks */
  +    fn = rpmGetPath(prefix[0] ? prefix : "", dbpath, "/", "__db.*", NULL);
  +    xx = Glob(fn, 0, NULL, &gl);
  +    for (i = 0; i < (int) gl.gl_pathc; i++)
  +     xx = Unlink(gl.gl_pathv[i]);
       fn = _free(fn);
  -    addMacro(NULL, "_dbpath", NULL, tmppath, -1);
  -    rpmtsSetRootDir(tsNew, prefix && prefix[0] ? prefix : NULL);
  -    if(!rpmtsOpenDB(tsNew, O_RDWR)) {
  -      DBC *dbcpCur = NULL, *dbcpNew = NULL;
  -      rdbNew = rpmtsGetRdb(tsNew);
  -      dbenvNew = rdbNew->db_dbenv;
  -      dbiIndex dbiCur = dbiOpen(rpmtsGetRdb(tsCur), RPMDBI_PACKAGES, 0);
  -      dbiIndex dbiNew = dbiOpen(rdbNew, RPMDBI_PACKAGES, 0);
  -      DB_TXN *txnidNew = dbiTxnid(dbiNew);
  -
  -      if(!(xx = dbiCopen(dbiCur, NULL, NULL, 0)) && !(xx = dbiCopen(dbiNew, 
txnidNew, &dbcpNew, DB_WRITECURSOR))) {
  -     DBT key, data;
  -     DB_TXN *txnidCur = dbiTxnid(dbiCur);
  -     uint32_t nkeys = 0;
  -
  -     memset(&key, 0, sizeof(key));
  -     memset(&data, 0, sizeof(data));
  -
  -     /* Acquire a cursor for the database. */
  -     if ((xx = dbiCur->dbi_db->cursor(dbiCur->dbi_db, NULL, &dbcpCur, 0)) != 
0) {
  -       dbiCur->dbi_db->err(dbiCur->dbi_db, xx, "DB->cursor");
  -     }
  +    Globfree(&gl);
   
  -     if(!(xx = dbiCur->dbi_db->stat(dbiCur->dbi_db, txnidCur, 
&dbiCur->dbi_stats, 0))) {
  +    tsCur = rpmtsCreate();
  +    rpmtsSetRootDir(tsCur, prefix && prefix[0] ? prefix : NULL);
  +    if (!rpmtsOpenDB(tsCur, O_RDONLY)) {
  +     if (dbtype == 1) {
  +         addMacro(NULL, "_dbi_tags", NULL,
  +                  
"Packages:Name:Basenames:Group:Requirename:Providename:Conflictname:Triggername:Dirnames:Requireversion:Provideversion:Installtid:Sigmd5:Sha1header:Filedigests:Depends:Pubkeys",
  +                  -1);
  +         addMacro(NULL, "_dbi_config", NULL, "%{_dbi_htconfig}", -1);
  +         addMacro(NULL, "_dbi_config_Packages", NULL,
  +                  "%{_dbi_htconfig} lockdbfd", -1);
  +     }
   
  -       switch(dbiCur->dbi_db->type) {
  -         case DB_BTREE:
  -         case DB_RECNO: {
  -             DB_BTREE_STAT *db_stat = dbiCur->dbi_stats;
  -             nkeys = db_stat->bt_nkeys;
  -           }
  -           break;
  -         case DB_HASH: {
  -             DB_HASH_STAT *db_stat = dbiCur->dbi_stats;
  -             nkeys = db_stat->hash_nkeys;
  -           }
  -           break;
  -         case DB_QUEUE: {
  -             DB_QUEUE_STAT *db_stat = dbiCur->dbi_stats;
  -             nkeys = db_stat->qs_nkeys;
  -           }
  -           break;
  -         case DB_UNKNOWN:
  -         default:
  -           xx = -1;
  -           break;
  -       }
  -
  -
  -       if(!xx) {
  -         uint32_t i = 0;
  -         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;
  -           /* TODO: callbacks for status output? */
  -           if(tmp < (int)(pct+0.5)) {
  -             fprintf(stderr, "\rconverting %s%s/Packages: %u/%u %d%%", 
prefix && prefix[0] ? prefix : "", tmppath, i, nkeys, (int)pct);
  -           }
  -           fflush(stdout);
  -           if(i == 1 && !*(uint32_t*)key.data)
  -                 continue;
  -           if(doswap < 0) {
  -             if((htole32(*(uint32_t*)key.data) > 10000000 && swap < 0) ||
  -                 (htole32(*(uint32_t*)key.data) < 10000000 && swap > 0))
  -               doswap = 1;
  -             else
  -               doswap = 0;
  -           }
  -           if(doswap) {
  -             if(swap)
  -               *(uint32_t*)key.data = bswap32(*(uint32_t*)key.data);
  -           }
  -           xx = dbiNew->dbi_db->put(dbiNew->dbi_db, NULL, &key, &data, 0);
  +     rpmts tsNew = rpmtsCreate();
  +     rpmdb rdbNew = NULL;
  +     DB_ENV *dbenvNew = NULL;
  +     struct stat sb;
  +
  +     fn = rpmGetPath("%{_dbpath}", NULL);
  +     tmppath = tempnam(fn, "rpmdb_convert.XXXXXX");
  +     fn = _free(fn);
  +     addMacro(NULL, "_dbpath", NULL, tmppath, -1);
  +     rpmtsSetRootDir(tsNew, prefix && prefix[0] ? prefix : NULL);
  +     if (!rpmtsOpenDB(tsNew, O_RDWR)) {
  +         DBC *dbcpCur = NULL, *dbcpNew = NULL;
  +         rdbNew = rpmtsGetRdb(tsNew);
  +         dbenvNew = rdbNew->db_dbenv;
  +         dbiIndex dbiCur =
  +             dbiOpen(rpmtsGetRdb(tsCur), RPMDBI_PACKAGES, 0);
  +         dbiIndex dbiNew = dbiOpen(rdbNew, RPMDBI_PACKAGES, 0);
  +         DB_TXN *txnidNew = dbiTxnid(dbiNew);
  +
  +         if (!(xx = dbiCopen(dbiCur, NULL, NULL, 0))
  +             && !(xx =
  +                  dbiCopen(dbiNew, txnidNew, &dbcpNew,
  +                           DB_WRITECURSOR))) {
  +             DBT key, data;
  +             DB_TXN *txnidCur = dbiTxnid(dbiCur);
  +             uint32_t nkeys = 0;
  +
  +             memset(&key, 0, sizeof(key));
  +             memset(&data, 0, sizeof(data));
  +
  +             /* Acquire a cursor for the database. */
  +             if ((xx =
  +                  dbiCur->dbi_db->cursor(dbiCur->dbi_db, NULL, &dbcpCur,
  +                                         0)) != 0) {
  +                 dbiCur->dbi_db->err(dbiCur->dbi_db, xx, "DB->cursor");
  +             }
   
  +             if (!
  +                 (xx =
  +                  dbiCur->dbi_db->stat(dbiCur->dbi_db, txnidCur,
  +                                       &dbiCur->dbi_stats, 0))) {
  +
  +                 switch (dbiCur->dbi_db->type) {
  +                 case DB_BTREE:
  +                 case DB_RECNO:{
  +                         DB_BTREE_STAT *db_stat = dbiCur->dbi_stats;
  +                         nkeys = db_stat->bt_nkeys;
  +                     }
  +                     break;
  +                 case DB_HASH:{
  +                         DB_HASH_STAT *db_stat = dbiCur->dbi_stats;
  +                         nkeys = db_stat->hash_nkeys;
  +                     }
  +                     break;
  +                 case DB_QUEUE:{
  +                         DB_QUEUE_STAT *db_stat = dbiCur->dbi_stats;
  +                         nkeys = db_stat->qs_nkeys;
  +                     }
  +                     break;
  +                 case DB_UNKNOWN:
  +                 default:
  +                     xx = -1;
  +                     break;
  +                 }
  +
  +
  +                 if (!xx) {
  +                     uint32_t i = 0;
  +                     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;
  +                         /* TODO: callbacks for status output? */
  +                         if (tmp < (int) (pct + 0.5)) {
  +                             fprintf(stderr,
  +                                     "\rconverting %s%s/Packages: %u/%u 
%d%%",
  +                                     prefix
  +                                     && prefix[0] ? prefix : "",
  +                                     tmppath, i, nkeys, (int) pct);
  +                         }
  +                         fflush(stdout);
  +                         if (i == 1 && !*(uint32_t *) key.data)
  +                             continue;
  +                         if (doswap < 0) {
  +                             if ((htole32(*(uint32_t *) key.data) >
  +                                  10000000 && swap < 0)
  +                                 || (htole32(*(uint32_t *) key.data) <
  +                                     10000000 && swap > 0))
  +                                 doswap = 1;
  +                             else
  +                                 doswap = 0;
  +                         }
  +                         if (doswap) {
  +                             if (swap)
  +                                 *(uint32_t *) key.data =
  +                                     bswap32(*(uint32_t *) key.data);
  +                         }
  +                         xx = dbiNew->dbi_db->put(dbiNew->dbi_db, NULL,
  +                                                  &key, &data, 0);
  +
  +                     }
  +                     fprintf(stderr, "\n");
  +                     if (!(xx = dbiCclose(dbiNew, dbcpNew, 0))
  +                         && !(xx = dbiCclose(dbiCur, dbcpCur, 0))
  +                         && rebuild) {
  +                         xx = rpmtsCloseDB(tsCur);
  +
  +                         rpmVSFlags vsflags =
  +                             rpmExpandNumeric("%{_vsflags_rebuilddb}");
  +                         vsflags |=
  +                             _RPMVSF_NODIGESTS | _RPMVSF_NOSIGNATURES;
  +                         rpmtsSetVSFlags(tsNew, vsflags);
  +
  +                         {
  +                             size_t dbix;
  +                             fprintf(stderr, "rebuilding rpmdb:\n");
  +                             fflush(stdout);
  +                             for (dbix = 0; dbix < rdbNew->db_ndbi;
  +                                  dbix++) {
  +                                 tagStore_t dbiTags =
  +                                     &rdbNew->db_tags[dbix];
  +
  +                                 /* Remove configured secondary indices. */
  +                                 switch (dbiTags->tag) {
  +                                 case RPMDBI_AVAILABLE:
  +                                 case RPMDBI_ADDED:
  +                                 case RPMDBI_REMOVED:
  +                                 case RPMDBI_DEPENDS:
  +                                 case RPMDBI_BTREE:
  +                                 case RPMDBI_HASH:
  +                                 case RPMDBI_QUEUE:
  +                                 case RPMDBI_RECNO:
  +                                     fprintf(stderr,
  +                                             "skipping %s:\t%d%%\n",
  +                                             (dbiTags->str !=
  +                                              NULL ? dbiTags->
  +                                              str : tagName(dbiTags->
  +                                                            tag)),
  +                                             (int) (100 *
  +                                                    ((float) dbix /
  +                                                     rdbNew->db_ndbi)));
  +                                 case RPMDBI_PACKAGES:
  +                                 case RPMDBI_SEQNO:
  +                                     continue;
  +                                     break;
  +                                 default:
  +                                     fn = rpmGetPath(rdbNew->db_root,
  +                                                     rdbNew->db_home,
  +                                                     "/",
  +                                                     (dbiTags->str !=
  +                                                      NULL ? dbiTags->
  +                                                      str :
  +                                                      tagName(dbiTags->
  +                                                              tag)),
  +                                                     NULL);
  +                                     fprintf(stderr, "%s:\t", fn);
  +                                     if (!Stat(fn, &sb))
  +                                         xx = Unlink(fn);
  +                                     fn = _free(fn);
  +                                     break;
  +                                 }
  +                                 /* TODO: signal handler? */
  +
  +                                 /* Open (and re-create) each index. */
  +                                 (void) dbiOpen(rdbNew, dbiTags->tag,
  +                                                rdbNew->db_flags);
  +                                 fprintf(stderr, "%d%%\n",
  +                                         (int) (100 *
  +                                                ((float) dbix /
  +                                                 rdbNew->db_ndbi)));
  +                                 fflush(stdout);
  +                             }
  +
  +                             /* Unreference header used by associated 
secondary index callbacks. */
  +                             (void) headerFree(rdbNew->db_h);
  +                             rdbNew->db_h = NULL;
  +
  +                             /* Reset the Seqno counter to the maximum 
primary key */
  +                             rpmlog(RPMLOG_DEBUG,
  +                                    "rpmdb: max. primary key %u\n",
  +                                    (unsigned) rdbNew->db_maxkey);
  +                             fn = rpmGetPath(rdbNew->db_root,
  +                                             rdbNew->db_home, "/Seqno",
  +                                             NULL);
  +                             if (!Stat(fn, &sb))
  +                                 xx = Unlink(fn);
  +                             fprintf(stderr, "%s:\t", fn);
  +                             (void) dbiOpen(rdbNew, RPMDBI_SEQNO,
  +                                            rdbNew->db_flags);
  +                             fprintf(stderr, "100%%\n");
  +
  +                             fn = _free(fn);
  +
  +                             /* Remove no longer required transaction logs */
  +                             if (!
  +                                 (xx =
  +                                  bdb_log_archive(dbenvNew, NULL,
  +                                                  DB_ARCH_REMOVE)))
  +                                 xx = bdb_log_lsn_reset(dbenvNew);
  +                             xx = rpmtsCloseDB(tsNew);
  +                         }
  +                     }
  +                 }
  +             }
            }
  -         fprintf(stderr, "\n");
  -         if(!(xx = dbiCclose(dbiNew, dbcpNew, 0)) && !(xx = 
dbiCclose(dbiCur, dbcpCur, 0)) &&
  -             rebuild) {
  -           xx = rpmtsCloseDB(tsCur);
  -
  -           rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}");
  -           vsflags |= _RPMVSF_NODIGESTS | _RPMVSF_NOSIGNATURES;
  -           rpmtsSetVSFlags(tsNew, vsflags);
  -
  -           {
  +         if (!xx) {
  +             const char *dest = NULL;
                size_t dbix;
  -             fprintf(stderr, "rebuilding rpmdb:\n");
  -             fflush(stdout);
  -             for (dbix = 0; dbix < rdbNew->db_ndbi; dbix++) {
  -               tagStore_t dbiTags = &rdbNew->db_tags[dbix];
  -
  -               /* Remove configured secondary indices. */
  -               switch (dbiTags->tag) {
  -                 case RPMDBI_AVAILABLE:
  -                 case RPMDBI_ADDED:
  -                 case RPMDBI_REMOVED:
  -                 case RPMDBI_DEPENDS:
  -                 case RPMDBI_BTREE:
  -                 case RPMDBI_HASH:
  -                 case RPMDBI_QUEUE:
  -                 case RPMDBI_RECNO:
  -                   fprintf(stderr, "skipping %s:\t%d%%\n", (dbiTags->str != 
NULL ? dbiTags->str : tagName(dbiTags->tag)),
  -                       (int)(100*((float)dbix/rdbNew->db_ndbi)));
  -                 case RPMDBI_PACKAGES:
  -                 case RPMDBI_SEQNO:
  -                   continue;
  -                   break;
  -                 default:
  -                   fn = rpmGetPath(rdbNew->db_root, rdbNew->db_home, "/",
  -                       (dbiTags->str != NULL ? dbiTags->str : 
tagName(dbiTags->tag)),
  -                       NULL);
  -                   fprintf(stderr, "%s:\t", fn);
  -                   if (!Stat(fn, &sb))
  +
  +             if (!rpmtsOpenDB(tsNew, O_RDONLY)) {
  +                 rdbNew = rpmtsGetRdb(tsNew);
  +                 for (dbix = 0; dbix < rdbNew->db_ndbi; dbix++) {
  +                     tagStore_t dbiTags = &rdbNew->db_tags[dbix];
  +                     fn = rpmGetPath(rdbNew->db_root, rdbNew->db_home,
  +                                     "/", dbiTags->str, NULL);
  +                     dest =
  +                         rpmGetPath(rdbNew->db_root, dbpath, "/",
  +                                    dbiTags->str, NULL);
  +                     if (!Stat(dest, &sb))
  +                         xx = Unlink(dest);
  +                     if (!Stat(fn, &sb)) {
  +                         xx = Rename(fn, dest);
  +                     }
  +                     fn = _free(fn);
  +                     dest = _free(dest);
  +                 }
  +                 dest = rpmGetPath(rdbNew->db_root, NULL);
  +                 xx = rpmtsCloseDB(tsNew);
  +
  +                 /* (ugly) cleanup */
  +                 fn = rpmGetPath(dest, tmppath, "/", "*", NULL);
  +                 xx = Glob(fn, 0, NULL, &gl);
  +                 for (i = 0; i < (int) gl.gl_pathc; i++)
  +                     xx = Unlink(gl.gl_pathv[i]);
  +                 fn = _free(fn);
  +                 Globfree(&gl);
  +
  +                 fn = rpmGetPath(dest, dbpath, "/log/", "*", NULL);
  +                 xx = Glob(fn, 0, NULL, &gl);
  +                 for (i = 0; i < (int) gl.gl_pathc; i++)
  +                     xx = Unlink(gl.gl_pathv[i]);
  +                 fn = _free(fn);
  +                 Globfree(&gl);
  +
  +                 fn = rpmGetPath(dest, tmppath, "/log/", "*", NULL);
  +                 xx = Glob(fn, 0, NULL, &gl);
  +                 for (i = 0; i < (int) gl.gl_pathc; i++)
  +                     xx = Unlink(gl.gl_pathv[i]);
  +                 fn = _free(fn);
  +                 Globfree(&gl);
  +
  +                 fn = rpmGetPath(dest, dbpath, "/tmp/", "*", NULL);
  +                 xx = Glob(fn, 0, NULL, &gl);
  +                 for (i = 0; i < (int) gl.gl_pathc; i++)
  +                     xx = Unlink(gl.gl_pathv[i]);
  +                 fn = _free(fn);
  +                 Globfree(&gl);
  +
  +                 /* remove indices no longer used */
  +                 fn = rpmGetPath(dest, dbpath, "Provideversion", NULL);
  +                 if (!Stat(fn, &sb))
                        xx = Unlink(fn);
  -                   fn = _free(fn);
  -                   break;
  -               }
  -               /* TODO: signal handler? */
  -
  -               /* Open (and re-create) each index. */
  -               (void) dbiOpen(rdbNew, dbiTags->tag, rdbNew->db_flags);
  -               fprintf(stderr, "%d%%\n", 
(int)(100*((float)dbix/rdbNew->db_ndbi)));
  -               fflush(stdout);
  -             }
  +                 fn = _free(fn);
  +                 fn = rpmGetPath(dest, dbpath, "Requireversion", NULL);
  +                 if (!Stat(fn, &sb))
  +                     xx = Unlink(fn);
  +                 fn = _free(fn);
   
  -             /* Unreference header used by associated secondary index 
callbacks. */
  -             (void) headerFree(rdbNew->db_h);
  -             rdbNew->db_h = NULL;
  -
  -             /* Reset the Seqno counter to the maximum primary key */
  -             rpmlog(RPMLOG_DEBUG, "rpmdb: max. primary key %u\n",
  -                 (unsigned)rdbNew->db_maxkey);
  -             fn = rpmGetPath(rdbNew->db_root, rdbNew->db_home, "/Seqno", 
NULL);
  -             if (!Stat(fn, &sb))
  -               xx = Unlink(fn);
  -             fprintf(stderr, "%s:\t", fn);
  -             (void) dbiOpen(rdbNew, RPMDBI_SEQNO, rdbNew->db_flags);
  -             fprintf(stderr, "100%%\n");
  -
  -             fn = _free(fn);
  -
  -             /* Remove no longer required transaction logs */
  -             if(!(xx = bdb_log_archive(dbenvNew, NULL, DB_ARCH_REMOVE)))
  -               xx = bdb_log_lsn_reset(dbenvNew);
  -             xx = rpmtsCloseDB(tsNew);
  -           }
  -         }
  -       }
  -     }
  -      }
  -      if(!xx) {
  -     const char *dest = NULL;
  -     size_t dbix;
  -     
  -     if(!rpmtsOpenDB(tsNew, O_RDONLY)) {
  -       rdbNew = rpmtsGetRdb(tsNew);
  -       for (dbix = 0; dbix < rdbNew->db_ndbi; dbix++) {
  -         tagStore_t dbiTags = &rdbNew->db_tags[dbix];
  -         fn = rpmGetPath(rdbNew->db_root, rdbNew->db_home, "/", 
dbiTags->str, NULL);
  -         dest = rpmGetPath(rdbNew->db_root, dbpath, "/", dbiTags->str, NULL);
  -         if(!Stat(dest, &sb))
  -           xx = Unlink(dest);
  -         if(!Stat(fn, &sb)) {
  -           xx = Rename(fn, dest);
  -         }
  -         fn = _free(fn);
  -         dest = _free(dest);
  -       }
  -       dest = rpmGetPath(rdbNew->db_root, NULL);
  -       xx = rpmtsCloseDB(tsNew);
  -
  -       /* (ugly) cleanup */
  -       fn = rpmGetPath(dest, tmppath, "/", "*", NULL);
  -       xx = Glob(fn, 0, NULL, &gl);
  -       for (i = 0; i < (int)gl.gl_pathc; i++)
  -         xx = Unlink(gl.gl_pathv[i]);
  -       fn = _free(fn);
  -       Globfree(&gl);
  -
  -       fn = rpmGetPath(dest, dbpath, "/log/", "*", NULL);
  -       xx = Glob(fn, 0, NULL, &gl);
  -       for (i = 0; i < (int)gl.gl_pathc; i++)
  -         xx = Unlink(gl.gl_pathv[i]);
  -       fn = _free(fn);
  -       Globfree(&gl);
  -
  -       fn = rpmGetPath(dest, tmppath, "/log/", "*", NULL);
  -       xx = Glob(fn, 0, NULL, &gl);
  -       for (i = 0; i < (int)gl.gl_pathc; i++)
  -         xx = Unlink(gl.gl_pathv[i]);
  -       fn = _free(fn);
  -       Globfree(&gl);
  -
  -       fn = rpmGetPath(dest, dbpath, "/tmp/", "*", NULL);
  -       xx = Glob(fn, 0, NULL, &gl);
  -       for (i = 0; i < (int)gl.gl_pathc; i++)
  -         xx = Unlink(gl.gl_pathv[i]);
  -       fn = _free(fn);
  -       Globfree(&gl);
  -
  -       /* remove indices no longer used */
  -       fn = rpmGetPath(dest, dbpath, "Provideversion", NULL);
  -       if(!Stat(fn, &sb))
  -         xx = Unlink(fn);
  -       fn = _free(fn);
  -       fn = rpmGetPath(dest, dbpath, "Requireversion", NULL);
  -       if(!Stat(fn, &sb))
  -         xx = Unlink(fn);
  -       fn = _free(fn);
  -
  -       /* clear locks */
  -       fn = rpmGetPath(prefix[0] ? prefix : "", dbpath, "/", "__db.*", NULL);
  -       xx = Glob(fn, 0, NULL, &gl);
  -       for (i = 0; i < (int)gl.gl_pathc; i++)
  -         xx = Unlink(gl.gl_pathv[i]);
  -       fn = _free(fn);
  -       Globfree(&gl);
  -
  -       fn = rpmGetPath(dest, tmppath, "/log", NULL);
  -       xx = Rmdir(fn);
  -       fn = _free(fn);
  -       fn = rpmGetPath(dest, tmppath, NULL);
  -       xx = Rmdir(fn);
  -       fn = _free(fn);
  +                 /* clear locks */
  +                 fn = rpmGetPath(prefix[0] ? prefix : "", dbpath, "/",
  +                                 "__db.*", NULL);
  +                 xx = Glob(fn, 0, NULL, &gl);
  +                 for (i = 0; i < (int) gl.gl_pathc; i++)
  +                     xx = Unlink(gl.gl_pathv[i]);
  +                 fn = _free(fn);
  +                 Globfree(&gl);
  +
  +                 fn = rpmGetPath(dest, tmppath, "/log", NULL);
  +                 xx = Rmdir(fn);
  +                 fn = _free(fn);
  +                 fn = rpmGetPath(dest, tmppath, NULL);
  +                 xx = Rmdir(fn);
  +                 fn = _free(fn);
   
  -       _free(dest);
  +                 _free(dest);
  +             }
  +         }
        }
  -      }
  +     tsNew = rpmtsFree(tsNew);
       }
  -    tsNew = rpmtsFree(tsNew);
  -  }
  -  tsCur = rpmtsFree(tsCur);
  -  addMacro(NULL, "_dbpath", NULL, dbpath, -1);
  -  addMacro(NULL, "__dbi_txn", NULL, __dbi_txn, -1);
  -  addMacro(NULL, "_dbi_tags", NULL, _dbi_tags, -1);
  -  addMacro(NULL, "_dbi_config", NULL, _dbi_config, -1);
  -  addMacro(NULL, "_dbi_config_Packages", NULL, _dbi_config_Packages, -1);
  -
  -  _free(dbpath);
  -  _free(__dbi_txn);
  -  _free(tmppath);
  -  return xx;
  +    tsCur = rpmtsFree(tsCur);
  +    addMacro(NULL, "_dbpath", NULL, dbpath, -1);
  +    addMacro(NULL, "__dbi_txn", NULL, __dbi_txn, -1);
  +    addMacro(NULL, "_dbi_tags", NULL, _dbi_tags, -1);
  +    addMacro(NULL, "_dbi_config", NULL, _dbi_config, -1);
  +    addMacro(NULL, "_dbi_config_Packages", NULL, _dbi_config_Packages, -1);
  +
  +    _free(dbpath);
  +    _free(__dbi_txn);
  +    _free(tmppath);
  +    return xx;
   }
   
   char *rootPath = NULL;
  @@ -362,43 +424,42 @@
   int ac = 0;
   
   static struct poptOption optionsTable[] = {
  - { "root", '\0', POPT_ARG_STRING,      &rootPath, 0,
  -     "rpm root path", "path" },
  +    {"root", '\0', POPT_ARG_STRING, &rootPath, 0,
  +     "rpm root path", "path"},
  +
  +    {"btree", 'b', POPT_ARG_VAL, &dbType, 0,
  +     "swap indexes to big endian", NULL},
  +    {"hash", 'h', POPT_ARG_VAL, &dbType, 1,
  +     "swap indexes to little endian", NULL},
  +
  +    {"bigendian", 'B', POPT_ARG_VAL, &byteOrder, 1,
  +     "swap indexes to big endian", NULL},
  +    {"littleendian", 'L', POPT_ARG_VAL, &byteOrder, -1,
  +     "swap indexes to little endian", NULL},
   
  - { "btree", 'b', POPT_ARG_VAL,   &dbType, 0,
  -     "swap indexes to big endian", NULL },
  - { "hash", 'h', POPT_ARG_VAL,   &dbType, 1,
  -     "swap indexes to little endian", NULL },
  -
  - { "bigendian", 'B', POPT_ARG_VAL,   &byteOrder, 1,
  -     "swap indexes to big endian", NULL },
  - { "littleendian", 'L', POPT_ARG_VAL,   &byteOrder, -1,
  -     "swap indexes to little endian", NULL },
  -
  - { "rebuilddb", 'r', POPT_ARG_VAL,   &rebuildDb, 1,
  -     "rebuild rpm database", NULL },
  -
  -    POPT_AUTOALIAS
  -    POPT_AUTOHELP
  -    POPT_TABLEEND
  +    {"rebuilddb", 'r', POPT_ARG_VAL, &rebuildDb, 1,
  +     "rebuild rpm database", NULL},
  +
  +    POPT_AUTOALIAS POPT_AUTOHELP POPT_TABLEEND
   };
   
  -int main(int argc, char *argv[]) {
  +int main(int argc, char *argv[])
  +{
       int rc;
       poptContext optCon = rpmioInit(argc, argv, optionsTable);
       ARGV_t av = NULL;
  -    
  +
       if (optCon == NULL)
  -        exit(EXIT_FAILURE);
  +     exit(EXIT_FAILURE);
   
       av = poptGetArgs(optCon);
       ac = argvCount(av);
   
  -    if(ac) {
  +    if (ac) {
        poptPrintUsage(optCon, stderr, 0);
        return 2;
       }
  -     
  +
   
       rc = rpmReadConfigFiles(NULL, NULL);
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to