static dav_error * dav_dbm_open(apr_pool_t * p, const dav_resource *resource, int ro, dav_db **pdb) { const char *dirpath; const char *fname; const char *pathname; /* Get directory and filename for resource */ /* ### should test this result value... */ (void) dav_fs_dir_file_name(resource, &dirpath, &fname); /* If not opening read-only, ensure the state dir exists */ if (!ro) { /* ### what are the perf implications of always checking this? */ dav_fs_ensure_state_dir(p, dirpath); } pathname = apr_pstrcat(p, dirpath, "/" DAV_FS_STATE_DIR "/", fname ? fname : DAV_FS_STATE_FILE_FOR_DIR, NULL); /* ### readers cannot open while a writer has this open; we should ### perform a few retries with random pauses. */ /* ### do we need to deal with the umask? */ return dav_dbm_open_direct(p, pathname, ro, pdb); }
/* ** dav_fs_really_open_lockdb: ** ** If the database hasn't been opened yet, then open the thing. */ static dav_error * dav_fs_really_open_lockdb(dav_lockdb *lockdb) { dav_error *err; if (lockdb->info->opened) return NULL; err = dav_dbm_open_direct(lockdb->info->pool, lockdb->info->lockdb_path, lockdb->ro, &lockdb->info->db); if (err != NULL) { return dav_push_error(lockdb->info->pool, HTTP_INTERNAL_SERVER_ERROR, DAV_ERR_LOCK_OPENDB, "Could not open the lock database.", err); } /* all right. it is opened now. */ lockdb->info->opened = 1; return NULL; }