xref: /netbsd-src/external/bsd/ppp/usr.sbin/pppd/tdb.h (revision 84b263706cf1e1230ca2482b9b74e7f901dd2446)
1 #define STANDALONE	1
2 /*
3  * Database functions
4  * Copyright (C) Andrew Tridgell 1999
5  *
6  * Redistribution and use in source and binary forms are permitted
7  * provided that the above copyright notice and this paragraph are
8  * duplicated in all such forms AND provided that this software or
9  * any derived work is only used as part of the PPP daemon (pppd)
10  * and related utilities.
11  * The name of the author may not be used to endorse or promote products
12  * derived from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  * Note: this software is also available under the Gnu Public License
18  * version 2 or later.
19  */
20 
21 typedef unsigned tdb_len;
22 typedef unsigned tdb_off;
23 
24 #define TDB_MAGIC_FOOD "TDB file\n"
25 
26 /* this is stored at the front of every database */
27 struct tdb_header {
28 	char magic_food[32]; /* for /etc/magic */
29 	unsigned version; /* version of the code */
30 	unsigned hash_size; /* number of hash entries */
31 };
32 
33 typedef struct {
34 	char *dptr;
35 	size_t dsize;
36 } TDB_DATA;
37 
38 /* this is the context structure that is returned from a db open */
39 typedef struct {
40 	char *name; /* the name of the database */
41 	void *map_ptr; /* where it is currently mapped */
42 	int fd; /* open file descriptor for the database */
43 	tdb_len map_size; /* how much space has been mapped */
44 	int read_only; /* opened read-only */
45 	int *locked; /* set if we have a chain locked */
46 	int ecode; /* error code for last tdb error */
47 	struct tdb_header header; /* a cached copy of the header */
48 } TDB_CONTEXT;
49 
50 /* flags to tdb_store() */
51 #define TDB_REPLACE 1
52 #define TDB_INSERT 2
53 
54 /* flags for tdb_open() */
55 #define TDB_CLEAR_IF_FIRST 1
56 
57 /* error codes */
58 enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK,
59 		TDB_ERR_OOM, TDB_ERR_EXISTS};
60 
61 #if STANDALONE
62 TDB_CONTEXT *tdb_open(char *name, int hash_size, int tdb_flags,
63 		      int open_flags, mode_t mode);
64 char *tdb_errorstr(TDB_CONTEXT *tdb);
65 int tdb_writelock(TDB_CONTEXT *tdb);
66 int tdb_writeunlock(TDB_CONTEXT *tdb);
67 TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key);
68 int tdb_delete(TDB_CONTEXT *tdb, TDB_DATA key);
69 int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
70 int tdb_close(TDB_CONTEXT *tdb);
71 TDB_DATA tdb_firstkey(TDB_CONTEXT *tdb);
72 TDB_DATA tdb_nextkey(TDB_CONTEXT *tdb, TDB_DATA key);
73 int tdb_traverse(TDB_CONTEXT *tdb,
74 	int (*fn)(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state),
75 	void *state);
76 int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key);
77 int	tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key);
78 int	tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key);
79 #endif
80