summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorianh <ianh@13f79535-47bb-0310-9956-ffa450edef68>2001-08-29 18:34:05 +0000
committerianh <ianh@13f79535-47bb-0310-9956-ffa450edef68>2001-08-29 18:34:05 +0000
commit479c4b6cd0c243203dea284b584fe44fcb709a8b (patch)
treeb7b615ac4c38943fbd8a02e5b2f8f3ab11da6493
parent203beb461b7f2905102e74eb821264813f2de0f0 (diff)
downloadlibapr-util-479c4b6cd0c243203dea284b584fe44fcb709a8b.tar.gz
testdbm now works with berkelyDB 3 DBM
db3 version also produces meaningfull error strings git-svn-id: http://svn.apache.org/repos/asf/apr/apr-util/trunk@58411 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--dbm/apr_dbm.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/dbm/apr_dbm.c b/dbm/apr_dbm.c
index ce093828..35e04dce 100644
--- a/dbm/apr_dbm.c
+++ b/dbm/apr_dbm.c
@@ -98,7 +98,7 @@ typedef apr_sdbm_datum_t result_datum_t;
/* Most DBM libraries take a POSIX mode for creating files. Don't trust
* the mode_t type, some platforms may not support it, int is safe.
*/
-int apr_posix_perms2mode(apr_fileperms_t perm)
+int apr_posix_perms2mode(apr_fileperms_t perm)
{
int mode = 0;
@@ -206,14 +206,14 @@ typedef DBT result_datum_t;
#define APR_DBM_DBMODE_RO DB_RDONLY
#define APR_DBM_DBMODE_RW 0
#define APR_DBM_DBMODE_RWCREATE DB_CREATE
-#endif
+#endif /* DBVER == 1 */
/* map a DB error to an apr_status_t */
static apr_status_t db2s(int dberr)
{
if (dberr != 0) {
/* ### need to fix this */
- return APR_EGENERAL;
+ return APR_OS_START_USEERR+dberr;
}
return APR_SUCCESS;
@@ -225,6 +225,9 @@ static apr_status_t do_firstkey(real_file_t *f, DBT *pkey)
int dberr;
DBT data;
+ memset(pkey,0,sizeof(DBT));
+
+ memset(&data,0,sizeof(DBT));
#if DB_VER == 1
dberr = (*f->bdb->seq)(f->bdb, pkey, &data, R_FIRST);
#else
@@ -344,9 +347,9 @@ static apr_status_t set_error(apr_dbm_t *dbm, apr_status_t dbm_said)
else {
/* ### need to fix. dberr was tossed in db2s(). */
/* ### use db_strerror() */
- dbm->errcode = 1;
- dbm->errmsg = "DB error occurred.";
- rv = APR_EGENERAL;
+ dbm->errcode = dbm_said;
+ dbm->errmsg = db_strerror( dbm_said - APR_OS_START_USEERR);
+ rv = dbm_said;
}
#else
#error set_error has not been coded for this database type
@@ -455,6 +458,9 @@ APU_DECLARE(apr_status_t) apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key,
result_datum_t rd;
CONVERT_DATUM(ckey, &key);
+#if APU_USE_DB
+ memset(&rd,0,sizeof(rd));
+#endif
rv = APR_DBM_FETCH(dbm->file, ckey, rd);
RETURN_DATUM(pvalue, rd);