- API: replace rpmdbFindByLabel with RPMDBI_LABEL iteration.
- API: replace rpmdbGetRecord with iterators.
- API: replace findMatches with iterators.
CVS patchset: 3704
CVS date: 2000/04/27 00:10:28
- make db indices as lightweight as possible, with per-dbi config.
- db1.c will never be needed, eliminate.
- API: merge rebuilddb.c into rpmdb.c.
-
+ - API: replace rpmdbUpdateRecord with rpmdbRemove/rpmdbAdd.
+ - API: replace rpmdbFindByLabel with RPMDBI_LABEL iteration.
+ - API: replace rpmdbGetRecord with iterators.
+ - API: replace findMatches with iterators.
+
3.0.3 -> 3.0.4
- use compressed filenames on install side.
- start unifying FD types, CFD_t now gone.
}
static int db0cclose(dbiIndex dbi, DBC * dbcursor, unsigned int flags) {
+ dbi->dbi_lastoffset = 0;
return 0;
}
}
oflags = (dbi->dbi_oeflags | dbi->dbi_oflags);
-#if NOTYET
- if ( dbi->dbi_mode & O_EXCL) oflags |= DB_EXCL;
-#endif
- if (!dbi->dbi_mode & O_RDWR) oflags |= DB_RDONLY;
+ if (dbi->dbi_mode & O_RDWR) {
+ if ( dbi->dbi_mode & O_EXCL) oflags |= DB_EXCL;
+ } else
+ oflags |= DB_RDONLY;
if ( dbi->dbi_mode & O_CREAT) oflags |= DB_CREATE;
if ( dbi->dbi_mode & O_TRUNC) oflags |= DB_TRUNCATE;
if (suggestion) *suggestion = NULL;
- { mi = rpmdbInitIterator(rpmdep->db, 1, keyDepend, 0);
+ { mi = rpmdbInitIterator(rpmdep->db, RPMDBI_DEPENDS, keyDepend, 0);
if (mi) {
rc = rpmdbGetIteratorOffset(mi);
rpmdbFreeIterator(mi);
struct availablePackage * p;
int i, j;
int rc;
+ rpmdbMatchIterator mi = NULL;
Header h = NULL;
struct problemsSet ps;
}
/* now look at the removed packages and make sure they aren't critical */
- for (i = 0; i < rpmdep->numRemovedPackages; i++) {
-
- h = rpmdbGetRecord(rpmdep->db, rpmdep->removedPackages[i]);
- if (h == NULL) {
- rpmError(RPMERR_DBCORRUPT,
- _("cannot read header at %d for dependency check"),
- rpmdep->removedPackages[i]);
- goto exit;
- }
+ mi = rpmdbInitIterator(rpmdep->db, RPMDBI_PACKAGES, NULL, 0);
+ rpmdbAppendIteratorMatches(mi, rpmdep->removedPackages,
+ rpmdep->numRemovedPackages);
+ while ((h = rpmdbNextIterator(mi)) != NULL) {
{ const char * name;
headerNVR(h, &name, NULL, NULL);
}
}
- headerFree(h); h = NULL;
+ rpmdbFreeIterator(mi);
+ mi = NULL;
}
if (!ps.num) {
return 0;
exit:
- if (h)
- headerFree(h);
+ if (mi)
+ rpmdbFreeIterator(mi);
if (ps.problems) free(ps.problems);
return 1;
}
for (fileInfo = replList; fileInfo->otherPkg; fileInfo++) {
if (secOffset != fileInfo->otherPkg) {
+ rpmdbMatchIterator mi;
+
if (secHeader != NULL) {
/* ignore errors here - just do the best we can */
- rpmdbUpdateRecord(db, secOffset, secHeader);
+ rpmdbRemove(db, secOffset, 1);
+ rpmdbAdd(db, secHeader);
headerFree(secHeader);
}
secOffset = fileInfo->otherPkg;
- sh = rpmdbGetRecord(db, secOffset);
- if (sh == NULL) {
+
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &secOffset, sizeof(secOffset));
+ sh = rpmdbNextIterator(mi);
+ if (sh == NULL)
secOffset = 0;
- } else {
+ else
secHeader = headerCopy(sh); /* so we can modify it */
- headerFree(sh);
- }
+ rpmdbFreeIterator(mi);
headerGetEntry(secHeader, RPMTAG_FILESTATES, &type,
(void **) &secStates, &count);
if (secHeader != NULL) {
/* ignore errors here - just do the best we can */
- rpmdbUpdateRecord(db, secOffset, secHeader);
+ rpmdbRemove(db, secOffset, 1);
+ rpmdbAdd(db, secHeader);
headerFree(secHeader);
}
}
}
-int XshowMatches(QVA_t *qva, rpmdbMatchIterator mi, QVF_t showPackage)
+#ifndef DYING
+int showMatches(QVA_t *qva, rpmdbMatchIterator mi, QVF_t showPackage)
{
Header h;
int ec = 0;
rpmdbFreeIterator(mi);
return ec;
}
-
+#else
int showMatches(QVA_t *qva, rpmdb db, dbiIndexSet matches, QVF_t showPackage)
{
Header h;
}
return ec;
}
+#endif
/*
* XXX Eliminate linkage loop into librpmbuild.a
int rpmQueryVerify(QVA_t *qva, enum rpmQVSources source, const char * arg,
rpmdb db, QVF_t showPackage)
{
+#ifdef DYING
dbiIndexSet matches = NULL; /* XXX DYING */
+#endif
rpmdbMatchIterator mi = NULL;
Header h;
int rc;
case RPMQV_ALL:
/* RPMDBI_PACKAGES */
- mi = rpmdbInitIterator(db, 0, NULL, 0);
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0);
if (mi == NULL) {
fprintf(stderr, _("no packages\n"));
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
break;
fprintf(stderr, _("group %s does not contain any packages\n"), arg);
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
break;
fprintf(stderr, _("no package triggers %s\n"), arg);
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
break;
fprintf(stderr, _("no package requires %s\n"), arg);
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
break;
fprintf(stderr, _("no package provides %s\n"), arg);
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
break;
}
}
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
break;
}
rpmMessage(RPMMESS_DEBUG, _("package record number: %u\n"), recOffset);
/* RPMDBI_PACKAGES */
- mi = rpmdbInitIterator(db, 0, &recOffset, sizeof(recOffset));
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &recOffset, sizeof(recOffset));
if (mi == NULL) {
fprintf(stderr, _("record %d could not be read\n"), recOffset);
retcode = 1;
} else {
- retcode = XshowMatches(qva, mi, showPackage);
+ retcode = showMatches(qva, mi, showPackage);
}
} break;
case RPMQV_PACKAGE:
+#ifdef DYING
rc = rpmdbFindByLabel(db, arg, &matches);
if (rc == 1) {
retcode = 1;
} else {
retcode = showMatches(qva, db, matches, showPackage);
}
+#else
+ /* XXX HACK to get rpmdbFindByLabel out of the API */
+ mi = rpmdbInitIterator(db, RPMDBI_LABEL, arg, 0);
+ if (mi == NULL) {
+ fprintf(stderr, _("package %s is not installed\n"), arg);
+ retcode = 1;
+ } else {
+ retcode = showMatches(qva, mi, showPackage);
+ }
+#endif
break;
}
+#ifdef DYING
if (matches) { /* XXX DYING */
dbiFreeIndexSet(matches);
matches = NULL;
}
+#endif
return retcode;
}
* @param setp address of items retrieved from index database
* @return -1 error, 0 success, 1 not found
*/
-static int dbiSearchIndex(dbiIndex dbi, const char * keyp, size_t keylen,
+static int dbiSearch(dbiIndex dbi, const char * keyp, size_t keylen,
dbiIndexSet * setp)
{
int rc;
/*@=compmempass@*/
/**
- * Append element to set of index database items.
- * @param set set of index database items
- * @param rec item to append to set
- * @return 0 success (always)
+ * Append element(s) to set of index database items.
+ * @param set set of index database items
+ * @param recs array of items to append to set
+ * @param nrecs number of items
+ * @return 0 success (always)
*/
-static inline int dbiAppendIndexRecord(dbiIndexSet set, dbiIndexRecord rec)
+static inline int dbiAppendSet(dbiIndexSet set, dbiIndexRecord recs, int nrecs)
{
- set->count++;
-
- if (set->count == 1) {
- set->recs = xmalloc(set->count * sizeof(*(set->recs)));
- } else {
- set->recs = xrealloc(set->recs, set->count * sizeof(*(set->recs)));
- }
- set->recs[set->count - 1].recOffset = rec->recOffset;
- set->recs[set->count - 1].fileNumber = rec->fileNumber;
-
+ set->recs = (set->count == 0)
+ ? xmalloc(nrecs * sizeof(*(set->recs)))
+ : xrealloc(set->recs, (set->count + nrecs) * sizeof(*(set->recs)));
+ memcpy(set->recs + set->count, recs, nrecs * sizeof(*recs));
+ set->count += nrecs;
return 0;
}
return rc;
}
-/* XXX depends.c, install.c, query.c, transaction.c, uninstall.c */
-Header rpmdbGetRecord(rpmdb rpmdb, unsigned int offset)
+#ifndef DYING_NOTYET
+/* XXX install.c, query.c, transaction.c, uninstall.c */
+static Header rpmdbGetRecord(rpmdb rpmdb, unsigned int offset)
{
int rpmtag;
dbiIndex dbi;
return NULL;
return headerLoad(uh);
}
+#endif
static int rpmdbFindByFile(rpmdb rpmdb, const char * filespec,
/*@out@*/ dbiIndexSet * matches)
fp1 = fpLookup(fpc, dirName, baseName, 1);
dbi = dbiOpen(rpmdb, RPMTAG_BASENAMES, 0);
- rc = dbiSearchIndex(dbi, baseName, 0, &allMatches);
+ rc = dbiSearch(dbi, baseName, 0, &allMatches);
if (rc) {
dbiFreeIndexSet(allMatches);
allMatches = NULL;
unsigned int prevoff;
Header h;
- if ((h = rpmdbGetRecord(rpmdb, offset)) == NULL) {
+#ifndef DYING_NOTYET
+ h = rpmdbGetRecord(rpmdb, offset);
+#else
+ { rpmdbMatchIterator mi;
+ mi = rpmdbInitIterator(rpmdb, RPMDBI_PACKAGES, &offset, sizeof(offset));
+ h = rpmdbNextIterator(mi);
+ if (h)
+ h = headerLink(h);
+ rpmdbFreeIterator(mi);
+ }
+#endif
+
+ if (h == NULL) {
i++;
continue;
}
if (FP_EQUAL(fp1, fp2)) {
rec->recOffset = dbiIndexRecordOffset(allMatches, i);
rec->fileNumber = dbiIndexRecordFileNumber(allMatches, i);
- dbiAppendIndexRecord(*matches, rec);
+ dbiAppendSet(*matches, rec, 1);
}
prevoff = offset;
int rc;
dbix = dbiTagToDbix(RPMTAG_NAME);
- rc = dbiSearchIndex(rpmdb->_dbi[dbix], name, 0, &matches);
+ rc = dbiSearch(rpmdb->_dbi[dbix], name, 0, &matches);
switch (rc) {
default:
return rc;
}
+/* XXX transaction.c */
+/* 0 found matches */
+/* 1 no matches */
+/* 2 error */
+static int dbiFindMatches(dbiIndex dbi, const char * name, const char * version,
+ const char * release, dbiIndexSet * matches)
+{
+ int gotMatches;
+ int rc;
+ int i;
+
+ rc = dbiSearch(dbi, name, 0, matches);
+
+ if (rc != 0) {
+ rc = ((rc == -1) ? 2 : 1);
+ goto exit;
+ }
+
+ if (!version && !release) {
+ rc = 0;
+ goto exit;
+ }
+
+ gotMatches = 0;
+
+ /* make sure the version and releases match */
+ for (i = 0; i < dbiIndexSetCount(*matches); i++) {
+ unsigned int recoff = dbiIndexRecordOffset(*matches, i);
+ int goodRelease, goodVersion;
+ const char * pkgVersion;
+ const char * pkgRelease;
+ Header h;
+
+ if (recoff == 0)
+ continue;
+
+#ifndef DYING_NOTYET
+ h = rpmdbGetRecord(dbi->dbi_rpmdb, recoff);
+#else
+ { rpmdbMatchIterator mi;
+ mi = rpmdbInitIterator(rpmdb, RPMDBI_PACKAGES, &recoff, sizeof(recoff));
+ h = rpmdbNextIterator(mi);
+ if (h)
+ h = headerLink(h);
+ rpmdbFreeIterator(mi);
+ }
+#endif
+ if (h == NULL) {
+ rpmError(RPMERR_DBCORRUPT, _("%s: cannot read header at 0x%x"),
+ "findMatches", recoff);
+ rc = 2;
+ goto exit;
+ }
+
+ headerNVR(h, NULL, &pkgVersion, &pkgRelease);
+
+ goodRelease = goodVersion = 1;
+
+ if (release && strcmp(release, pkgRelease)) goodRelease = 0;
+ if (version && strcmp(version, pkgVersion)) goodVersion = 0;
+
+ if (goodRelease && goodVersion)
+ gotMatches = 1;
+ else
+ dbiIndexRecordOffsetSave(*matches, i, 0);
+
+ headerFree(h);
+ }
+
+ if (!gotMatches) {
+ rc = 1;
+ goto exit;
+ }
+ rc = 0;
+
+exit:
+ if (rc && matches && *matches) {
+ dbiFreeIndexSet(*matches);
+ *matches = NULL;
+ }
+ return rc;
+}
+
+/* XXX query.c, rpminstall.c */
+/* 0 found matches */
+/* 1 no matches */
+/* 2 error */
+static int dbiFindByLabel(dbiIndex dbi, const char * arg, dbiIndexSet * matches)
+{
+ char * localarg, * chptr;
+ char * release;
+ int rc;
+
+ if (!strlen(arg)) return 1;
+
+ /* did they give us just a name? */
+ rc = dbiFindMatches(dbi, arg, NULL, NULL, matches);
+ if (rc != 1) return rc;
+
+ /* maybe a name and a release */
+ localarg = alloca(strlen(arg) + 1);
+ strcpy(localarg, arg);
+
+ chptr = (localarg + strlen(localarg)) - 1;
+ while (chptr > localarg && *chptr != '-') chptr--;
+ if (chptr == localarg) return 1;
+
+ *chptr = '\0';
+ rc = dbiFindMatches(dbi, localarg, chptr + 1, NULL, matches);
+ if (rc != 1) return rc;
+
+ /* how about name-version-release? */
+
+ release = chptr + 1;
+ while (chptr > localarg && *chptr != '-') chptr--;
+ if (chptr == localarg) return 1;
+
+ *chptr = '\0';
+ return dbiFindMatches(dbi, localarg, chptr + 1, release, matches);
+}
+
struct _rpmdbMatchIterator {
- const void * mi_key;
+ const void * mi_keyp;
size_t mi_keylen;
rpmdb mi_rpmdb;
dbiIndex mi_dbi;
dbiFreeIndexSet(mi->mi_set);
mi->mi_set = NULL;
} else {
- int dbix = 0; /* RPMDBI_PACKAGES */
- dbiIndex dbi = mi->mi_rpmdb->_dbi[dbix];
+ dbiIndex dbi = dbiOpen(mi->mi_rpmdb, RPMDBI_PACKAGES, 0);
if (dbi)
(void) dbiCclose(dbi, NULL, 0);
}
- if (mi->mi_key) {
- xfree(mi->mi_key);
- mi->mi_key = NULL;
+ if (mi->mi_keyp) {
+ xfree(mi->mi_keyp);
+ mi->mi_keyp = NULL;
}
free(mi);
}
Header rpmdbNextIterator(rpmdbMatchIterator mi)
{
dbiIndex dbi;
- int rpmtag;
void * uh = NULL;
size_t uhlen = 0;
void * keyp;
if (mi == NULL)
return NULL;
- rpmtag = 0; /* RPMDBI_PACKAGES */
- dbi = dbiOpen(mi->mi_rpmdb, rpmtag, 0);
+ dbi = dbiOpen(mi->mi_rpmdb, RPMDBI_PACKAGES, 0);
if (dbi == NULL)
return NULL;
/* XXX skip over instances with 0 join key */
do {
if (mi->mi_set) {
- keyp = &mi->mi_offset;
- keylen = sizeof(mi->mi_offset);
if (!(mi->mi_setx < mi->mi_set->count))
return NULL;
- if (mi->mi_dbix != 0) { /* RPMDBI_PACKAGES */
- mi->mi_offset = dbiIndexRecordOffset(mi->mi_set, mi->mi_setx);
- mi->mi_filenum = dbiIndexRecordFileNumber(mi->mi_set, mi->mi_setx);
- }
+ mi->mi_offset = dbiIndexRecordOffset(mi->mi_set, mi->mi_setx);
+ mi->mi_filenum = dbiIndexRecordFileNumber(mi->mi_set, mi->mi_setx);
+ keyp = &mi->mi_offset;
+ keylen = sizeof(mi->mi_offset);
} else {
- keyp = NULL;
- keylen = 0;
+ keyp = (void *)mi->mi_keyp; /* XXX FIXME const */
+ keylen = mi->mi_keylen;
rc = dbiGet(dbi, &keyp, &keylen, &uh, &uhlen, 0);
if (keylen == 0)
keylen = strlen(keyp);
- rc = dbiSearchIndex(dbi, keyp, keylen, &set);
+ rc = dbiSearch(dbi, keyp, keylen, &set);
switch (rc) {
default:
return rc;
}
+void rpmdbAppendIteratorMatches(rpmdbMatchIterator mi, int * offsets,
+ int numOffsets)
+{
+ dbiIndexRecord recs;
+ int i;
+
+ if (mi == NULL)
+ return;
+ recs = alloca(numOffsets * sizeof(*recs));
+ for (i = 0; i < numOffsets; i++) {
+ memset(recs + i, 0, sizeof(*recs));
+ recs[i].recOffset = offsets[i];
+ }
+ if (mi->mi_set == NULL)
+ mi->mi_set = xcalloc(1, sizeof(*mi->mi_set));
+ dbiAppendSet(mi->mi_set, recs, numOffsets);
+}
+
rpmdbMatchIterator rpmdbInitIterator(rpmdb rpmdb, int rpmtag,
const void * keyp, size_t keylen)
{
rpmdbMatchIterator mi = NULL;
dbiIndexSet set = NULL;
dbiIndex dbi;
+ int isLabel = 0;
int dbix;
+ /* XXX HACK to remove rpmdbFindByLabel/findMatches from the API */
+ switch (rpmtag) {
+ case RPMDBI_LABEL:
+ rpmtag = RPMTAG_NAME;
+ isLabel = 1;
+ break;
+ }
+
dbix = dbiTagToDbix(rpmtag);
if (dbix < 0)
return NULL;
if (dbi == NULL)
return NULL;
- if (keyp) {
+ assert(dbi->dbi_rmw == NULL); /* db3: avoid "lost" cursors */
+ assert(dbi->dbi_lastoffset == 0); /* db0: avoid "lost" cursors */
+
+ dbi->dbi_lastoffset = 0; /* db0: rewind to beginning */
+
+ if (rpmtag != RPMDBI_PACKAGES && keyp) {
int rc;
- if (rpmtag == RPMTAG_BASENAMES) {
+ if (isLabel) {
+ /* XXX HACK to get rpmdbFindByLabel out of the API */
+ rc = dbiFindByLabel(dbi, keyp, &set);
+ } else if (rpmtag == RPMTAG_BASENAMES) {
rc = rpmdbFindByFile(rpmdb, keyp, &set);
} else {
- rc = dbiSearchIndex(dbi, keyp, keylen, &set);
+ rc = dbiSearch(dbi, keyp, keylen, &set);
}
switch (rc) {
default:
}
}
- mi = xcalloc(sizeof(*mi), 1);
if (keyp) {
- if (keylen == 0)
+ char * k;
+
+ if (rpmtag != RPMDBI_PACKAGES && keylen == 0)
keylen = strlen(keyp);
+ k = xmalloc(keylen + 1);
+ memcpy(k, keyp, keylen);
+ k[keylen] = '\0'; /* XXX for strings */
+ keyp = k;
+ }
- { char * k = xmalloc(keylen + 1);
- memcpy(k, keyp, keylen);
- k[keylen] = '\0'; /* XXX for strings */
- mi->mi_key = k;
- }
+ mi = xcalloc(sizeof(*mi), 1);
+ mi->mi_keyp = keyp;
+ mi->mi_keylen = keylen;
- mi->mi_keylen = keylen;
- } else {
- mi->mi_key = NULL;
- mi->mi_keylen = 0;
- if (dbi)
- dbi->dbi_lastoffset = 0; /* db0: rewind to beginning */
- }
mi->mi_rpmdb = rpmdb;
mi->mi_dbi = dbi;
dbiIndexSet set = NULL;
int rc;
- rc = dbiSearchIndex(dbi, keyp, 0, &set);
+ rc = dbiSearch(dbi, keyp, 0, &set);
switch (rc) {
case -1: /* error */
return rc;
}
-/* XXX uninstall.c */
+/* XXX install.c uninstall.c */
int rpmdbRemove(rpmdb rpmdb, unsigned int offset, int tolerant)
{
Header h;
+#ifndef DYING_NOTYET
h = rpmdbGetRecord(rpmdb, offset);
+#else
+ { rpmdbMatchIterator mi;
+ mi = rpmdbInitIterator(rpmdb, RPMDBI_PACKAGES, &offset, sizeof(offset));
+ h = rpmdbNextIterator(mi);
+ if (h)
+ h = headerLink(h);
+ rpmdbFreeIterator(mi);
+ }
+#endif
if (h == NULL) {
- rpmError(RPMERR_DBCORRUPT, _("rpmdbRemove: cannot read header at 0x%x"),
- offset);
+ rpmError(RPMERR_DBCORRUPT, _("%s: cannot read header at 0x%x"),
+ "rpmdbRemove", offset);
return 1;
}
dbiIndexSet set = NULL;
int rc;
- rc = dbiSearchIndex(dbi, index, 0, &set);
+ rc = dbiSearch(dbi, index, 0, &set);
switch (rc) {
default:
set = xcalloc(1, sizeof(*set));
/*@fallthrough@*/
case 0: /* success */
- dbiAppendIndexRecord(set, rec);
+ dbiAppendSet(set, rec, 1);
if (dbiUpdateIndex(dbi, index, set))
rc = 1;
break;
return rc;
}
-/* XXX install.c */
-int rpmdbUpdateRecord(rpmdb rpmdb, int offset, Header newHeader)
-{
- int rc = 0;
-
- if (rpmdbRemove(rpmdb, offset, 1))
- return 1;
-
- if (rpmdbAdd(rpmdb, newHeader))
- return 1;
-
- return rc;
-}
-
static void rpmdbRemoveDatabase(const char * rootdir, const char * dbpath)
{
int i;
/* Add db (recnum,filenum) to list for fingerprint matches. */
for (i = 0; i < num; i++, im++) {
if (FP_EQUAL_DIFFERENT_CACHE(fps[i], fpList[im->fpNum]))
- dbiAppendIndexRecord(matchList[im->fpNum], im);
+ dbiAppendSet(matchList[im->fpNum], im, 1);
}
free(fps);
}
-/* XXX transaction.c */
-/* 0 found matches */
-/* 1 no matches */
-/* 2 error */
-int findMatches(rpmdb rpmdb, const char * name, const char * version,
- const char * release, dbiIndexSet * matches)
-{
- dbiIndex dbi;
- int gotMatches;
- int rc;
- int i;
-
- dbi = dbiOpen(rpmdb, RPMTAG_NAME, 0);
- rc = dbiSearchIndex(dbi, name, 0, matches);
-
- if (rc != 0) {
- rc = ((rc == -1) ? 2 : 1);
- goto exit;
- }
-
- if (!version && !release) {
- rc = 0;
- goto exit;
- }
-
- gotMatches = 0;
-
- /* make sure the version and releases match */
- for (i = 0; i < dbiIndexSetCount(*matches); i++) {
- unsigned int recoff = dbiIndexRecordOffset(*matches, i);
- int goodRelease, goodVersion;
- const char * pkgVersion;
- const char * pkgRelease;
- Header h;
-
- if (recoff == 0)
- continue;
-
- h = rpmdbGetRecord(rpmdb, recoff);
- if (h == NULL) {
- rpmError(RPMERR_DBCORRUPT,_("cannot read header at %d for lookup"),
- recoff);
- rc = 2;
- goto exit;
- }
-
- headerNVR(h, NULL, &pkgVersion, &pkgRelease);
-
- goodRelease = goodVersion = 1;
-
- if (release && strcmp(release, pkgRelease)) goodRelease = 0;
- if (version && strcmp(version, pkgVersion)) goodVersion = 0;
-
- if (goodRelease && goodVersion)
- gotMatches = 1;
- else
- dbiIndexRecordOffsetSave(*matches, i, 0);
-
- headerFree(h);
- }
-
- if (!gotMatches) {
- rc = 1;
- goto exit;
- }
- rc = 0;
-
-exit:
- if (rc && matches && *matches) {
- dbiFreeIndexSet(*matches);
- *matches = NULL;
- }
- return rc;
-}
-
-/* XXX query.c, rpminstall.c */
-/* 0 found matches */
-/* 1 no matches */
-/* 2 error */
-int rpmdbFindByLabel(rpmdb rpmdb, const char * arg, dbiIndexSet * matches)
-{
- char * localarg, * chptr;
- char * release;
- int rc;
-
- if (!strlen(arg)) return 1;
-
- /* did they give us just a name? */
- rc = findMatches(rpmdb, arg, NULL, NULL, matches);
- if (rc != 1) return rc;
-
- /* maybe a name and a release */
- localarg = alloca(strlen(arg) + 1);
- strcpy(localarg, arg);
-
- chptr = (localarg + strlen(localarg)) - 1;
- while (chptr > localarg && *chptr != '-') chptr--;
- if (chptr == localarg) return 1;
-
- *chptr = '\0';
- rc = findMatches(rpmdb, localarg, chptr + 1, NULL, matches);
- if (rc != 1) return rc;
-
- /* how about name-version-release? */
-
- release = chptr + 1;
- while (chptr > localarg && *chptr != '-') chptr--;
- if (chptr == localarg) return 1;
-
- *chptr = '\0';
- return findMatches(rpmdb, localarg, chptr + 1, release, matches);
-}
-
/** */
int rpmdbRebuild(const char * rootdir)
{
#define _RECNUM rpmdbGetIteratorOffset(mi)
/* RPMDBI_PACKAGES */
- mi = rpmdbInitIterator(olddb, 0, NULL, 0);
+ mi = rpmdbInitIterator(olddb, RPMDBI_PACKAGES, NULL, 0);
while ((h = rpmdbNextIterator(mi)) != NULL) {
/* let's sanity check this record a bit, otherwise just skip it */
int rpmdbAdd(rpmdb rpmdb, Header dbentry);
/**
- * @param rpmdb rpm database
- */
-int rpmdbUpdateRecord(rpmdb rpmdb, int secOffset, Header secHeader);
-
-/**
*/
unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
if (transFlags & RPMTRANS_FLAG_TEST)
mode = O_RDONLY;
else
- mode = O_RDWR | O_CREAT;
+ mode = O_RDWR | O_CREAT; /* XXX can't O_EXCL */
for (defaultReloc = relocations; defaultReloc && defaultReloc->oldPath;
defaultReloc++);
int interfaceFlags)
{
rpmdb db;
+#ifdef DYING
dbiIndexSet matches = NULL;
- int i, j;
+#endif
int mode;
- int rc;
int count;
const char ** arg;
int numFailed = 0;
exit(EXIT_FAILURE);
}
- j = 0;
rpmdep = rpmtransCreateSet(db, rootdir);
for (arg = argv; *arg; arg++) {
+#ifdef DYING
+ int rc;
+ int i;
+
rc = rpmdbFindByLabel(db, *arg, &matches);
switch (rc) {
case 1:
rpmMessage(RPMMESS_ERROR, _("\"%s\" specifies multiple packages\n"),
*arg);
numFailed++;
+ break;
}
- else {
- for (i = 0; i < dbiIndexSetCount(matches); i++) {
- unsigned int recOffset = dbiIndexRecordOffset(matches, i);
- if (recOffset) {
- rpmtransRemovePackage(rpmdep, recOffset);
- numPackages++;
- }
+ for (i = 0; i < dbiIndexSetCount(matches); i++) {
+ unsigned int recOffset = dbiIndexRecordOffset(matches, i);
+ if (recOffset) {
+ rpmtransRemovePackage(rpmdep, recOffset);
+ numPackages++;
}
}
dbiFreeIndexSet(matches);
matches = NULL;
}
+#else /* DYING */
+ rpmdbMatchIterator mi;
+
+ /* XXX HACK to get rpmdbFindByLabel out of the API */
+ mi = rpmdbInitIterator(db, RPMDBI_LABEL, *arg, 0);
+ count = rpmdbGetIteratorCount(mi);
+ if (count <= 0) {
+ rpmMessage(RPMMESS_ERROR, _("package %s is not installed\n"), *arg);
+ numFailed++;
+ } else if (!(count == 1 || (interfaceFlags & UNINSTALL_ALLMATCHES))) {
+ rpmMessage(RPMMESS_ERROR, _("\"%s\" specifies multiple packages\n"),
+ *arg);
+ numFailed++;
+ } else {
+ Header h; /* XXX iterator owns the reference */
+ while ((h = rpmdbNextIterator(mi)) != NULL) {
+ unsigned int recOffset = rpmdbGetIteratorOffset(mi);
+ if (recOffset) {
+ rpmtransRemovePackage(rpmdep, recOffset);
+ numPackages++;
+ }
+ }
+ }
+ rpmdbFreeIterator(mi);
+#endif /* DYING */
}
if (!(interfaceFlags & UNINSTALL_NODEPS)) {
/* this chains to headerDefaultFormats[] */
extern const struct headerSprintfExtension rpmHeaderFormats[];
-/* these tags are for both the database and packages */
+/* these pseudo-tags are used in the dbi interface */
+#define RPMDBI_PACKAGES 0
+#define RPMDBI_DEPENDS 1
+#define RPMDBI_LABEL 2 /* XXX remove rpmdbFindByLabel from API */
+
+/* these tags are found in package headers */
/* none of these can be 0 !! */
#define RPMTAG_NAME 1000
*/
int rpmdbOpenForTraversal(const char * prefix, /*@out@*/ rpmdb * dbp);
+#ifdef DYING
/**
* @param db rpm database
*/
*/
int rpmdbFindByLabel(rpmdb db, const char * label,
/*@out@*/ dbiIndexSet * matches);
+#endif
/**
* Return number of instances of package in rpm database.
typedef /*@abstract@*/ struct _rpmdbMatchIterator * rpmdbMatchIterator;
/**
+ * Destroy rpm database iterator.
+ * @param mi rpm database iterator
*/
void rpmdbFreeIterator( /*@only@*/ rpmdbMatchIterator mi);
/**
+ * Return join key for current position of rpm database iterator.
+ * @param mi rpm database iterator
+ * @return current join key
*/
unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
/**
+ * Return number of elements in rpm database iterator.
+ * @param mi rpm database iterator
+ * @return number of elements
*/
int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
/**
+ * Modify iterator to append given set of package instances.
+ * TODO: replace with a more general mechanism.
+ * @param mi rpm database iterator
+ * @param offsets array of package instances to match.
+ * @param numOffsets number of elements in array
+ */
+void rpmdbAppendIteratorMatches(rpmdbMatchIterator mi, int * offsets,
+ int numOffsets);
+
+/**
+ * Modify iterator to filter out headers that do not match version.
+ * TODO: replace with a more general mechanism.
+ * @param mi rpm database iterator
*/
void rpmdbSetIteratorVersion(rpmdbMatchIterator mi, const char * version);
/**
+ * Modify iterator to filter out headers that do not match release.
+ * TODO: replace with a more general mechanism.
+ * @param mi rpm database iterator
*/
void rpmdbSetIteratorRelease(rpmdbMatchIterator mi, const char * release);
/**
+ * Return next package header from iteration.
+ * @param mi rpm database iterator
+ * @return NULL on end of iteration.
*/
Header rpmdbNextIterator(rpmdbMatchIterator mi);
/**
+ * Return database iterator.
+ * @param rpmdb rpm database
+ * @param rpmtag rpm tag
+ * @param keyp key data (NULL for sequential acess)
+ * @param keylen key data length (0 will use strlen(keyp))
+ * @return NULL on failure
*/
-/*@only@*/ /*@null@*/ rpmdbMatchIterator rpmdbInitIterator(rpmdb db, int dbix,
+/*@only@*/ /*@null@*/ rpmdbMatchIterator rpmdbInitIterator(rpmdb rpmdb, int rpmtag,
const void * key, size_t keylen);
/* we pass these around as an array with a sentinel */
typedef int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
/**
- * @param db rpm database
*/
-int XshowMatches(QVA_t *qva, /*@only@*/ rpmdbMatchIterator mi, QVF_t showPackage);
+#ifdef DYING
int showMatches(QVA_t *qva, rpmdb db, dbiIndexSet matches, QVF_t showPackage);
+#else
+int showMatches(QVA_t *qva, /*@only@*/ rpmdbMatchIterator mi, QVF_t showPackage);
+#endif
#define QUERY_FOR_LIST (1 << 1)
#define QUERY_FOR_STATE (1 << 2)
char *s;
switch (tag) {
- case 0:
+ case RPMDBI_PACKAGES:
strcpy(nameBuf, "Packages");
return nameBuf;
/*@notreached@*/ break;
- case 1:
+ case RPMDBI_DEPENDS:
strcpy(nameBuf, "Depends");
return nameBuf;
/*@notreached@*/ break;
const struct headerTagTableEntry *t;
if (!strcmp(tagstr, "Packages"))
- return 0;
+ return RPMDBI_PACKAGES;
if (!strcmp(tagstr, "Depends"))
- return 1;
+ return RPMDBI_DEPENDS;
for (t = rpmTagTable; t->name != NULL; t++) {
if (!strcasecmp(t->name + 7, tagstr))
uint_16 * otherModes;
int numReplaced = 0;
+#ifdef DYING
h = rpmdbGetRecord(db, shared->otherPkg);
if (h == NULL)
return 1;
+#else
+ rpmdbMatchIterator mi;
+
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &shared->otherPkg, sizeof(shared->otherPkg));
+ h = rpmdbNextIterator(mi);
+ if (h == NULL) {
+ rpmdbFreeIterator(mi);
+ return 1;
+ }
+#endif
headerGetEntryMinMemory(h, RPMTAG_FILEMD5S, NULL,
(void **) &otherMd5s, NULL);
free(otherMd5s);
free(otherLinks);
+#ifdef DYING
headerFree(h);
+#else
+ rpmdbFreeIterator(mi);
+#endif
fi->replaced = xrealloc(fi->replaced, /* XXX memory leak */
sizeof(*fi->replaced) * (numReplaced + 1));
const char * otherStates;
int i;
+#ifdef DYING
h = rpmdbGetRecord(db, shared->otherPkg);
if (h == NULL)
return 1;
+#else
+ rpmdbMatchIterator mi;
+
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &shared->otherPkg, sizeof(shared->otherPkg));
+ h = rpmdbNextIterator(mi);
+ if (h == NULL) {
+ rpmdbFreeIterator(mi);
+ return 1;
+ }
+#endif
headerGetEntryMinMemory(h, RPMTAG_FILESTATES, NULL,
(void **) &otherStates, NULL);
fi->actions[fileNum] = FA_SKIP;
}
+#ifdef DYING
headerFree(h);
+#else
+ rpmdbFreeIterator(mi);
+#endif
return 0;
}
int rc, ourrc = 0;
struct availablePackage * alp;
rpmProblemSet probs;
-#ifndef DYING
+#ifdef DYING
dbiIndexSet dbi = NULL;
#endif
Header * hdrs;
rpmdbFreeIterator(mi);
}
-#ifndef DYING
+#ifdef DYING
rc = findMatches(ts->db, alp->name, alp->version, alp->release, &dbi);
switch (rc) {
case 2:
}
#else
if (!(ignoreSet & RPMPROB_FILTER_REPLACEPKG)) {
+ rpmdbMatchIterator mi;
+ mi = rpmdbInitIterator(ts->db, RPMTAG_NAME, alp->name, 0);
+ rpmdbSetIteratorVersion(mi, alp->version);
+ rpmdbSetIteratorRelease(mi, alp->release);
+ while (rpmdbNextIterator(mi) != NULL) {
+ psAppend(probs, RPMPROB_PKG_INSTALLED, alp->key, alp->h, NULL,
+ NULL, 0);
+ break;
+ }
+ rpmdbFreeIterator(mi);
}
#endif
- if (headerGetEntry(alp->h, RPMTAG_BASENAMES, NULL, NULL,
- &fileCount))
+ if (headerGetEntry(alp->h, RPMTAG_BASENAMES, NULL, NULL, &fileCount))
totalFileCount += fileCount;
}
/* FIXME: it seems a bit silly to read in all of these headers twice */
/* The ordering doesn't matter here */
+#ifdef DYING
for (i = 0; i < ts->numRemovedPackages; i++) {
Header h;
if ((h = rpmdbGetRecord(ts->db, ts->removedPackages[i]))) {
- if (headerGetEntry(h, RPMTAG_BASENAMES, NULL, NULL,
- &fileCount))
+ if (headerGetEntry(h, RPMTAG_BASENAMES, NULL, NULL, &fileCount))
totalFileCount += fileCount;
headerFree(h);
}
}
+#else
+ { rpmdbMatchIterator mi;
+ Header h;
+
+ mi = rpmdbInitIterator(ts->db, RPMDBI_PACKAGES, NULL, 0);
+ rpmdbAppendIteratorMatches(mi,
+ ts->removedPackages, ts->numRemovedPackages);
+ while ((h = rpmdbNextIterator(mi)) != NULL) {
+ if (headerGetEntry(h, RPMTAG_BASENAMES, NULL, NULL, &fileCount))
+ totalFileCount += fileCount;
+ }
+ rpmdbFreeIterator(mi);
+ }
+#endif
/* ===============================================
* Initialize file list:
break;
case TR_REMOVED:
fi->record = ts->order[oc].u.removed.dboffset;
+#ifdef DYING
fi->h = rpmdbGetRecord(ts->db, fi->record);
+#else
+ { rpmdbMatchIterator mi;
+
+ mi = rpmdbInitIterator(ts->db, RPMDBI_PACKAGES, &fi->record, sizeof(fi->record));
+ if ((fi->h = rpmdbNextIterator(mi)) != NULL)
+ fi->h = headerLink(fi->h);
+ rpmdbFreeIterator(mi);
+ }
+#endif
if (fi->h == NULL) {
/* ACK! */
continue;
int removeBinaryPackage(const char * prefix, rpmdb db, unsigned int offset,
int flags, enum fileActions * actions, FD_t scriptFd)
{
- Header h = NULL;
+ rpmdbMatchIterator mi = NULL;
+ Header h;
int i;
int fileCount;
const char * name, * version, * release;
if (flags & RPMTRANS_FLAG_JUSTDB)
flags |= RPMTRANS_FLAG_NOSCRIPTS;
- h = rpmdbGetRecord(db, offset);
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &offset, sizeof(offset));
+ h = rpmdbNextIterator(mi);
if (h == NULL) {
- rpmError(RPMERR_DBCORRUPT, _("cannot read header at %d for uninstall"),
- offset);
+ rpmError(RPMERR_DBCORRUPT, _("%s: cannot read header at 0x%x"),
+ "findMatches", offset);
rc = 1;
goto exit;
}
rc = 0;
exit:
- if (h)
- headerFree(h);
+ if (mi)
+ rpmdbFreeIterator(mi);
return rc;
}
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-04-26 09:48-0400\n"
+"POT-Creation-Date: 2000-04-26 20:08-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "loop in prerequisite chain: %s"
msgstr ""
-#: lib/depends.c:1444
-#, c-format
-msgid "cannot read header at %d for dependency check"
-msgstr ""
-
-#: lib/db0.c:393
+#: lib/db0.c:394
#, c-format
msgid "bad db file %s"
msgstr ""
-#: lib/db0.c:402
+#: lib/db0.c:403
#, c-format
msgid "opening database mode 0x%x in %s\n"
msgstr ""
-#: lib/db0.c:407 lib/url.c:445
+#: lib/db0.c:408 lib/url.c:445
#, c-format
msgid "failed to open %s: %s\n"
msgstr ""
-#: lib/db0.c:419
+#: lib/db0.c:420
#, c-format
msgid "cannot get %s lock on database"
msgstr ""
-#: lib/db0.c:420
+#: lib/db0.c:421
msgid "exclusive"
msgstr ""
-#: lib/db0.c:420
+#: lib/db0.c:421
msgid "shared"
msgstr ""
msgid "(unknown type)"
msgstr ""
-#: lib/install.c:146 lib/uninstall.c:184
+#: lib/install.c:146 lib/uninstall.c:186
#, c-format
msgid " file: %s action: %s\n"
msgstr ""
#. this would probably be a good place to check if disk space
#. was used up - if so, we should return a different error
-#: lib/install.c:371
+#: lib/install.c:376
#, c-format
msgid "unpacking of archive failed%s%s: %s"
msgstr ""
-#: lib/install.c:372
+#: lib/install.c:377
msgid " on file "
msgstr ""
-#: lib/install.c:416
+#: lib/install.c:421
msgid "installing a source package\n"
msgstr ""
-#: lib/install.c:436
+#: lib/install.c:441
#, c-format
msgid "cannot create sourcedir %s"
msgstr ""
-#: lib/install.c:442 lib/install.c:472
+#: lib/install.c:447 lib/install.c:477
#, c-format
msgid "cannot write to %s"
msgstr ""
-#: lib/install.c:446
+#: lib/install.c:451
#, c-format
msgid "sources in: %s\n"
msgstr ""
-#: lib/install.c:466
+#: lib/install.c:471
#, c-format
msgid "cannot create specdir %s"
msgstr ""
-#: lib/install.c:476
+#: lib/install.c:481
#, c-format
msgid "spec file in: %s\n"
msgstr ""
-#: lib/install.c:510 lib/install.c:538
+#: lib/install.c:515 lib/install.c:543
msgid "source package contains no .spec file"
msgstr ""
-#: lib/install.c:560
+#: lib/install.c:565
#, c-format
msgid "renaming %s to %s\n"
msgstr ""
-#: lib/install.c:562 lib/install.c:838 lib/uninstall.c:29
+#: lib/install.c:567 lib/install.c:843 lib/uninstall.c:29
#, c-format
msgid "rename of %s to %s failed: %s"
msgstr ""
-#: lib/install.c:653
+#: lib/install.c:658
msgid "source package expected, binary found"
msgstr ""
-#: lib/install.c:710
+#: lib/install.c:715
#, c-format
msgid "package: %s-%s-%s files test = %d\n"
msgstr ""
-#: lib/install.c:768
+#: lib/install.c:773
msgid "stopping install as we're running --test\n"
msgstr ""
-#: lib/install.c:773
+#: lib/install.c:778
msgid "running preinstall script (if any)\n"
msgstr ""
-#: lib/install.c:798
+#: lib/install.c:803
#, c-format
msgid "warning: %s created as %s"
msgstr ""
-#: lib/install.c:834
+#: lib/install.c:839
#, c-format
msgid "warning: %s saved as %s"
msgstr ""
-#: lib/install.c:908
+#: lib/install.c:913
msgid "running postinstall scripts (if any)\n"
msgstr ""
msgid "can't query %s: %s\n"
msgstr ""
-#: lib/query.c:446 lib/query.c:669
+#: lib/query.c:447 lib/query.c:673
#, c-format
msgid "package record number: %u\n"
msgstr ""
-#: lib/query.c:450
+#: lib/query.c:451
msgid "error: could not read database record\n"
msgstr ""
#. XXX Fstrerror
-#: lib/query.c:494
+#: lib/query.c:498
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/query.c:512
+#: lib/query.c:516
msgid "old format source packages cannot be queried\n"
msgstr ""
-#: lib/query.c:521 lib/rpminstall.c:231
+#: lib/query.c:525 lib/rpminstall.c:231
#, c-format
msgid "%s does not appear to be a RPM package\n"
msgstr ""
-#: lib/query.c:525
+#: lib/query.c:529
#, c-format
msgid "query of %s failed\n"
msgstr ""
-#: lib/query.c:558
+#: lib/query.c:562
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/query.c:581
+#: lib/query.c:585
msgid "no packages\n"
msgstr ""
-#: lib/query.c:591
+#: lib/query.c:595
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:601
+#: lib/query.c:605
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:611
+#: lib/query.c:615
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:622
+#: lib/query.c:626
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:638
+#: lib/query.c:642
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:641
+#: lib/query.c:645
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:666
+#: lib/query.c:670
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:673
+#: lib/query.c:677
#, c-format
msgid "record %d could not be read\n"
msgstr ""
-#: lib/query.c:684 lib/rpminstall.c:436
+#: lib/query.c:689 lib/query.c:700 lib/rpminstall.c:439 lib/rpminstall.c:478
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:687
+#: lib/query.c:692
#, c-format
msgid "error looking for package %s\n"
msgstr ""
-#: lib/query.c:712
+#: lib/query.c:729
msgid "rpmQuery: rpmdbOpen() failed\n"
msgstr ""
-#: lib/query.c:771
+#: lib/query.c:788
msgid "query package owning file"
msgstr ""
-#: lib/query.c:773
+#: lib/query.c:790
msgid "query packages in group"
msgstr ""
-#: lib/query.c:775
+#: lib/query.c:792
msgid "query a package file"
msgstr ""
-#: lib/query.c:779
+#: lib/query.c:796
msgid "query a spec file"
msgstr ""
-#: lib/query.c:781
+#: lib/query.c:798
msgid "query the pacakges triggered by the package"
msgstr ""
-#: lib/query.c:783
+#: lib/query.c:800
msgid "query the packages which require a capability"
msgstr ""
-#: lib/query.c:785
+#: lib/query.c:802
msgid "query the packages which provide a capability"
msgstr ""
-#: lib/query.c:824
+#: lib/query.c:841
msgid "list all configuration files"
msgstr ""
-#: lib/query.c:826
+#: lib/query.c:843
msgid "list all documentation files"
msgstr ""
-#: lib/query.c:828
+#: lib/query.c:845
msgid "dump basic file information"
msgstr ""
-#: lib/query.c:830
+#: lib/query.c:847
msgid "list files in package"
msgstr ""
-#: lib/query.c:834
+#: lib/query.c:851
msgid "use the following query format"
msgstr ""
-#: lib/query.c:836
+#: lib/query.c:853
msgid "substitute i18n sections into spec file"
msgstr ""
-#: lib/query.c:838
+#: lib/query.c:855
msgid "display the states of the listed files"
msgstr ""
-#: lib/query.c:840
+#: lib/query.c:857
msgid "display a verbose file listing"
msgstr ""
msgid "error removing record %s from %s"
msgstr ""
-#: lib/rpmdb.c:590 lib/rpmdb.c:1897
+#: lib/rpmdb.c:586 lib/rpmdb.c:1938
msgid "no dbpath has been set"
msgstr ""
-#: lib/rpmdb.c:668
+#: lib/rpmdb.c:664
msgid ""
"old format database is present; use --rebuilddb to generate a new format "
"database"
msgstr ""
#. error
-#: lib/rpmdb.c:853
+#: lib/rpmdb.c:863
#, c-format
msgid "cannot retrieve package \"%s\" from db"
msgstr ""
-#: lib/rpmdb.c:1178
+#: lib/rpmdb.c:929 lib/rpmdb.c:1380 lib/uninstall.c:91
#, c-format
-msgid "key \"%s\" not found in %s"
+msgid "%s: cannot read header at 0x%x"
msgstr ""
-#: lib/rpmdb.c:1186
+#: lib/rpmdb.c:1336
#, c-format
-msgid "key \"%s\" not removed from %s"
+msgid "key \"%s\" not found in %s"
msgstr ""
-#: lib/rpmdb.c:1212
+#: lib/rpmdb.c:1344
#, c-format
-msgid "rpmdbRemove: cannot read header at 0x%x"
+msgid "key \"%s\" not removed from %s"
msgstr ""
-#: lib/rpmdb.c:1246
+#: lib/rpmdb.c:1414
#, c-format
msgid "removing 0 %s entries.\n"
msgstr ""
-#: lib/rpmdb.c:1253
+#: lib/rpmdb.c:1421
#, c-format
msgid "removing \"%s\" from %s index.\n"
msgstr ""
-#: lib/rpmdb.c:1261
+#: lib/rpmdb.c:1429
#, c-format
msgid "removing %d entries in %s index:\n"
msgstr ""
-#: lib/rpmdb.c:1265
+#: lib/rpmdb.c:1433
#, c-format
msgid "\t%6d %s\n"
msgstr ""
-#: lib/rpmdb.c:1412
+#: lib/rpmdb.c:1580
msgid "cannot allocate new instance in database"
msgstr ""
-#: lib/rpmdb.c:1461
+#: lib/rpmdb.c:1629
#, c-format
msgid "adding 0 %s entries.\n"
msgstr ""
-#: lib/rpmdb.c:1474
+#: lib/rpmdb.c:1642
#, c-format
msgid "adding \"%s\" to %s index.\n"
msgstr ""
-#: lib/rpmdb.c:1481
+#: lib/rpmdb.c:1649
#, c-format
msgid "adding %d entries to %s index:\n"
msgstr ""
-#: lib/rpmdb.c:1485
+#: lib/rpmdb.c:1653
#, c-format
msgid "%6d %s\n"
msgstr ""
-#: lib/rpmdb.c:1803
-#, c-format
-msgid "cannot read header at %d for lookup"
-msgstr ""
-
-#: lib/rpmdb.c:1922
+#: lib/rpmdb.c:1963
#, c-format
msgid "rebuilding database %s into %s\n"
msgstr ""
-#: lib/rpmdb.c:1926
+#: lib/rpmdb.c:1967
#, c-format
msgid "temporary database %s already exists"
msgstr ""
-#: lib/rpmdb.c:1932
+#: lib/rpmdb.c:1973
#, c-format
msgid "creating directory: %s\n"
msgstr ""
-#: lib/rpmdb.c:1934
+#: lib/rpmdb.c:1975
#, c-format
msgid "error creating directory %s: %s"
msgstr ""
-#: lib/rpmdb.c:1941
+#: lib/rpmdb.c:1982
#, c-format
msgid "opening old database with dbi_major %d\n"
msgstr ""
-#: lib/rpmdb.c:1950
+#: lib/rpmdb.c:1991
#, c-format
msgid "opening new database with dbi_major %d\n"
msgstr ""
-#: lib/rpmdb.c:1972
+#: lib/rpmdb.c:2013
#, c-format
msgid "record number %d in database is bad -- skipping."
msgstr ""
-#: lib/rpmdb.c:2004
+#: lib/rpmdb.c:2045
#, c-format
msgid "cannot add record originally at %d"
msgstr ""
-#: lib/rpmdb.c:2022
+#: lib/rpmdb.c:2063
msgid "failed to rebuild database; original database remains in place\n"
msgstr ""
-#: lib/rpmdb.c:2030
+#: lib/rpmdb.c:2071
msgid "failed to replace old database with new database!\n"
msgstr ""
-#: lib/rpmdb.c:2032
+#: lib/rpmdb.c:2073
#, c-format
msgid "replace files in %s with files from %s to recover"
msgstr ""
-#: lib/rpmdb.c:2038
+#: lib/rpmdb.c:2079
#, c-format
msgid "failed to remove directory %s: %s\n"
msgstr ""
msgid "cannot open file %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:235 lib/rpminstall.c:516
+#: lib/rpminstall.c:235 lib/rpminstall.c:543
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
msgid "installing binary packages\n"
msgstr ""
-#: lib/rpminstall.c:440
+#: lib/rpminstall.c:443
#, c-format
msgid "searching for package %s\n"
msgstr ""
-#: lib/rpminstall.c:449
+#: lib/rpminstall.c:452 lib/rpminstall.c:481
#, c-format
msgid "\"%s\" specifies multiple packages\n"
msgstr ""
-#: lib/rpminstall.c:478
+#: lib/rpminstall.c:505
msgid "removing these packages would break dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:505
+#: lib/rpminstall.c:532
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:511
+#: lib/rpminstall.c:538
#, c-format
msgid "Installing %s\n"
msgstr ""
msgid "removal of %s failed: %s"
msgstr ""
-#: lib/uninstall.c:89
-#, c-format
-msgid "cannot read header at %d for uninstall"
-msgstr ""
-
-#: lib/uninstall.c:130
+#: lib/uninstall.c:132
#, c-format
msgid "will remove files test = %d\n"
msgstr ""
-#: lib/uninstall.c:198
+#: lib/uninstall.c:200
msgid "running postuninstall script (if any)\n"
msgstr ""
-#: lib/uninstall.c:212
+#: lib/uninstall.c:214
msgid "removing database entry\n"
msgstr ""
-#: lib/uninstall.c:396
+#: lib/uninstall.c:398
msgid "execution of script failed"
msgstr ""
{ rpmdbMatchIterator mi;
/* RPMDBI_PACKAGES */
- mi = rpmdbInitIterator(s->db, 0, NULL, 0);
+ mi = rpmdbInitIterator(s->db, RPMDBI_PACKAGES, NULL, 0);
/* XXX FIXME: unnecessary header mallocs are side effect here */
while (rpmdbNextIterator(mi) != NULL)
count++;
h = PyObject_NEW(hdrObject, &hdrType);
h->h = NULL;
+#ifdef DYING
h->h = rpmdbGetRecord(s->db, offset);
+#else
+ { rpmdbMatchIterator mi;
+ mi = rpmdbInitIterator(s->db, RPMDBI_PACKAGES, &offset, sizeof(offset));
+ if ((h->h = rpmdbNextIterator(mi)) != NULL)
+ h->h = headerLink(h->h);
+ rpmdbFreeIterator(mi);
+ }
+#endif
h->fileList = h->linkList = h->md5list = NULL;
h->uids = h->gids = h->mtimes = h->fileSizes = NULL;
h->modes = h->rdevs = NULL;
#else
rpmdbMatchIterator mi;
- /* RPMDBI_PACKAGES */
- mi = rpmdbInitIterator(db, 0, NULL, 0);
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0);
while ((h = rpmdbNextIterator(mi)) != NULL) {
#endif
rpmdbMatchIterator mi;
#define _RECNUM rpmdbGetIteratorOffset(mi)
- /* RPMDBI_PACKAGES */
- mi = rpmdbInitIterator(db, 0, NULL, 0);
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0);
while ((h = rpmdbNextIterator(mi)) != NULL) {