|
|
|
@ -105,15 +105,20 @@ dbm_fetch(db, key)
|
|
|
|
|
DBM *db;
|
|
|
|
|
datum key;
|
|
|
|
|
{
|
|
|
|
|
datum retval;
|
|
|
|
|
datum retdata;
|
|
|
|
|
int status;
|
|
|
|
|
DBT dbtkey, dbtretdata;
|
|
|
|
|
|
|
|
|
|
status = (db->get)(db, (DBT *)&key, (DBT *)&retval, 0);
|
|
|
|
|
dbtkey.data = key.dptr;
|
|
|
|
|
dbtkey.size = key.dsize;
|
|
|
|
|
status = (db->get)(db, &dbtkey, &dbtretdata, 0);
|
|
|
|
|
if (status) {
|
|
|
|
|
retval.dptr = NULL;
|
|
|
|
|
retval.dsize = 0;
|
|
|
|
|
dbtretdata.data = NULL;
|
|
|
|
|
dbtretdata.size = 0;
|
|
|
|
|
}
|
|
|
|
|
return (retval);
|
|
|
|
|
retdata.dptr = dbtretdata.data;
|
|
|
|
|
retdata.dsize = dbtretdata.size;
|
|
|
|
|
return (retdata);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -126,11 +131,14 @@ dbm_firstkey(db)
|
|
|
|
|
DBM *db;
|
|
|
|
|
{
|
|
|
|
|
int status;
|
|
|
|
|
datum retdata, retkey;
|
|
|
|
|
datum retkey;
|
|
|
|
|
DBT dbtretkey, dbtretdata;
|
|
|
|
|
|
|
|
|
|
status = (db->seq)(db, (DBT *)&retkey, (DBT *)&retdata, R_FIRST);
|
|
|
|
|
status = (db->seq)(db, &dbtretkey, &dbtretdata, R_FIRST);
|
|
|
|
|
if (status)
|
|
|
|
|
retkey.dptr = NULL;
|
|
|
|
|
dbtretkey.data = NULL;
|
|
|
|
|
retkey.dptr = dbtretkey.data;
|
|
|
|
|
retkey.dsize = dbtretkey.size;
|
|
|
|
|
return (retkey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -144,11 +152,14 @@ dbm_nextkey(db)
|
|
|
|
|
DBM *db;
|
|
|
|
|
{
|
|
|
|
|
int status;
|
|
|
|
|
datum retdata, retkey;
|
|
|
|
|
datum retkey;
|
|
|
|
|
DBT dbtretkey, dbtretdata;
|
|
|
|
|
|
|
|
|
|
status = (db->seq)(db, (DBT *)&retkey, (DBT *)&retdata, R_NEXT);
|
|
|
|
|
status = (db->seq)(db, &dbtretkey, &dbtretdata, R_NEXT);
|
|
|
|
|
if (status)
|
|
|
|
|
retkey.dptr = NULL;
|
|
|
|
|
dbtretkey.data = NULL;
|
|
|
|
|
retkey.dptr = dbtretkey.data;
|
|
|
|
|
retkey.dsize = dbtretkey.size;
|
|
|
|
|
return (retkey);
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
@ -162,8 +173,11 @@ dbm_delete(db, key)
|
|
|
|
|
datum key;
|
|
|
|
|
{
|
|
|
|
|
int status;
|
|
|
|
|
DBT dbtkey;
|
|
|
|
|
|
|
|
|
|
status = (db->del)(db, (DBT *)&key, 0);
|
|
|
|
|
dbtkey.data = key.dptr;
|
|
|
|
|
dbtkey.size = key.dsize;
|
|
|
|
|
status = (db->del)(db, &dbtkey, 0);
|
|
|
|
|
if (status)
|
|
|
|
|
return (-1);
|
|
|
|
|
else
|
|
|
|
@ -177,12 +191,18 @@ dbm_delete(db, key)
|
|
|
|
|
* 1 if DBM_INSERT and entry exists
|
|
|
|
|
*/
|
|
|
|
|
extern int
|
|
|
|
|
dbm_store(db, key, content, flags)
|
|
|
|
|
dbm_store(db, key, data, flags)
|
|
|
|
|
DBM *db;
|
|
|
|
|
datum key, content;
|
|
|
|
|
datum key, data;
|
|
|
|
|
int flags;
|
|
|
|
|
{
|
|
|
|
|
return ((db->put)(db, (DBT *)&key, (DBT *)&content,
|
|
|
|
|
DBT dbtkey, dbtdata;
|
|
|
|
|
|
|
|
|
|
dbtkey.data = key.dptr;
|
|
|
|
|
dbtkey.size = key.dsize;
|
|
|
|
|
dbtdata.data = data.dptr;
|
|
|
|
|
dbtdata.size = data.dsize;
|
|
|
|
|
return ((db->put)(db, &dbtkey, &dbtdata,
|
|
|
|
|
(flags == DBM_INSERT) ? R_NOOVERWRITE : 0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|