1251876Speter/* Licensed to the Apache Software Foundation (ASF) under one or more 2251876Speter * contributor license agreements. See the NOTICE file distributed with 3251876Speter * this work for additional information regarding copyright ownership. 4251876Speter * The ASF licenses this file to You under the Apache License, Version 2.0 5251876Speter * (the "License"); you may not use this file except in compliance with 6251876Speter * the License. You may obtain a copy of the License at 7251876Speter * 8251876Speter * http://www.apache.org/licenses/LICENSE-2.0 9251876Speter * 10251876Speter * Unless required by applicable law or agreed to in writing, software 11251876Speter * distributed under the License is distributed on an "AS IS" BASIS, 12251876Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251876Speter * See the License for the specific language governing permissions and 14251876Speter * limitations under the License. 15251876Speter */ 16251876Speter 17251876Speter#ifndef APR_DBM_PRIVATE_H 18251876Speter#define APR_DBM_PRIVATE_H 19251876Speter 20251876Speter#include "apr.h" 21251876Speter#include "apr_errno.h" 22251876Speter#include "apr_pools.h" 23251876Speter#include "apr_dbm.h" 24251876Speter#include "apr_file_io.h" 25251876Speter 26251876Speter#include "apu.h" 27251876Speter 28251876Speter/* ### for now, include the DBM selection; this will go away once we start 29251876Speter ### building and linking all of the DBMs at once. */ 30251876Speter#include "apu_select_dbm.h" 31251876Speter 32251876Speter#ifdef __cplusplus 33251876Speterextern "C" { 34251876Speter#endif 35251876Speter 36251876Speter/** @internal */ 37251876Speter 38251876Speter/** 39251876Speter * Most DBM libraries take a POSIX mode for creating files. Don't trust 40251876Speter * the mode_t type, some platforms may not support it, int is safe. 41251876Speter */ 42251876SpeterAPU_DECLARE(int) apr_posix_perms2mode(apr_fileperms_t perm); 43251876Speter 44251876Speter/** 45251876Speter * Structure to describe the operations of the DBM 46251876Speter */ 47251876Spetertypedef struct { 48251876Speter /** The name of the DBM Type */ 49251876Speter const char *name; 50251876Speter 51251876Speter /** Open the DBM */ 52251876Speter apr_status_t (*open)(apr_dbm_t **pdb, const char *pathname, 53251876Speter apr_int32_t mode, apr_fileperms_t perm, 54251876Speter apr_pool_t *pool); 55251876Speter 56251876Speter /** Close the DBM */ 57251876Speter void (*close)(apr_dbm_t *dbm); 58251876Speter 59251876Speter /** Fetch a dbm record value by key */ 60251876Speter apr_status_t (*fetch)(apr_dbm_t *dbm, apr_datum_t key, 61251876Speter apr_datum_t * pvalue); 62251876Speter 63251876Speter /** Store a dbm record value by key */ 64251876Speter apr_status_t (*store)(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t value); 65251876Speter 66251876Speter /** Delete a dbm record value by key */ 67251876Speter apr_status_t (*del)(apr_dbm_t *dbm, apr_datum_t key); 68251876Speter 69251876Speter /** Search for a key within the dbm */ 70251876Speter int (*exists)(apr_dbm_t *dbm, apr_datum_t key); 71251876Speter 72251876Speter /** Retrieve the first record key from a dbm */ 73251876Speter apr_status_t (*firstkey)(apr_dbm_t *dbm, apr_datum_t * pkey); 74251876Speter 75251876Speter /** Retrieve the next record key from a dbm */ 76251876Speter apr_status_t (*nextkey)(apr_dbm_t *dbm, apr_datum_t * pkey); 77251876Speter 78251876Speter /** Proactively toss any memory associated with the apr_datum_t. */ 79251876Speter void (*freedatum)(apr_dbm_t *dbm, apr_datum_t data); 80251876Speter 81251876Speter /** Get the names that the DBM will use for a given pathname. */ 82251876Speter void (*getusednames)(apr_pool_t *pool, 83251876Speter const char *pathname, 84251876Speter const char **used1, 85251876Speter const char **used2); 86251876Speter 87251876Speter} apr_dbm_type_t; 88251876Speter 89251876Speter 90251876Speter/** 91251876Speter * The actual DBM 92251876Speter */ 93251876Speterstruct apr_dbm_t 94251876Speter{ 95251876Speter /** Associated pool */ 96251876Speter apr_pool_t *pool; 97251876Speter 98251876Speter /** pointer to DB Implementation Specific data */ 99251876Speter void *file; 100251876Speter 101251876Speter /** Current integer error code */ 102251876Speter int errcode; 103251876Speter /** Current string error code */ 104251876Speter const char *errmsg; 105251876Speter 106251876Speter /** the type of DBM */ 107251876Speter const apr_dbm_type_t *type; 108251876Speter}; 109251876Speter 110251876Speter 111251876Speter/* Declare all of the DBM provider tables */ 112251876SpeterAPU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_sdbm; 113251876SpeterAPU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_gdbm; 114251876SpeterAPU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_ndbm; 115251876SpeterAPU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db; 116251876Speter 117251876Speter#ifdef __cplusplus 118251876Speter} 119251876Speter#endif 120251876Speter 121251876Speter#endif /* APR_DBM_PRIVATE_H */ 122