00001
00002
00003
00004
00005
00006
00007 #ifndef _SDBM_H_
00008 #define _SDBM_H_
00009
00010 #include <stdio.h>
00011
00012 #define DBLKSIZ 4096
00013 #define PBLKSIZ 1024
00014 #define PAIRMAX 1008
00015 #define SPLTMAX 10
00016
00017 #define DIRFEXT ".dir"
00018 #define PAGFEXT ".pag"
00019
00020 typedef struct {
00021 int dirf;
00022 int pagf;
00023 int flags;
00024 int keyptr;
00025 off_t maxbno;
00026 long curbit;
00027 long hmask;
00028 long blkptr;
00029 long blkno;
00030 long pagbno;
00031 char pagbuf[PBLKSIZ];
00032 long dirbno;
00033 char dirbuf[DBLKSIZ];
00034 } DBM;
00035
00036 #define DBM_RDONLY 0x1
00037 #define DBM_IOERR 0x2
00038
00039
00040
00041
00042 #define sdbm_rdonly(db) ((db)->flags & DBM_RDONLY)
00043 #define sdbm_error(db) ((db)->flags & DBM_IOERR)
00044
00045 #define sdbm_clearerr(db) ((db)->flags &= ~DBM_IOERR)
00046
00047 #define sdbm_dirfno(db) ((db)->dirf)
00048 #define sdbm_pagfno(db) ((db)->pagf)
00049
00050 typedef struct {
00051 char *dptr;
00052 int dsize;
00053 } datum;
00054
00055 extern datum nullitem;
00056
00057 #if defined(__STDC__)
00058 #define proto(p) p
00059 #else
00060 #define proto(p) ()
00061 #endif
00062
00063
00064
00065
00066 #define DBM_INSERT 0
00067 #define DBM_REPLACE 1
00068
00069
00070
00071
00072 extern DBM *sdbm_open proto((char *, int, int));
00073 extern void sdbm_close proto((DBM *));
00074 extern datum sdbm_fetch proto((DBM *, datum));
00075 extern int sdbm_delete proto((DBM *, datum));
00076 extern int sdbm_store proto((DBM *, datum, datum, int));
00077 extern datum sdbm_firstkey proto((DBM *));
00078 extern datum sdbm_nextkey proto((DBM *));
00079
00080
00081
00082
00083 extern DBM *sdbm_prep proto((char *, char *, int, int));
00084 extern long sdbm_hash proto((char *, int));
00085
00086 #endif
00087