Asterisk - The Open Source Telephony Project
21.4.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
utils
db1-ast
include
db.h
1
/*-
2
* Copyright (c) 1990, 1993, 1994
3
* The Regents of the University of California. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. All advertising materials mentioning features or use of this software
14
* must display the following acknowledgement:
15
* This product includes software developed by the University of
16
* California, Berkeley and its contributors.
17
* 4. Neither the name of the University nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*
33
* @(#)db.h 8.7 (Berkeley) 6/16/94
34
*/
35
36
#ifndef _DB_H
37
#define _DB_H 1
38
39
#include <sys/types.h>
40
41
#include <limits.h>
42
43
#ifdef __DBINTERFACE_PRIVATE
44
#include <compat.h>
45
#endif
46
47
#ifdef SOLARIS
48
#include "solaris-compat/compat.h"
49
#endif
50
51
#define RET_ERROR -1
/* Return values. */
52
#define RET_SUCCESS 0
53
#define RET_SPECIAL 1
54
55
#ifndef __BIT_TYPES_DEFINED__
56
#define __BIT_TYPES_DEFINED__
57
#if (!defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__APPLE__))
58
typedef
__signed
char
int8_t;
59
typedef
short
int16_t;
60
typedef
int
int32_t;
61
typedef
unsigned
char
u_int8_t;
62
typedef
unsigned
short
u_int16_t;
63
typedef
unsigned
int
u_int32_t;
64
#ifdef WE_DONT_NEED_QUADS
65
typedef
long
long
int64_t;
66
typedef
unsigned
long
long
u_int64_t;
67
#endif
68
#endif
/* __FreeBSD__ */
69
#endif
70
71
#ifdef SOLARIS
72
#define __P(p) p
73
#define __BEGIN_DECLS
74
#define __END_DECLS
75
#endif
76
77
#define MAX_PAGE_NUMBER 0xffffffff
/* >= # of pages in a file */
78
typedef
u_int32_t pgno_t;
79
#define MAX_PAGE_OFFSET 65535
/* >= # of bytes in a page */
80
typedef
u_int16_t indx_t;
81
#define MAX_REC_NUMBER 0xffffffff
/* >= # of records in a tree */
82
typedef
u_int32_t recno_t;
83
84
/* Key/data structure -- a Data-Base Thang. */
85
typedef
struct
{
86
void
*data;
/* data */
87
size_t
size;
/* data length */
88
}
DBT
;
89
90
/* Routine flags. */
91
#define R_CURSOR 1
/* del, put, seq */
92
#define __R_UNUSED 2
/* UNUSED */
93
#define R_FIRST 3
/* seq */
94
#define R_IAFTER 4
/* put (RECNO) */
95
#define R_IBEFORE 5
/* put (RECNO) */
96
#define R_LAST 6
/* seq (BTREE, RECNO) */
97
#define R_NEXT 7
/* seq */
98
#define R_NOOVERWRITE 8
/* put */
99
#define R_PREV 9
/* seq (BTREE, RECNO) */
100
#define R_SETCURSOR 10
/* put (RECNO) */
101
#define R_RECNOSYNC 11
/* sync (RECNO) */
102
103
typedef
enum
{ DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
104
105
/*
106
* !!!
107
* The following flags are included in the dbopen(3) call as part of the
108
* open(2) flags. In order to avoid conflicts with the open flags, start
109
* at the top of the 16 or 32-bit number space and work our way down. If
110
* the open flags were significantly expanded in the future, it could be
111
* a problem. Wish I'd left another flags word in the dbopen call.
112
*
113
* !!!
114
* None of this stuff is implemented yet. The only reason that it's here
115
* is so that the access methods can skip copying the key/data pair when
116
* the DB_LOCK flag isn't set.
117
*/
118
#if UINT_MAX > 65535
119
#define DB_LOCK 0x20000000
/* Do locking. */
120
#define DB_SHMEM 0x40000000
/* Use shared memory. */
121
#define DB_TXN 0x80000000
/* Do transactions. */
122
#else
123
#define DB_LOCK 0x2000
/* Do locking. */
124
#define DB_SHMEM 0x4000
/* Use shared memory. */
125
#define DB_TXN 0x8000
/* Do transactions. */
126
#endif
127
128
/* Access method description structure. */
129
typedef
struct
__db
{
130
DBTYPE type;
/* Underlying db type. */
131
int (*close) __P((
struct
__db
*));
132
int (*del) __P((
const
struct
__db
*,
const
DBT
*, u_int));
133
int (*
get
) __P((
const
struct
__db
*,
const
DBT
*,
DBT
*, u_int));
134
int (*put) __P((
const
struct
__db
*,
DBT
*,
const
DBT
*, u_int));
135
int (*seq) __P((
const
struct
__db
*,
DBT
*,
DBT
*, u_int));
136
int (*sync) __P((
const
struct
__db
*, u_int));
137
void
*
internal
;
/* Access method private. */
138
int (*fd) __P((
const
struct
__db
*));
139
}
DB
;
140
141
#define BTREEMAGIC 0x053162
142
#define BTREEVERSION 3
143
144
/* Structure used to pass parameters to the btree routines. */
145
typedef
struct
{
146
#define R_DUP 0x01
/* duplicate keys */
147
u_long flags;
148
u_int cachesize;
/* bytes to cache */
149
int
maxkeypage;
/* maximum keys per page */
150
int
minkeypage;
/* minimum keys per page */
151
u_int psize;
/* page size */
152
int (*compare)
/* comparison function */
153
__P((
const
DBT
*,
const
DBT
*));
154
size_t (*prefix)
/* prefix function */
155
__P((
const
DBT
*,
const
DBT
*));
156
int
lorder;
/* byte order */
157
}
BTREEINFO
;
158
159
#define HASHMAGIC 0x061561
160
#define HASHVERSION 2
161
162
/* Structure used to pass parameters to the hashing routines. */
163
typedef
struct
{
164
u_int bsize;
/* bucket size */
165
u_int ffactor;
/* fill factor */
166
u_int nelem;
/* number of elements */
167
u_int cachesize;
/* bytes to cache */
168
u_int32_t
/* hash function */
169
(*hash) __P((
const
void
*,
size_t
));
170
int
lorder;
/* byte order */
171
}
HASHINFO
;
172
173
/* Structure used to pass parameters to the record routines. */
174
typedef
struct
{
175
#define R_FIXEDLEN 0x01
/* fixed-length records */
176
#define R_NOKEY 0x02
/* key not required */
177
#define R_SNAPSHOT 0x04
/* snapshot the input */
178
u_long flags;
179
u_int cachesize;
/* bytes to cache */
180
u_int psize;
/* page size */
181
int
lorder;
/* byte order */
182
size_t
reclen;
/* record length (fixed-length records) */
183
u_char bval;
/* delimiting byte (variable-length records */
184
char
*bfname;
/* btree file name */
185
}
RECNOINFO
;
186
187
#ifdef __DBINTERFACE_PRIVATE
188
/*
189
* Little endian <==> big endian 32-bit swap macros.
190
* M_32_SWAP swap a memory location
191
* P_32_SWAP swap a referenced memory location
192
* P_32_COPY swap from one location to another
193
*/
194
#define M_32_SWAP(a) { \
195
u_int32_t _tmp = a; \
196
((char *)&a)[0] = ((char *)&_tmp)[3]; \
197
((char *)&a)[1] = ((char *)&_tmp)[2]; \
198
((char *)&a)[2] = ((char *)&_tmp)[1]; \
199
((char *)&a)[3] = ((char *)&_tmp)[0]; \
200
}
201
#define P_32_SWAP(a) { \
202
u_int32_t _tmp = *(u_int32_t *)a; \
203
((char *)a)[0] = ((char *)&_tmp)[3]; \
204
((char *)a)[1] = ((char *)&_tmp)[2]; \
205
((char *)a)[2] = ((char *)&_tmp)[1]; \
206
((char *)a)[3] = ((char *)&_tmp)[0]; \
207
}
208
#define P_32_COPY(a, b) { \
209
((char *)&(b))[0] = ((char *)&(a))[3]; \
210
((char *)&(b))[1] = ((char *)&(a))[2]; \
211
((char *)&(b))[2] = ((char *)&(a))[1]; \
212
((char *)&(b))[3] = ((char *)&(a))[0]; \
213
}
214
215
/*
216
* Little endian <==> big endian 16-bit swap macros.
217
* M_16_SWAP swap a memory location
218
* P_16_SWAP swap a referenced memory location
219
* P_16_COPY swap from one location to another
220
*/
221
#define M_16_SWAP(a) { \
222
u_int16_t _tmp = a; \
223
((char *)&a)[0] = ((char *)&_tmp)[1]; \
224
((char *)&a)[1] = ((char *)&_tmp)[0]; \
225
}
226
#define P_16_SWAP(a) { \
227
u_int16_t _tmp = *(u_int16_t *)a; \
228
((char *)a)[0] = ((char *)&_tmp)[1]; \
229
((char *)a)[1] = ((char *)&_tmp)[0]; \
230
}
231
#define P_16_COPY(a, b) { \
232
((char *)&(b))[0] = ((char *)&(a))[1]; \
233
((char *)&(b))[1] = ((char *)&(a))[0]; \
234
}
235
#endif
236
237
__BEGIN_DECLS
238
DB
*__dbopen __P((
const
char
*,
int
,
int
, DBTYPE,
const
void
*));
239
DB
*dbopen __P((
const
char
*,
int
,
int
, DBTYPE,
const
void
*));
240
241
#ifdef __DBINTERFACE_PRIVATE
242
DB
*__bt_open __P((
const
char
*,
int
,
int
,
const
BTREEINFO
*,
int
));
243
DB
*__hash_open __P((
const
char
*,
int
,
int
,
const
HASHINFO
*,
int
));
244
DB
*__rec_open __P((
const
char
*,
int
,
int
,
const
RECNOINFO
*,
int
));
245
void
__dbpanic __P((
DB
*dbp));
246
#endif
247
__END_DECLS
248
249
#endif
/* db.h */
DBT
Definition:
db.h:85
BTREEINFO
Definition:
db.h:145
HASHINFO
Definition:
db.h:163
RECNOINFO
Definition:
db.h:174
__db
Definition:
db.h:129
Generated on Tue Jul 15 2025 11:50:38 for Asterisk - The Open Source Telephony Project by
1.8.10