}
/*@=compmempass@*/
-static int db0del(dbiIndex dbi, void * keyp, size_t keylen)
+static int db0del(dbiIndex dbi, void * keyp, size_t keylen, int use_cursor)
{
DBT key;
DB * db = GetDB(dbi);
}
static int db0get(dbiIndex dbi, void * keyp, size_t keylen,
- void ** datap, size_t * datalen)
+ void ** datap, size_t * datalen, int use_cursor)
{
DBT key, data;
DB * db = GetDB(dbi);
}
static int db0put(dbiIndex dbi, void * keyp, size_t keylen,
- void * datap, size_t datalen)
+ void * datap, size_t datalen, int use_cursor)
{
DBT key, data;
DB * db = GetDB(dbi);
}
/*@=compmempass@*/
-static int db1del(dbiIndex dbi, void * keyp, size_t keylen)
+static int db1del(dbiIndex dbi, void * keyp, size_t keylen, int use_cursor)
{
DBT key;
DB * db = GetDB(dbi);
}
static int db1get(dbiIndex dbi, void * keyp, size_t keylen,
- void ** datap, size_t * datalen)
+ void ** datap, size_t * datalen, int use_cursor)
{
DBT key, data;
DB * db = GetDB(dbi);
}
static int db1put(dbiIndex dbi, void * keyp, size_t keylen,
- void * datap, size_t datalen)
+ void * datap, size_t datalen, int use_cursor)
{
DBT key, data;
DB * db = GetDB(dbi);
}
/*@=compmempass@*/
-static int db2del(dbiIndex dbi, void * keyp, size_t keylen)
+static int db2del(dbiIndex dbi, void * keyp, size_t keylen, int use_cursor)
{
DB_TXN * txnid = NULL;
DBT key;
}
static int db2get(dbiIndex dbi, void * keyp, size_t keylen,
- void ** datap, size_t * datalen)
+ void ** datap, size_t * datalen, int use_cursor)
{
DB_TXN * txnid = NULL;
DBT key, data;
}
static int db2put(dbiIndex dbi, void * keyp, size_t keylen,
- void * datap, size_t datalen)
+ void * datap, size_t datalen, int use_cursor)
{
DB_TXN * txnid = NULL;
DBT key, data;
if (dbi->dbi_dbcursor) {
DBC * dbcursor = (DBC *)dbi->dbi_dbcursor;
+fprintf(stderr, "*** explicit dbcursor->c_close\n");
xx = dbcursor->c_close(dbcursor);
xx = cvtdberr(dbi, "dbcursor->c_close", xx, _debug);
dbi->dbi_dbcursor = NULL;
}
/*@=compmempass@*/
-static int db3del(dbiIndex dbi, void * keyp, size_t keylen)
+static int db3del(dbiIndex dbi, void * keyp, size_t keylen, int use_cursor)
{
DB_TXN * txnid = NULL;
DBT key;
return rc;
}
-static int db3get(dbiIndex dbi, void * keyp, size_t keylen,
- void ** datap, size_t * datalen)
+static int db3get(dbiIndex dbi, void ** keyp, size_t * keylen,
+ void ** datap, size_t * datalen, int use_cursor)
{
DB_TXN * txnid = NULL;
DBT key, data;
DB * db = GetDB(dbi);
int _printit;
int rc;
+ int xx;
if (datap) *datap = NULL;
if (datalen) *datalen = 0;
_mymemset(&key, 0, sizeof(key));
_mymemset(&data, 0, sizeof(data));
- key.data = keyp;
- key.size = keylen;
- data.data = NULL;
- data.size = 0;
+ if (use_cursor) {
+ DBC * dbcursor;
- rc = db->get(db, txnid, &key, &data, 0);
- _printit = (rc == DB_NOTFOUND ? 0 : _debug);
- rc = cvtdberr(dbi, "db->get", rc, _printit);
+ if ((dbcursor = dbi->dbi_dbcursor) == NULL) {
+#if defined(__USE_DB3)
+ rc = db->cursor(db, txnid, &dbcursor, 0);
+#else
+ rc = db->cursor(db, txnid, &dbcursor);
+#endif
+ rc = cvtdberr(dbi, "db->cursor", rc, _debug);
+ if (rc)
+ return rc;
+ dbi->dbi_dbcursor = dbcursor;
+ }
+
+ /* XXX db3 does DB_FIRST on uninitialized cursor */
+ rc = dbcursor->c_get(dbcursor, &key, &data, DB_NEXT);
+ if (rc == DB_NOTFOUND) {
+ xx = dbcursor->c_close(dbcursor);
+ xx = cvtdberr(dbi, "dbcursor->c_close", xx, _debug);
+ dbi->dbi_dbcursor = NULL;
+ return rc;
+ }
+ rc = cvtdberr(dbi, "dbcursor->c_get", rc, _debug);
+ if (rc == 0) {
+ *keyp = key.data;
+ *keylen = key.size;
+ }
+ } else {
+ key.data = *keyp;
+ key.size = *keylen;
+ rc = db->get(db, txnid, &key, &data, 0);
+ _printit = (rc == DB_NOTFOUND ? 0 : _debug);
+ rc = cvtdberr(dbi, "db->get", rc, _printit);
+ }
if (rc == 0) {
- *datap = data.data;
- *datalen = data.size;
+ if (datap)
+ *datap = data.data;
+ if (datalen)
+ *datalen = data.size;
}
-if (_debug)
-fprintf(stderr, "*** db3get(%p, %p,%d, %p,%d) rc %d\n", dbi, keyp, keylen, *datap, *datalen, rc);
return rc;
}
static int db3put(dbiIndex dbi, void * keyp, size_t keylen,
- void * datap, size_t datalen)
+ void * datap, size_t datalen, int use_cursor)
{
DB_TXN * txnid = NULL;
DBT key, data;
* @param dbi index database handle
* @param keyp key data
* @param keylen key data length
+ * @param use_cursor open cursor for access?
*/
- int (*del) (dbiIndex dbi, void * keyp, size_t keylen);
+ int (*del) (dbiIndex dbi, void * keyp, size_t keylen, int use_cursor);
/**
* Retrieve item using db->get.
* @param dbi index database handle
- * @param keyp key data
- * @param keylen key data length
+ * @param keyp address of key data
+ * @param keylen address of key data length
* @param datap address of data pointer
* @param datalen address of data length
+ * @param use_cursor open cursor for access?
*/
- int (*get) (dbiIndex dbi, void * keyp, size_t keylen,
- void ** datap, size_t * datalen);
+ int (*get) (dbiIndex dbi, void ** keyp, size_t * keylen,
+ void ** datap, size_t * datalen, int use_cursor);
/**
* Save item using db->put.
* @param keylen key data length
* @param datap data pointer
* @param datalen data length
+ * @param use_cursor open cursor for access?
*/
int (*put) (dbiIndex dbi, void * keyp, size_t keylen,
- void * datap, size_t datalen);
+ void * datap, size_t datalen, int use_cursor);
};
void * dbi_dbenv;
void * dbi_dbinfo;
void * dbi_dbcursor;
- const void * dbi_openinfo; /*<! private data passed on open */
- FD_t dbi_fd; /*<! private data for fadio access */
+ const void * dbi_openinfo;
+ const void * dbi_stat;
/*@observer@*/ const struct _dbiVec * dbi_vec; /*<! private methods */
};
#include "cpio.h"
#include "install.h"
#include "misc.h"
-#include "rpmdb.h"
+#include "rpmdb.h" /* XXX for rpmdbAdd/rpmdbRemove/rpmdbUpdateRecord */
struct callbackInfo {
unsigned long archiveSize;
rpmMessage(RPMMESS_DEBUG, _("package: %s-%s-%s files test = %d\n"),
name, version, release, flags & RPMTRANS_FLAG_TEST);
-#ifdef DYING
- rc = rpmdbFindPackage(db, name, &matches);
- switch (rc) {
- case -1:
- rc = 2;
- goto exit;
- /*@notreached@*/ break;
- case 0:
- scriptArg = dbiIndexSetCount(matches) + 1;
- break;
- default:
- scriptArg = 1;
- break;
- }
- if (matches) {
- dbiFreeIndexSet(matches);
- matches = NULL;
- }
-#else
if ((scriptArg = rpmdbCountPackages(db, name)) < 0) {
rc = 2;
goto exit;
}
scriptArg += 1;
-#endif
if (!rpmdbFindByHeader(db, h, &matches))
otherOffset = dbiIndexRecordOffset(matches, 0);
int openDatabase(const char * prefix, const char * dbpath, rpmdb *dbp,
int mode, int perms, int flags)
{
+ int _use_falloc = rpmExpandNumeric("%{_db3_use_falloc}");
char * filename;
rpmdb db;
int i, rc;
db = newRpmdb();
+ if (_use_falloc || rpmfileexists(filename)) {
if (!justcheck || !rpmfileexists(filename)) {
db->pkgs = fadOpen(filename, mode, perms);
if (Ferror(db->pkgs)) {
}
}
}
+ }
{ int dbix;
}
int rpmdbFirstRecNum(rpmdb db) {
+ if (db->pkgs == NULL) {
+ dbiIndex dbi = db->_dbi[RPMDBI_PACKAGES];
+ unsigned int offset = 0;
+ void * keyp = &offset;
+ size_t keylen = sizeof(offset);
+ int rc;
+
+ /* XXX skip over instance 0 */
+ do {
+ rc = (*dbi->dbi_vec->get) (dbi, &keyp, &keylen, NULL, NULL, 1);
+ if (rc)
+ return 0;
+ memcpy(&offset, keyp, sizeof(offset));
+ } while (offset == 0);
+ return offset;
+ }
+
return fadFirstOffset(db->pkgs);
}
int rpmdbNextRecNum(rpmdb db, unsigned int lastOffset) {
/* 0 at end */
+ if (db->pkgs == NULL) {
+ dbiIndex dbi = db->_dbi[RPMDBI_PACKAGES];
+ void * keyp = &lastOffset;
+ size_t keylen = sizeof(lastOffset);
+ int rc;
+
+ rc = (*dbi->dbi_vec->get) (dbi, &keyp, &keylen, NULL, NULL, 1);
+ if (rc)
+ return 0;
+ memcpy(&lastOffset, keyp, sizeof(lastOffset));
+ return lastOffset;
+ }
+
return fadNextOffset(db->pkgs, lastOffset);
}
Header rpmdbGetRecord(rpmdb db, unsigned int offset)
{
- int _use_falloc = rpmExpandNumeric("%{_db3_use_falloc}");
- dbiIndex dbi;
-
- if (!_use_falloc && (dbi = db->_dbi[RPMDBI_PACKAGES]) != NULL) {
+ if (db->pkgs == NULL) {
+ dbiIndex dbi = db->_dbi[RPMDBI_PACKAGES];
void * uh;
size_t uhlen;
+ void * keyp = &offset;
+ size_t keylen = sizeof(offset);
int rc;
- rc = (*dbi->dbi_vec->get) (dbi, &offset, sizeof(offset), &uh, &uhlen);
+ rc = (*dbi->dbi_vec->get) (dbi, &keyp, &keylen, &uh, &uhlen, 0);
if (rc)
return NULL;
return headerLoad(uh);
fprintf(stderr, "*** removing dbix %d tag %d offset 0x%x\n", dbix, dbi->dbi_rpmtag, offset);
if (dbi->dbi_rpmtag == 0) {
/* XXX TODO: remove h to packages.rpm */
- (void) (*dbi->dbi_vec->del) (dbi, &offset, sizeof(offset));
+ (void) (*dbi->dbi_vec->del) (dbi, &offset, sizeof(offset), 0);
continue;
}
const char ** baseNames;
int count = 0;
int type;
+ dbiIndex dbi;
unsigned int offset;
int rc = 0;
blockSignals();
- { int newSize;
+ if (db->pkgs == NULL) {
+ unsigned int firstkey = 0;
+ void * keyp = &firstkey;
+ size_t keylen = sizeof(firstkey);
+ void * datap = NULL;
+ size_t datalen = 0;
+ int rc;
+
+ dbi = db->_dbi[RPMDBI_PACKAGES];
+ /* Retrieve join key for next header instance. */
+
+ rc = (*dbi->dbi_vec->get) (dbi, &keyp, &keylen, (void *)&datap, &datalen, 0);
+ offset = 0;
+ if (rc == 0 && datap)
+ memcpy(&offset, datap, sizeof(offset));
+ ++offset;
+ if (datap) {
+ memcpy(datap, &offset, sizeof(offset));
+ } else {
+ datap = &offset;
+ datalen = sizeof(offset);
+ }
+ rc = (*dbi->dbi_vec->put) (dbi, keyp, keylen, datap, datalen, 0);
+ } else {
+ int newSize;
newSize = headerSizeof(h, HEADER_MAGIC_NO);
offset = fadAlloc(db->pkgs, newSize);
if (offset == 0) {
dbiIndexRecord rec = dbiReturnIndexRecordInstance(offset, 0);
for (dbix = RPMDBI_MIN; dbix < RPMDBI_MAX; dbix++) {
- dbiIndex dbi;
const char **rpmvals = NULL;
int rpmtype = 0;
int rpmcnt = 0;
size_t uhlen = headerSizeof(h, HEADER_MAGIC_NO);
void * uh = headerUnload(h);
/* XXX TODO: add h to packages.rpm */
- (void) (*dbi->dbi_vec->put) (dbi, &offset, sizeof(offset), uh, uhlen);
+ (void) (*dbi->dbi_vec->put) (dbi, &offset, sizeof(offset), uh, uhlen, 0);
free(uh);
continue;
}
#include <rpmurl.h>
#include <rpmmacro.h> /* XXX for rpmExpand */
-#include "dbindex.h" /* XXX prototypes */
-#include "depends.h"
+#include "depends.h" /* XXX for headerMatchesDepFlags */
#include "install.h"
-#include "md5.h"
-#include "misc.h"
-#include "rpmdb.h"
+#include "misc.h" /* XXX for makeTempFile, doputenv */
+#include "rpmdb.h" /* XXX for rpmdbRemove */
static char * SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin";
* When we run scripts, we pass an argument which is the number of
* versions of this package that will be installed when we are finished.
*/
-#ifdef DYING
- { dbiIndexSet matches;
- if (rpmdbFindPackage(db, name, &matches)) {
- rpmError(RPMERR_DBCORRUPT, _("cannot read packages named %s for uninstall"),
- name);
- dbiFreeIndexSet(matches);
- rc = 1;
- goto exit;
- }
- scriptArg = dbiIndexSetCount(matches) - 1;
- dbiFreeIndexSet(matches);
- }
-#else
if ((scriptArg = rpmdbCountPackages(db, name)) < 0) {
rc = 1;
goto exit;
}
scriptArg -= 1;
-#endif
if (!(flags & RPMTRANS_FLAG_NOTRIGGERS)) {
/* run triggers from this package which are keyed on installed
headerGetEntry(triggeredH, RPMTAG_NAME, NULL,
(void **) &triggerPackageName, NULL);
-#ifdef DYING
- { dbiIndexSet matches = NULL;
- int index;
-
- rpmdbFindPackage(db, triggerPackageName, &matches);
-
- index = triggerIndices[i];
- if (!triggersAlreadyRun || !triggersAlreadyRun[index]) {
- rc = runScript(triggeredH, root, 1, triggerProgs + index,
- triggerScripts[index],
- dbiIndexSetCount(matches) + arg1correction, arg2,
- scriptFd);
- if (triggersAlreadyRun) triggersAlreadyRun[index] = 1;
- }
-
- if (matches) {
- dbiFreeIndexSet(matches);
- matches = NULL;
- }
- }
-#else
{ int arg1;
int index;
}
}
}
-#endif
+
free(triggerScripts);
free(triggerProgs);
goto exit;
}
-#ifdef DYING
- { dbiIndexSet otherMatches = NULL;
- rpmdbFindPackage(db, packageName, &otherMatches);
- if (otherMatches) {
- numPackage = dbiIndexSetCount(otherMatches) + countCorrection;
- dbiFreeIndexSet(otherMatches);
- } else
- numPackage = 0;
- }
-#else
numPackage = rpmdbCountPackages(db, packageName);
if (numPackage < 0) {
rc = 1;
goto exit;
}
-#endif
rc = 0;
for (i = 0; i < dbiIndexSetCount(matches); i++) {
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-04-07 12:18-0400\n"
+"POT-Creation-Date: 2000-04-08 15:20-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 "(unknown type)"
msgstr ""
-#: lib/install.c:146 lib/uninstall.c:200
+#: lib/install.c:146 lib/uninstall.c:184
#, c-format
msgid " file: %s action: %s\n"
msgstr ""
msgid "renaming %s to %s\n"
msgstr ""
-#: lib/install.c:562 lib/install.c:854 lib/uninstall.c:31
+#: lib/install.c:562 lib/install.c:834 lib/uninstall.c:29
#, c-format
msgid "rename of %s to %s failed: %s"
msgstr ""
msgid "package: %s-%s-%s files test = %d\n"
msgstr ""
-#: lib/install.c:784
+#: lib/install.c:764
msgid "stopping install as we're running --test\n"
msgstr ""
-#: lib/install.c:789
+#: lib/install.c:769
msgid "running preinstall script (if any)\n"
msgstr ""
-#: lib/install.c:814
+#: lib/install.c:794
#, c-format
msgid "warning: %s created as %s"
msgstr ""
-#: lib/install.c:850
+#: lib/install.c:830
#, c-format
msgid "warning: %s saved as %s"
msgstr ""
-#: lib/install.c:924
+#: lib/install.c:904
msgid "running postinstall scripts (if any)\n"
msgstr ""
msgid "display a verbose file listing"
msgstr ""
-#: lib/rebuilddb.c:34 lib/rpmdb.c:295
+#: lib/rebuilddb.c:34 lib/rpmdb.c:298
msgid "no dbpath has been set"
msgstr ""
msgid "OK"
msgstr ""
-#: lib/rpmdb.c:192
+#: lib/rpmdb.c:193
#, c-format
msgid "opening database mode 0x%x in %s\n"
msgstr ""
-#: lib/rpmdb.c:204 lib/url.c:445
+#: lib/rpmdb.c:206 lib/url.c:445
#, c-format
msgid "failed to open %s: %s\n"
msgstr ""
-#: lib/rpmdb.c:218 lib/rpmdb.c:226
+#: lib/rpmdb.c:220 lib/rpmdb.c:228
#, c-format
msgid "cannot get %s lock on database"
msgstr ""
-#: lib/rpmdb.c:219
+#: lib/rpmdb.c:221
msgid "exclusive"
msgstr ""
-#: lib/rpmdb.c:227
+#: lib/rpmdb.c:229
msgid "shared"
msgstr ""
-#: lib/rpmdb.c:268
+#: lib/rpmdb.c:271
msgid ""
"old format database is present; use --rebuilddb to generate a new format "
"database"
msgstr ""
#. error
-#: lib/rpmdb.c:554
+#: lib/rpmdb.c:587
#, c-format
msgid "cannot retrieve package \"%s\" from db"
msgstr ""
-#: lib/rpmdb.c:583
+#: lib/rpmdb.c:616
#, c-format
msgid "package not found with key \"%s\" in %s"
msgstr ""
-#: lib/rpmdb.c:592
+#: lib/rpmdb.c:625
#, c-format
msgid "key \"%s\" not found in %s"
msgstr ""
-#: lib/rpmdb.c:610
+#: lib/rpmdb.c:643
#, c-format
msgid "rpmdbRemove: cannot read header at 0x%x"
msgstr ""
-#: lib/rpmdb.c:638
+#: lib/rpmdb.c:671
#, c-format
msgid "removing 0 %s entries.\n"
msgstr ""
-#: lib/rpmdb.c:644
+#: lib/rpmdb.c:677
#, c-format
msgid "removing \"%s\" from %s index.\n"
msgstr ""
-#: lib/rpmdb.c:652
+#: lib/rpmdb.c:685
#, c-format
msgid "removing %d entries in %s index:\n"
msgstr ""
-#: lib/rpmdb.c:656 lib/rpmdb.c:841
+#: lib/rpmdb.c:689 lib/rpmdb.c:898
#, c-format
msgid "\t%6d %s\n"
msgstr ""
-#: lib/rpmdb.c:774
+#: lib/rpmdb.c:832
msgid "cannot allocate space for database"
msgstr ""
-#: lib/rpmdb.c:818
+#: lib/rpmdb.c:875
#, c-format
msgid "adding 0 %s entries.\n"
msgstr ""
-#: lib/rpmdb.c:830
+#: lib/rpmdb.c:887
#, c-format
msgid "adding \"%s\" to %s index.\n"
msgstr ""
-#: lib/rpmdb.c:837
+#: lib/rpmdb.c:894
#, c-format
msgid "adding %d entries to %s index:\n"
msgstr ""
-#: lib/rpmdb.c:895
+#: lib/rpmdb.c:952
#, c-format
msgid "cannot read header at %d for update"
msgstr ""
-#: lib/rpmdb.c:908
+#: lib/rpmdb.c:965
msgid "header changed size!"
msgstr ""
msgid "%s skipped due to missingok flag\n"
msgstr ""
-#: lib/uninstall.c:42
+#: lib/uninstall.c:40
#, c-format
msgid "cannot remove %s - directory not empty"
msgstr ""
-#: lib/uninstall.c:45
+#: lib/uninstall.c:43
#, c-format
msgid "rmdir of %s failed: %s"
msgstr ""
-#: lib/uninstall.c:53
+#: lib/uninstall.c:51
#, c-format
msgid "removal of %s failed: %s"
msgstr ""
-#: lib/uninstall.c:91
+#: lib/uninstall.c:89
#, c-format
msgid "cannot read header at %d for uninstall"
msgstr ""
-#: lib/uninstall.c:106
-#, c-format
-msgid "cannot read packages named %s for uninstall"
-msgstr ""
-
-#: lib/uninstall.c:146
+#: lib/uninstall.c:130
#, c-format
msgid "will remove files test = %d\n"
msgstr ""
-#: lib/uninstall.c:214
+#: lib/uninstall.c:198
msgid "running postuninstall script (if any)\n"
msgstr ""
-#: lib/uninstall.c:228
+#: lib/uninstall.c:212
msgid "removing database entry\n"
msgstr ""
-#: lib/uninstall.c:412
+#: lib/uninstall.c:396
msgid "execution of script failed"
msgstr ""