1/* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef APR_DBM_PRIVATE_H 18#define APR_DBM_PRIVATE_H 19 20#include "apr.h" 21#include "apr_errno.h" 22#include "apr_pools.h" 23#include "apr_dbm.h" 24#include "apr_file_io.h" 25 26#include "apu.h" 27 28/* ### for now, include the DBM selection; this will go away once we start 29 ### building and linking all of the DBMs at once. */ 30#include "apu_select_dbm.h" 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36/** @internal */ 37 38/** 39 * Most DBM libraries take a POSIX mode for creating files. Don't trust 40 * the mode_t type, some platforms may not support it, int is safe. 41 */ 42APU_DECLARE(int) apr_posix_perms2mode(apr_fileperms_t perm); 43 44/** 45 * Structure to describe the operations of the DBM 46 */ 47typedef struct { 48 /** The name of the DBM Type */ 49 const char *name; 50 51 /** Open the DBM */ 52 apr_status_t (*open)(apr_dbm_t **pdb, const char *pathname, 53 apr_int32_t mode, apr_fileperms_t perm, 54 apr_pool_t *pool); 55 56 /** Close the DBM */ 57 void (*close)(apr_dbm_t *dbm); 58 59 /** Fetch a dbm record value by key */ 60 apr_status_t (*fetch)(apr_dbm_t *dbm, apr_datum_t key, 61 apr_datum_t * pvalue); 62 63 /** Store a dbm record value by key */ 64 apr_status_t (*store)(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t value); 65 66 /** Delete a dbm record value by key */ 67 apr_status_t (*del)(apr_dbm_t *dbm, apr_datum_t key); 68 69 /** Search for a key within the dbm */ 70 int (*exists)(apr_dbm_t *dbm, apr_datum_t key); 71 72 /** Retrieve the first record key from a dbm */ 73 apr_status_t (*firstkey)(apr_dbm_t *dbm, apr_datum_t * pkey); 74 75 /** Retrieve the next record key from a dbm */ 76 apr_status_t (*nextkey)(apr_dbm_t *dbm, apr_datum_t * pkey); 77 78 /** Proactively toss any memory associated with the apr_datum_t. */ 79 void (*freedatum)(apr_dbm_t *dbm, apr_datum_t data); 80 81 /** Get the names that the DBM will use for a given pathname. */ 82 void (*getusednames)(apr_pool_t *pool, 83 const char *pathname, 84 const char **used1, 85 const char **used2); 86 87} apr_dbm_type_t; 88 89 90/** 91 * The actual DBM 92 */ 93struct apr_dbm_t 94{ 95 /** Associated pool */ 96 apr_pool_t *pool; 97 98 /** pointer to DB Implementation Specific data */ 99 void *file; 100 101 /** Current integer error code */ 102 int errcode; 103 /** Current string error code */ 104 const char *errmsg; 105 106 /** the type of DBM */ 107 const apr_dbm_type_t *type; 108}; 109 110 111/* Declare all of the DBM provider tables */ 112APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_sdbm; 113APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_gdbm; 114APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_ndbm; 115APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db; 116 117#ifdef __cplusplus 118} 119#endif 120 121#endif /* APR_DBM_PRIVATE_H */ 122