summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/libsmdb/smndbm.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/libsmdb/smndbm.c')
-rw-r--r--contrib/sendmail/libsmdb/smndbm.c52
1 files changed, 42 insertions, 10 deletions
diff --git a/contrib/sendmail/libsmdb/smndbm.c b/contrib/sendmail/libsmdb/smndbm.c
index 8c78ffc..47e5cb5 100644
--- a/contrib/sendmail/libsmdb/smndbm.c
+++ b/contrib/sendmail/libsmdb/smndbm.c
@@ -8,7 +8,7 @@
*/
#ifndef lint
-static char id[] = "@(#)$Id: smndbm.c,v 8.40.4.1 2000/08/24 17:08:00 gshapiro Exp $";
+static char id[] = "@(#)$Id: smndbm.c,v 8.40.4.3 2000/10/05 22:27:50 gshapiro Exp $";
#endif /* ! lint */
#include <fcntl.h>
@@ -124,9 +124,14 @@ smdbm_del(database, key, flags)
{
int result;
DBM *dbm = ((SMDB_DBM_DATABASE *) database->smdb_impl)->smndbm_dbm;
+ datum dbkey;
+
+ memset(&dbkey, '\0', sizeof dbkey);
+ dbkey.dptr = key->data;
+ dbkey.dsize = key->size;
errno = 0;
- result = dbm_delete(dbm, key->dbm);
+ result = dbm_delete(dbm, dbkey);
if (result != 0)
{
int save_errno = errno;
@@ -173,10 +178,16 @@ smdbm_get(database, key, data, flags)
u_int flags;
{
DBM *dbm = ((SMDB_DBM_DATABASE *) database->smdb_impl)->smndbm_dbm;
+ datum dbkey, dbdata;
+
+ memset(&dbkey, '\0', sizeof dbkey);
+ memset(&dbdata, '\0', sizeof dbdata);
+ dbkey.dptr = key->data;
+ dbkey.dsize = key->size;
errno = 0;
- data->dbm = dbm_fetch(dbm, key->dbm);
- if (data->dbm.dptr == NULL)
+ dbdata = dbm_fetch(dbm, dbkey);
+ if (dbdata.dptr == NULL)
{
int save_errno = errno;
@@ -188,7 +199,8 @@ smdbm_get(database, key, data, flags)
return SMDBE_NOT_FOUND;
}
-
+ data->data = dbdata.dptr;
+ data->size = dbdata.dsize;
return SMDBE_OK;
}
@@ -202,9 +214,17 @@ smdbm_put(database, key, data, flags)
int result;
int save_errno;
DBM *dbm = ((SMDB_DBM_DATABASE *) database->smdb_impl)->smndbm_dbm;
+ datum dbkey, dbdata;
+
+ memset(&dbkey, '\0', sizeof dbkey);
+ memset(&dbdata, '\0', sizeof dbdata);
+ dbkey.dptr = key->data;
+ dbkey.dsize = key->size;
+ dbdata.dptr = data->data;
+ dbdata.dsize = data->size;
errno = 0;
- result = dbm_store(dbm, key->dbm, data->dbm,
+ result = dbm_store(dbm, dbkey, dbdata,
smdb_put_flags_to_ndbm_flags(flags));
switch (result)
{
@@ -321,6 +341,10 @@ smdbm_cursor_get(cursor, key, value, flags)
SMDB_DBM_CURSOR *dbm_cursor = (SMDB_DBM_CURSOR *) cursor->smdbc_impl;
SMDB_DBM_DATABASE *db = dbm_cursor->smndbmc_db;
DBM *dbm = db->smndbm_dbm;
+ datum dbkey, dbdata;
+
+ memset(&dbkey, '\0', sizeof dbkey);
+ memset(&dbdata, '\0', sizeof dbdata);
if (flags == SMDB_CURSOR_GET_RANGE)
return SMDBE_UNSUPPORTED;
@@ -347,8 +371,8 @@ smdbm_cursor_get(cursor, key, value, flags)
}
errno = 0;
- value->dbm = dbm_fetch(dbm, dbm_cursor->smndbmc_current_key);
- if (value->dbm.dptr == NULL)
+ dbdata = dbm_fetch(dbm, dbm_cursor->smndbmc_current_key);
+ if (dbdata.dptr == NULL)
{
int save_errno = errno;
@@ -360,7 +384,10 @@ smdbm_cursor_get(cursor, key, value, flags)
return SMDBE_NOT_FOUND;
}
- key->dbm = dbm_cursor->smndbmc_current_key;
+ value->data = dbdata.dptr;
+ value->size = dbdata.dsize;
+ key->data = dbm_cursor->smndbmc_current_key.dptr;
+ key->size = dbm_cursor->smndbmc_current_key.dsize;
return SMDBE_OK;
}
@@ -377,9 +404,14 @@ smdbm_cursor_put(cursor, key, value, flags)
SMDB_DBM_CURSOR *dbm_cursor = (SMDB_DBM_CURSOR *) cursor->smdbc_impl;
SMDB_DBM_DATABASE *db = dbm_cursor->smndbmc_db;
DBM *dbm = db->smndbm_dbm;
+ datum dbdata;
+
+ memset(&dbdata, '\0', sizeof dbdata);
+ dbdata.dptr = value->data;
+ dbdata.dsize = value->size;
errno = 0;
- result = dbm_store(dbm, dbm_cursor->smndbmc_current_key, value->dbm,
+ result = dbm_store(dbm, dbm_cursor->smndbmc_current_key, dbdata,
smdb_put_flags_to_ndbm_flags(flags));
switch (result)
{
OpenPOWER on IntegriCloud