static const char * _errpfx = "rpmdb";
+struct dbiCursor_s {
+ dbiIndex dbi;
+ DBC *cursor;
+};
+
static int dbapi_err(rpmdb rdb, const char * msg, int error, int printit)
{
if (printit && error) {
return rc;
}
-
/* Store (key,data) pair in index database. */
int dbiPut(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data,
unsigned int flags)
return rc;
}
+dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags)
+{
+ dbiCursor dbc = NULL;
+ DBC * cursor = NULL;
+
+ if (dbi && dbiCopen(dbi, &cursor, flags) == 0) {
+ dbc = xcalloc(1, sizeof(*dbc));
+ dbc->cursor = cursor;
+ dbc->dbi = dbi;
+ }
+ return dbc;
+}
+
+dbiCursor dbiCursorFree(dbiCursor dbc)
+{
+ if (dbc) {
+ dbiCclose(dbc->dbi, dbc->cursor, 0);
+ }
+ return NULL;
+}
+
+int dbiCursorPut(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
+{
+ return dbiPut(dbc->dbi, dbc->cursor, key, data, flags);
+}
+
+int dbiCursorGet(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
+{
+ return dbiGet(dbc->dbi, dbc->cursor, key, data, flags);
+}
+
+int dbiCursorDel(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
+{
+ return dbiDel(dbc->dbi, dbc->cursor, key, data, flags);
+}
+
+unsigned int dbiCursorCount(dbiCursor dbc)
+{
+ db_recno_t count = 0;
+ dbiCount(dbc->dbi, dbc->cursor, &count, 0);
+ return count;
+}
+
int dbiByteSwapped(dbiIndex dbi)
{
DB * db = dbi->dbi_db;
};
typedef struct dbiIndex_s * dbiIndex;
+typedef struct dbiCursor_s * dbiCursor;
struct dbConfig_s {
int db_mmapsize; /*!< (10Mb) */
RPM_GNUC_INTERNAL
const char * dbiName(dbiIndex dbi);
+RPM_GNUC_INTERNAL
+dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags);
+
+RPM_GNUC_INTERNAL
+dbiCursor dbiCursorFree(dbiCursor dbc);
+
+RPM_GNUC_INTERNAL
+int dbiCursorPut(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags);
+
+RPM_GNUC_INTERNAL
+int dbiCursorGet(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags);
+
+RPM_GNUC_INTERNAL
+int dbiCursorDel(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags);
+
+RPM_GNUC_INTERNAL
+unsigned int dbiCursorCount(dbiCursor dbc);
+
#ifdef __cplusplus
}
#endif