📄 ssl_util_sdbm.h
字号:
/* _ _** _ __ ___ ___ __| | ___ ___| | mod_ssl** | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL** | | | | | | (_) | (_| | \__ \__ \ | www.modssl.org** |_| |_| |_|\___/ \__,_|___|___/___/_| ftp.modssl.org** |_____|** ssl_util_sdbm.c** Built-in Simple DBM (Header)*//* ==================================================================== * Copyright (c) 1998-2006 Ralf S. Engelschall. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by * Ralf S. Engelschall <rse@engelschall.com> for use in the * mod_ssl project (http://www.modssl.org/)." * * 4. The names "mod_ssl" must not be used to endorse or promote * products derived from this software without prior written * permission. For written permission, please contact * rse@engelschall.com. * * 5. Products derived from this software may not be called "mod_ssl" * nor may "mod_ssl" appear in their names without prior * written permission of Ralf S. Engelschall. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by * Ralf S. Engelschall <rse@engelschall.com> for use in the * mod_ssl project (http://www.modssl.org/)." * * THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RALF S. ENGELSCHALL OR * HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== *//* * sdbm - ndbm work-alike hashed database library * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978). * author: oz@nexus.yorku.ca * status: public domain. */#ifndef SSL_UTIL_SDBM_H#define SSL_UTIL_SDBM_H#define DUFF /* go ahead and use the loop-unrolled version */#include <stdio.h>#ifdef MOD_SSL#define DBLKSIZ 16384 /* SSL cert chains require more */#define PBLKSIZ 8192 /* SSL cert chains require more */#define PAIRMAX 8008 /* arbitrary on PBLKSIZ-N */#else#define DBLKSIZ 4096#define PBLKSIZ 1024#define PAIRMAX 1008 /* arbitrary on PBLKSIZ-N */#endif#define SPLTMAX 10 /* maximum allowed splits */ /* for a single insertion */#define DIRFEXT ".dir"#define PAGFEXT ".pag"typedef struct { int dirf; /* directory file descriptor */ int pagf; /* page file descriptor */ int flags; /* status/error flags, see below */ long maxbno; /* size of dirfile in bits */ long curbit; /* current bit number */ long hmask; /* current hash mask */ long blkptr; /* current block for nextkey */ int keyptr; /* current key for nextkey */ long blkno; /* current page to read/write */ long pagbno; /* current page in pagbuf */ char pagbuf[PBLKSIZ]; /* page file block buffer */ long dirbno; /* current block in dirbuf */ char dirbuf[DBLKSIZ]; /* directory file block buffer */} DBM;#define DBM_RDONLY 0x1 /* data base open read-only */#define DBM_IOERR 0x2 /* data base I/O error *//* * utility macros */#define sdbm_rdonly(db) ((db)->flags & DBM_RDONLY)#define sdbm_error(db) ((db)->flags & DBM_IOERR)#define sdbm_clearerr(db) ((db)->flags &= ~DBM_IOERR) /* ouch */#define sdbm_dirfno(db) ((db)->dirf)#define sdbm_pagfno(db) ((db)->pagf)typedef struct { char *dptr; int dsize;} datum;extern datum nullitem;#ifdef __STDC__#define proto(p) p#else#define proto(p) ()#endif/* * flags to sdbm_store */#define DBM_INSERT 0#define DBM_REPLACE 1/* * ndbm interface */extern DBM *sdbm_open proto((char *, int, int));extern void sdbm_close proto((DBM *));extern datum sdbm_fetch proto((DBM *, datum));extern int sdbm_delete proto((DBM *, datum));extern int sdbm_store proto((DBM *, datum, datum, int));extern datum sdbm_firstkey proto((DBM *));extern datum sdbm_nextkey proto((DBM *));/* * other */extern DBM *sdbm_prep proto((char *, char *, int, int));extern long sdbm_hash proto((char *, int));/* pair.h */extern int fitpair proto((char *, int));extern void putpair proto((char *, datum, datum));extern datum getpair proto((char *, datum));extern int delpair proto((char *, datum));extern int chkpage proto((char *));extern datum getnkey proto((char *, int));extern void splpage proto((char *, char *, long));extern int duppair proto((char *, datum));/* tune.h *//* * sdbm - ndbm work-alike hashed database library * tuning and portability constructs [not nearly enough] * author: oz@nexus.yorku.ca */#define BYTESIZ 8/* * important tuning parms (hah) */#define SEEDUPS /* always detect duplicates */#define BADMESS /* generate a message for worst case: cannot make room after SPLTMAX splits *//* * misc */#ifdef DEBUG#define debug(x) printf x#else#define debug(x)#endif#endif /* SSL_UTIL_SDBM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -