poldek: poldek/pkgdir/rpmdb/rpmdb.c - cleanup; removed pkgdb_map()...
mis
mis at pld-linux.org
Tue Jun 19 22:45:17 CEST 2007
Author: mis Date: Tue Jun 19 20:45:17 2007 GMT
Module: poldek Tag: HEAD
---- Log message:
- cleanup; removed pkgdb_map() usage
---- Files affected:
poldek/poldek/pkgdir/rpmdb:
rpmdb.c (1.27 -> 1.28)
---- Diffs:
================================================================
Index: poldek/poldek/pkgdir/rpmdb/rpmdb.c
diff -u poldek/poldek/pkgdir/rpmdb/rpmdb.c:1.27 poldek/poldek/pkgdir/rpmdb/rpmdb.c:1.28
--- poldek/poldek/pkgdir/rpmdb/rpmdb.c:1.27 Tue Aug 22 17:14:20 2006
+++ poldek/poldek/pkgdir/rpmdb/rpmdb.c Tue Jun 19 22:45:12 2007
@@ -27,8 +27,8 @@
#include <sys/stat.h>
#include <fcntl.h>
-
#include <trurl/trurl.h>
+#include <sigint/sigint.h>
#include "i18n.h"
#include "log.h"
@@ -139,81 +139,85 @@
return fl;
}
-
-struct map_struct {
- tn_array *pkgs;
- struct pkgdir *pkgdir;
- struct pkgroup_idx *pkgroups;
- tn_alloc *na;
-};
-
+/* load package from header and add it to pkgdir */
static
-void db_map_fn(unsigned int recno, void *header, void *ptr)
+int load_package(unsigned int recno, void *header, struct pkgdir *pkgdir)
{
- struct pkg *pkg;
- struct map_struct *ms = ptr;
-
- if ((pkg = pm_rpm_ldhdr(ms->na, header, NULL, 0, PKG_LDCAPREQS))) {
- char **hdr_langs;
-
- pkg->recno = recno;
- pkg->load_pkguinf = load_pkguinf;
- pkg->load_nodep_fl = load_nodep_fl;
-
- if (poldek_VERBOSE > 3)
- msgn(4, "rpmdb: ld %s", pkg_snprintf_s(pkg));
-
- if (strcmp(pkg->name, "quake2") != 0) /* broken rpmdb... */
- pkg->groupid = pkgroup_idx_update_rpmhdr(ms->pkgroups, header);
- n_array_push(ms->pkgs, pkg);
-
- hdr_langs = pm_rpmhdr_langs(header);
-
- if (hdr_langs) {
- int i = 0;
- while (hdr_langs[i]) {
- pkgdir__update_avlangs(ms->pkgdir, hdr_langs[i], 1);
- i++;
- }
- free(hdr_langs);
- }
+ struct pkg *pkg;
+ char **langs;
- if (n_array_size(ms->pkgs) % 100 == 0)
- msg(3, "_.");
+ pkg = pm_rpm_ldhdr(pkgdir->na, header, NULL, 0, PKG_LDCAPREQS);
+
+ if (pkg == NULL)
+ return 0;
+
+ pkg->recno = recno;
+ pkg->load_pkguinf = load_pkguinf;
+ pkg->load_nodep_fl = load_nodep_fl;
+
+ if (poldek_VERBOSE > 3)
+ msgn(4, "rpmdb: ld %s", pkg_id(pkg));
+
+#if 0 /* hope outdated */
+ if (strcmp(pkg->name, "quake2") != 0) /* broken rpmdb... */
+ pkg->groupid = pkgroup_idx_update_rpmhdr(pkgdir->pkgroups, header);
+#endif
+ n_array_push(pkgdir->pkgs, pkg);
+
+ if ((langs = pm_rpmhdr_langs(header))) {
+ int i = 0;
+ while (langs[i])
+ pkgdir__update_avlangs(pkgdir, langs[i++], 1);
+ free(langs);
}
+
+ return 1;
}
static
int load_db_packages(struct pm_ctx *pmctx, struct pkgdir *pkgdir,
- tn_array *pkgs, const char *rootdir, const char *path,
- struct pkgroup_idx *pkgroups,
- unsigned ldflags, tn_alloc *na)
+ const char *rootdir)
{
- char dbfull_path[PATH_MAX];
struct pkgdb *db;
- struct map_struct ms;
-
- ldflags = ldflags; /* unused */
+ struct pkgdb_it it;
+ const struct pm_dbrec *dbrec;
+ char dbfull_path[PATH_MAX];
+ int n;
snprintf(dbfull_path, sizeof(dbfull_path), "%s%s",
- *(rootdir + 1) == '\0' ? "" : rootdir, path != NULL ? path : "");
+ *(rootdir + 1) == '\0' ? "" : rootdir,
+ pkgdir->idxpath != NULL ? pkgdir->idxpath : "");
-
- if ((db = pkgdb_open(pmctx, rootdir, path, O_RDONLY, NULL)) == NULL)
+ db = pkgdb_open(pmctx, rootdir, pkgdir->idxpath, O_RDONLY, NULL);
+ if (db == NULL)
return 0;
msg(3, _("Loading db packages%s%s%s..."), *dbfull_path ? " [":"",
dbfull_path, *dbfull_path ? "]":"");
- ms.pkgs = pkgs;
- ms.pkgdir = pkgdir;
- ms.pkgroups = pkgroups;
- ms.na = na;
+ pkgdb_it_init(db, &it, PMTAG_RECNO, NULL);
- pkgdb_map(db, db_map_fn, &ms);
+ n = 0;
+ while ((dbrec = pkgdb_it_get(&it))) {
+ if (dbrec->hdr) {
+ if (load_package(dbrec->recno, dbrec->hdr, pkgdir))
+ n++;
+ }
+ msg(1, "_.");
+ if (sigint_reached()) {
+ n = 0;
+ break;
+ }
+ }
+ msgn(1, "_done");
+
+ pkgdb_it_destroy(&it);
pkgdb_free(db);
- msgn(3, _("_done"));
- return n_array_size(pkgs);
+
+ if (n == 0)
+ n_array_clean(pkgdir->pkgs);
+
+ return n_array_size(pkgdir->pkgs);
}
/* just check if database exists */
@@ -243,15 +247,17 @@
int i;
struct pm_ctx *pmctx = pkgdir->mod_data;
+ ldflags = ldflags; /* unused */
+
n_assert(pmctx);
if (pkgdir->pkgroups == NULL)
pkgdir->pkgroups = pkgroup_idx_new();
pkgdir->ts = pm_dbmtime(pmctx, pkgdir->idxpath);
+
+ DBGF("prev_dir %p\n", pkgdir->prev_pkgdir);
- if (!load_db_packages(pkgdir->mod_data, pkgdir, pkgdir->pkgs, "/",
- pkgdir->idxpath, pkgdir->pkgroups, ldflags,
- pkgdir->na))
+ if (!load_db_packages(pkgdir->mod_data, pkgdir, "/"))
return 0;
for (i=0; i < n_array_size(pkgdir->pkgs); i++) {
================================================================
---- CVS-web:
http://cvs.pld-linux.org/poldek/poldek/pkgdir/rpmdb/rpmdb.c?r1=1.27&r2=1.28&f=u
More information about the pld-cvs-commit
mailing list