From: Greg Stein Date: Mon, 27 Nov 2000 10:18:45 +0000 (+0000) Subject: toss dbm. use the new apu_dbm interfaces. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80c828ecb693e7d0d10bd42723814b1abbb372dd;p=apache toss dbm. use the new apu_dbm interfaces. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87085 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/dav/fs/dbm.c b/modules/dav/fs/dbm.c index a635d228ba..2425a6f220 100644 --- a/modules/dav/fs/dbm.c +++ b/modules/dav/fs/dbm.c @@ -68,17 +68,20 @@ */ #include "apr_strings.h" -#include "sdbm.h" +#include "apr_file_io.h" + +#include "apu_dbm.h" #include "mod_dav.h" #include "repos.h" struct dav_db { apr_pool_t *pool; - SDBM *file; + apu_dbm_t *file; }; -#define D2G(d) (*(sdbm_datum*)&(d)) +/* ### temp */ +#include "sdbm.h" void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname, @@ -103,21 +106,27 @@ void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname, } -static dav_error * dav_fs_dbm_error(dav_db *db, apr_pool_t *p) +static dav_error * dav_fs_dbm_error(dav_db *db, apr_pool_t *p, + apr_status_t status) { int save_errno = errno; int errcode; const char *errstr; dav_error *err; + if (status == APR_SUCCESS) + return NULL; + p = db ? db->pool : p; /* There might not be a if we had problems creating it. */ - errcode = !db || sdbm_error(db->file); - if (errcode) - errstr = "I/O error occurred."; - else - errstr = "No error."; + if (db == NULL) { + errcode = 1; + errstr = "Could not open property database."; + } + else { + apu_dbm_geterror(db->file, &errcode, &errstr); + } err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, errcode, errstr); err->save_errno = save_errno; @@ -142,17 +151,20 @@ void dav_fs_ensure_state_dir(apr_pool_t * p, const char *dirname) dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro, dav_db **pdb) { - SDBM *file; + apr_status_t status; + apu_dbm_t *file; *pdb = NULL; - /* NOTE: stupid cast to get rid of "const" on the pathname */ - if (sdbm_open(&file, pathname, - APR_READ | (ro ? 0 : (APR_WRITE | APR_CREATE)), - APR_OS_DEFAULT, p) != APR_SUCCESS && !ro) { + if ((status = apu_dbm_open(pathname, p, + ro ? APU_DBM_READONLY : APU_DBM_RWCREATE, + &file)) != APR_SUCCESS + && !ro) { + /* ### do something with 'status' */ + /* we can't continue if we couldn't open the file and we need to write */ - return dav_fs_dbm_error(NULL, p); + return dav_fs_dbm_error(NULL, p, status); } /* may be NULL if we tried to open a non-existent db as read-only */ @@ -198,87 +210,52 @@ static dav_error * dav_dbm_open(apr_pool_t * p, const dav_resource *resource, static void dav_dbm_close(dav_db *db) { - sdbm_close(db->file); + apu_dbm_close(db->file); } static dav_error * dav_dbm_fetch(dav_db *db, dav_datum key, dav_datum *pvalue) { - *(sdbm_datum *) pvalue = sdbm_fetch(db->file, D2G(key)); - - /* we don't need the error; we have *pvalue to tell */ - sdbm_clearerr(db->file); + apr_status_t status = apu_dbm_fetch(db->file, key, pvalue); - return NULL; + return dav_fs_dbm_error(db, NULL, status); } static dav_error * dav_dbm_store(dav_db *db, dav_datum key, dav_datum value) { - apr_status_t status; - - status = sdbm_store(db->file, D2G(key), D2G(value), SDBM_REPLACE); - - /* ### fetch more specific error information? */ - - /* we don't need the error; we have rv to tell */ - sdbm_clearerr(db->file); + apr_status_t status = apu_dbm_store(db->file, key, value); - if (status != APR_SUCCESS) { - return dav_fs_dbm_error(db, NULL); - } - return NULL; + return dav_fs_dbm_error(db, NULL, status); } static dav_error * dav_dbm_delete(dav_db *db, dav_datum key) { - int rv; - - rv = sdbm_delete(db->file, D2G(key)); - - /* ### fetch more specific error information? */ + apr_status_t status = apu_dbm_delete(db->file, key); - /* we don't need the error; we have rv to tell */ - sdbm_clearerr(db->file); - - if (rv == -1) { - return dav_fs_dbm_error(db, NULL); - } - return NULL; + return dav_fs_dbm_error(db, NULL, status); } static int dav_dbm_exists(dav_db *db, dav_datum key) { - int exists; - sdbm_datum value = sdbm_fetch(db->file, D2G(key)); - - sdbm_clearerr(db->file); /* unneeded */ - exists = value.dptr != NULL; - - return exists; + return apu_dbm_exists(db->file, key); } static dav_error * dav_dbm_firstkey(dav_db *db, dav_datum *pkey) { - *(sdbm_datum *) pkey = sdbm_firstkey(db->file); - - /* we don't need the error; we have *pkey to tell */ - sdbm_clearerr(db->file); + apr_status_t status = apu_dbm_firstkey(db->file, pkey); - return NULL; + return dav_fs_dbm_error(db, NULL, status); } static dav_error * dav_dbm_nextkey(dav_db *db, dav_datum *pkey) { - *(sdbm_datum *) pkey = sdbm_nextkey(db->file); - - /* we don't need the error; we have *pkey to tell */ - sdbm_clearerr(db->file); + apr_status_t status = apu_dbm_nextkey(db->file, pkey); - return NULL; + return dav_fs_dbm_error(db, NULL, status); } static void dav_dbm_freedatum(dav_db *db, dav_datum data) { - /* nothing */ + apu_dbm_freedatum(db->file, data); } const dav_hooks_db dav_hooks_db_dbm =