1 |
--- db.1.85/btree/bt_delete.c.jj Thu Jul 28 16:30:03 1994 |
2 |
+++ db.1.85/btree/bt_delete.c Wed Apr 19 17:56:12 2000 |
3 |
@@ -154,7 +154,7 @@ __bt_stkacq(t, hp, c) |
4 |
pgno_t pgno; |
5 |
recno_t nextpg, prevpg; |
6 |
int exact, level; |
7 |
- |
8 |
+ |
9 |
/* |
10 |
* Find the first occurrence of the key in the tree. Toss the |
11 |
* currently locked page so we don't hit an already-locked page. |
12 |
@@ -270,7 +270,7 @@ __bt_stkacq(t, hp, c) |
13 |
if ((h = mpool_get(t->bt_mp, prevpg, 0)) == NULL) |
14 |
return (1); |
15 |
} |
16 |
- |
17 |
+ |
18 |
|
19 |
ret: mpool_put(t->bt_mp, h, 0); |
20 |
return ((*hp = mpool_get(t->bt_mp, c->pg.pgno, 0)) == NULL); |
21 |
@@ -402,7 +402,7 @@ __bt_pdelete(t, h) |
22 |
/* Get the parent page. */ |
23 |
if ((pg = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL) |
24 |
return (RET_ERROR); |
25 |
- |
26 |
+ |
27 |
index = parent->index; |
28 |
bi = GETBINTERNAL(pg, index); |
29 |
|
30 |
@@ -418,7 +418,7 @@ __bt_pdelete(t, h) |
31 |
* root page. If it's the rootpage, turn it back into an empty |
32 |
* leaf page. |
33 |
*/ |
34 |
- if (NEXTINDEX(pg) == 1) |
35 |
+ if (NEXTINDEX(pg) == 1) { |
36 |
if (pg->pgno == P_ROOT) { |
37 |
pg->lower = BTDATAOFF; |
38 |
pg->upper = t->bt_psize; |
39 |
@@ -428,7 +428,7 @@ __bt_pdelete(t, h) |
40 |
return (RET_ERROR); |
41 |
continue; |
42 |
} |
43 |
- else { |
44 |
+ } else { |
45 |
/* Pack remaining key items at the end of the page. */ |
46 |
nksize = NBINTERNAL(bi->ksize); |
47 |
from = (char *)pg + pg->upper; |
48 |
@@ -571,7 +571,7 @@ __bt_curdel(t, key, h, index) |
49 |
key = &c->key; |
50 |
} |
51 |
/* Check previous key, if not at the beginning of the page. */ |
52 |
- if (index > 0) { |
53 |
+ if (index > 0) { |
54 |
e.page = h; |
55 |
e.index = index - 1; |
56 |
if (__bt_cmp(t, key, &e) == 0) { |
57 |
--- db.1.85/btree/bt_open.c.jj Thu Aug 18 15:30:42 1994 |
58 |
+++ db.1.85/btree/bt_open.c Wed Apr 19 17:56:12 2000 |
59 |
@@ -125,7 +125,7 @@ __bt_open(fname, flags, mode, openinfo, |
60 |
*/ |
61 |
if (b.psize && |
62 |
(b.psize < MINPSIZE || b.psize > MAX_PAGE_OFFSET + 1 || |
63 |
- b.psize & sizeof(indx_t) - 1)) |
64 |
+ b.psize & (sizeof(indx_t) - 1))) |
65 |
goto einval; |
66 |
|
67 |
/* Minimum number of keys per page; absolute minimum is 2. */ |
68 |
@@ -200,7 +200,7 @@ __bt_open(fname, flags, mode, openinfo, |
69 |
default: |
70 |
goto einval; |
71 |
} |
72 |
- |
73 |
+ |
74 |
if ((t->bt_fd = open(fname, flags, mode)) < 0) |
75 |
goto err; |
76 |
|
77 |
@@ -245,7 +245,7 @@ __bt_open(fname, flags, mode, openinfo, |
78 |
if (m.magic != BTREEMAGIC || m.version != BTREEVERSION) |
79 |
goto eftype; |
80 |
if (m.psize < MINPSIZE || m.psize > MAX_PAGE_OFFSET + 1 || |
81 |
- m.psize & sizeof(indx_t) - 1) |
82 |
+ m.psize & (sizeof(indx_t) - 1)) |
83 |
goto eftype; |
84 |
if (m.flags & ~SAVEMETA) |
85 |
goto eftype; |
86 |
@@ -259,7 +259,9 @@ __bt_open(fname, flags, mode, openinfo, |
87 |
* Don't overflow the page offset type. |
88 |
*/ |
89 |
if (b.psize == 0) { |
90 |
+#ifdef _STATBUF_ST_BLKSIZE |
91 |
b.psize = sb.st_blksize; |
92 |
+#endif |
93 |
if (b.psize < MINPSIZE) |
94 |
b.psize = MINPSIZE; |
95 |
if (b.psize > MAX_PAGE_OFFSET + 1) |
96 |
@@ -278,8 +280,8 @@ __bt_open(fname, flags, mode, openinfo, |
97 |
t->bt_psize = b.psize; |
98 |
|
99 |
/* Set the cache size; must be a multiple of the page size. */ |
100 |
- if (b.cachesize && b.cachesize & b.psize - 1) |
101 |
- b.cachesize += (~b.cachesize & b.psize - 1) + 1; |
102 |
+ if (b.cachesize && b.cachesize & (b.psize - 1)) |
103 |
+ b.cachesize += (~b.cachesize & (b.psize - 1)) + 1; |
104 |
if (b.cachesize < b.psize * MINCACHE) |
105 |
b.cachesize = b.psize * MINCACHE; |
106 |
|
107 |
@@ -388,18 +390,30 @@ tmp() |
108 |
{ |
109 |
sigset_t set, oset; |
110 |
int fd; |
111 |
- char *envtmp; |
112 |
- char path[MAXPATHLEN]; |
113 |
+ const char *envtmp; |
114 |
+ char *path; |
115 |
+ static const char fmt[] = "%s/bt.XXXXXX"; |
116 |
+ size_t n; |
117 |
|
118 |
envtmp = getenv("TMPDIR"); |
119 |
- (void)snprintf(path, |
120 |
- sizeof(path), "%s/bt.XXXXXX", envtmp ? envtmp : "/tmp"); |
121 |
+ if (!envtmp) |
122 |
+ envtmp = "/tmp"; |
123 |
+ n = strlen (envtmp) + sizeof fmt; |
124 |
+#ifdef __GNUC__ |
125 |
+ path = __builtin_alloca(n); |
126 |
+#else |
127 |
+ path = malloc(n); |
128 |
+#endif |
129 |
+ (void)snprintf(path, n, fmt, envtmp ? envtmp : "/tmp"); |
130 |
|
131 |
(void)sigfillset(&set); |
132 |
(void)sigprocmask(SIG_BLOCK, &set, &oset); |
133 |
if ((fd = mkstemp(path)) != -1) |
134 |
(void)unlink(path); |
135 |
(void)sigprocmask(SIG_SETMASK, &oset, NULL); |
136 |
+#ifndef __GNUC__ |
137 |
+ free(path); |
138 |
+#endif |
139 |
return(fd); |
140 |
} |
141 |
|
142 |
--- db.1.85/btree/bt_page.c.jj Thu Jul 14 03:29:02 1994 |
143 |
+++ db.1.85/btree/bt_page.c Wed Apr 19 17:56:12 2000 |
144 |
@@ -65,6 +65,7 @@ __bt_free(t, h) |
145 |
h->prevpg = P_INVALID; |
146 |
h->nextpg = t->bt_free; |
147 |
t->bt_free = h->pgno; |
148 |
+ F_SET(t, B_METADIRTY); |
149 |
|
150 |
/* Make sure the page gets written back. */ |
151 |
return (mpool_put(t->bt_mp, h, MPOOL_DIRTY)); |
152 |
@@ -92,6 +93,7 @@ __bt_new(t, npg) |
153 |
(h = mpool_get(t->bt_mp, t->bt_free, 0)) != NULL) { |
154 |
*npg = t->bt_free; |
155 |
t->bt_free = h->nextpg; |
156 |
+ F_SET(t, B_METADIRTY); |
157 |
return (h); |
158 |
} |
159 |
return (mpool_new(t->bt_mp, npg)); |
160 |
--- db.1.85/btree/bt_put.c.jj Tue Jul 26 20:56:14 1994 |
161 |
+++ db.1.85/btree/bt_put.c Wed Apr 19 17:56:12 2000 |
162 |
@@ -201,7 +201,7 @@ delete: if (__bt_dleaf(t, key, h, index |
163 |
* into the offset array, shift the pointers up. |
164 |
*/ |
165 |
nbytes = NBLEAFDBT(key->size, data->size); |
166 |
- if (h->upper - h->lower < nbytes + sizeof(indx_t)) { |
167 |
+ if ((u_int32_t) (h->upper - h->lower) < nbytes + sizeof(indx_t)) { |
168 |
if ((status = __bt_split(t, h, key, |
169 |
data, dflags, nbytes, index)) != RET_SUCCESS) |
170 |
return (status); |
171 |
@@ -223,7 +223,7 @@ delete: if (__bt_dleaf(t, key, h, index |
172 |
t->bt_cursor.pg.pgno == h->pgno && t->bt_cursor.pg.index >= index) |
173 |
++t->bt_cursor.pg.index; |
174 |
|
175 |
- if (t->bt_order == NOT) |
176 |
+ if (t->bt_order == NOT) { |
177 |
if (h->nextpg == P_INVALID) { |
178 |
if (index == NEXTINDEX(h) - 1) { |
179 |
t->bt_order = FORWARD; |
180 |
@@ -237,6 +237,7 @@ delete: if (__bt_dleaf(t, key, h, index |
181 |
t->bt_last.pgno = h->pgno; |
182 |
} |
183 |
} |
184 |
+ } |
185 |
|
186 |
mpool_put(t->bt_mp, h, MPOOL_DIRTY); |
187 |
|
188 |
@@ -284,7 +285,7 @@ bt_fast(t, key, data, exactp) |
189 |
* have to search to get split stack. |
190 |
*/ |
191 |
nbytes = NBLEAFDBT(key->size, data->size); |
192 |
- if (h->upper - h->lower < nbytes + sizeof(indx_t)) |
193 |
+ if ((u_int32_t) (h->upper - h->lower) < nbytes + sizeof(indx_t)) |
194 |
goto miss; |
195 |
|
196 |
if (t->bt_order == FORWARD) { |
197 |
--- db.1.85/btree/bt_seq.c.jj Tue Jul 26 18:57:24 1994 |
198 |
+++ db.1.85/btree/bt_seq.c Wed Apr 19 17:56:12 2000 |
199 |
@@ -92,7 +92,7 @@ __bt_seq(dbp, key, data, flags) |
200 |
} |
201 |
|
202 |
/* |
203 |
- * If scan unitialized as yet, or starting at a specific record, set |
204 |
+ * If scan uninitialized as yet, or starting at a specific record, set |
205 |
* the scan to a specific key. Both __bt_seqset and __bt_seqadv pin |
206 |
* the page the cursor references if they're successful. |
207 |
*/ |
208 |
@@ -358,13 +358,13 @@ __bt_first(t, key, erval, exactp) |
209 |
* page) and return it. |
210 |
*/ |
211 |
if ((ep = __bt_search(t, key, exactp)) == NULL) |
212 |
- return (NULL); |
213 |
+ return (RET_SPECIAL); |
214 |
if (*exactp) { |
215 |
if (F_ISSET(t, B_NODUPS)) { |
216 |
*erval = *ep; |
217 |
return (RET_SUCCESS); |
218 |
} |
219 |
- |
220 |
+ |
221 |
/* |
222 |
* Walk backwards, as long as the entry matches and there are |
223 |
* keys left in the tree. Save a copy of each match in case |
224 |
--- db.1.85/btree/bt_split.c.jj Tue Jul 26 20:22:02 1994 |
225 |
+++ db.1.85/btree/bt_split.c Wed Apr 19 17:56:12 2000 |
226 |
@@ -215,7 +215,8 @@ __bt_split(t, sp, key, data, flags, ilen |
227 |
} |
228 |
|
229 |
/* Split the parent page if necessary or shift the indices. */ |
230 |
- if (h->upper - h->lower < nbytes + sizeof(indx_t)) { |
231 |
+ if ((u_int32_t) (h->upper - h->lower) |
232 |
+ < nbytes + sizeof(indx_t)) { |
233 |
sp = h; |
234 |
h = h->pgno == P_ROOT ? |
235 |
bt_root(t, h, &l, &r, &skip, nbytes) : |
236 |
@@ -673,7 +674,8 @@ bt_psplit(t, h, l, r, pskip, ilen) |
237 |
* where we decide to try and copy too much onto the left page. |
238 |
* Make sure that doesn't happen. |
239 |
*/ |
240 |
- if (skip <= off && used + nbytes >= full) { |
241 |
+ if ((skip <= off && used + nbytes + sizeof(indx_t) >= full) |
242 |
+ || nxt == top - 1) { |
243 |
--off; |
244 |
break; |
245 |
} |
246 |
@@ -686,7 +688,7 @@ bt_psplit(t, h, l, r, pskip, ilen) |
247 |
memmove((char *)l + l->upper, src, nbytes); |
248 |
} |
249 |
|
250 |
- used += nbytes; |
251 |
+ used += nbytes + sizeof(indx_t); |
252 |
if (used >= half) { |
253 |
if (!isbigkey || bigkeycnt == 3) |
254 |
break; |
255 |
--- db.1.85/btree/bt_utils.c.jj Wed Jul 20 17:06:53 1994 |
256 |
+++ db.1.85/btree/bt_utils.c Wed Apr 19 17:56:12 2000 |
257 |
@@ -76,7 +76,7 @@ __bt_ret(t, e, key, rkey, data, rdata, c |
258 |
bl = GETBLEAF(e->page, e->index); |
259 |
|
260 |
/* |
261 |
- * We must copy big keys/data to make them contigous. Otherwise, |
262 |
+ * We must copy big keys/data to make them contiguous. Otherwise, |
263 |
* leave the page pinned and don't copy unless the user specified |
264 |
* concurrent access. |
265 |
*/ |
266 |
--- db.1.85/btree/btree.h.jj Thu Aug 18 15:30:43 1994 |
267 |
+++ db.1.85/btree/btree.h Wed Apr 19 17:58:46 2000 |
268 |
@@ -43,6 +43,14 @@ |
269 |
|
270 |
#include <mpool.h> |
271 |
|
272 |
+#define mpool_open __mpool_open |
273 |
+#define mpool_filter __mpool_filter |
274 |
+#define mpool_new __mpool_new |
275 |
+#define mpool_get __mpool_get |
276 |
+#define mpool_put __mpool_put |
277 |
+#define mpool_sync __mpool_sync |
278 |
+#define mpool_close __mpool_close |
279 |
+ |
280 |
#define DEFMINKEYPAGE (2) /* Minimum keys per page */ |
281 |
#define MINCACHE (5) /* Minimum cached pages */ |
282 |
#define MINPSIZE (512) /* Minimum page size */ |
283 |
@@ -161,7 +169,7 @@ typedef struct _rinternal { |
284 |
#define NRINTERNAL \ |
285 |
LALIGN(sizeof(recno_t) + sizeof(pgno_t)) |
286 |
|
287 |
-/* Copy a RINTERAL entry to the page. */ |
288 |
+/* Copy a RINTERNAL entry to the page. */ |
289 |
#define WR_RINTERNAL(p, nrecs, pgno) { \ |
290 |
*(recno_t *)p = nrecs; \ |
291 |
p += sizeof(recno_t); \ |
292 |
--- db.1.85/hash/extern.h.jj Thu Jun 16 22:30:14 1994 |
293 |
+++ db.1.85/hash/extern.h Wed Apr 19 17:56:12 2000 |
294 |
@@ -52,7 +52,7 @@ void __free_ovflpage __P((HTAB *, BUFHE |
295 |
BUFHEAD *__get_buf __P((HTAB *, u_int32_t, BUFHEAD *, int)); |
296 |
int __get_page __P((HTAB *, char *, u_int32_t, int, int, int)); |
297 |
int __ibitmap __P((HTAB *, int, int, int)); |
298 |
-u_int32_t __log2 __P((u_int32_t)); |
299 |
+u_int32_t __hash_log2 __P((u_int32_t)); |
300 |
int __put_page __P((HTAB *, char *, u_int32_t, int, int)); |
301 |
void __reclaim_buf __P((HTAB *, BUFHEAD *)); |
302 |
int __split_page __P((HTAB *, u_int32_t, u_int32_t)); |
303 |
--- db.1.85/hash/hash.c.jj Fri Jun 24 17:12:29 1994 |
304 |
+++ db.1.85/hash/hash.c Wed Apr 19 17:56:12 2000 |
305 |
@@ -157,7 +157,8 @@ __hash_open(file, flags, mode, info, dfl |
306 |
if (hashp->VERSION != HASHVERSION && |
307 |
hashp->VERSION != OLDHASHVERSION) |
308 |
RETURN_ERROR(EFTYPE, error1); |
309 |
- if (hashp->hash(CHARKEY, sizeof(CHARKEY)) != hashp->H_CHARKEY) |
310 |
+ if (hashp->hash(CHARKEY, sizeof(CHARKEY)) |
311 |
+ != (u_int32_t) hashp->H_CHARKEY) |
312 |
RETURN_ERROR(EFTYPE, error1); |
313 |
/* |
314 |
* Figure out how many segments we need. Max_Bucket is the |
315 |
@@ -189,7 +190,7 @@ __hash_open(file, flags, mode, info, dfl |
316 |
__buf_init(hashp, DEF_BUFSIZE); |
317 |
|
318 |
hashp->new_file = new_table; |
319 |
- hashp->save_file = file && (hashp->flags & O_RDWR); |
320 |
+ hashp->save_file = file && (hashp->flags & O_ACCMODE) != O_RDONLY; |
321 |
hashp->cbucket = -1; |
322 |
if (!(dbp = (DB *)malloc(sizeof(DB)))) { |
323 |
save_errno = errno; |
324 |
@@ -281,7 +282,9 @@ init_hash(hashp, file, info) |
325 |
const char *file; |
326 |
HASHINFO *info; |
327 |
{ |
328 |
+#ifdef _STATBUF_ST_BLKSIZE |
329 |
struct stat statbuf; |
330 |
+#endif |
331 |
int nelem; |
332 |
|
333 |
nelem = 1; |
334 |
@@ -298,17 +301,19 @@ init_hash(hashp, file, info) |
335 |
memset(hashp->BITMAPS, 0, sizeof (hashp->BITMAPS)); |
336 |
|
337 |
/* Fix bucket size to be optimal for file system */ |
338 |
+#ifdef _STATBUF_ST_BLKSIZE |
339 |
if (file != NULL) { |
340 |
if (stat(file, &statbuf)) |
341 |
return (NULL); |
342 |
hashp->BSIZE = statbuf.st_blksize; |
343 |
- hashp->BSHIFT = __log2(hashp->BSIZE); |
344 |
+ hashp->BSHIFT = __hash_log2(hashp->BSIZE); |
345 |
} |
346 |
+#endif |
347 |
|
348 |
if (info) { |
349 |
if (info->bsize) { |
350 |
/* Round pagesize up to power of 2 */ |
351 |
- hashp->BSHIFT = __log2(info->bsize); |
352 |
+ hashp->BSHIFT = __hash_log2(info->bsize); |
353 |
hashp->BSIZE = 1 << hashp->BSHIFT; |
354 |
if (hashp->BSIZE > MAX_BSIZE) { |
355 |
errno = EINVAL; |
356 |
@@ -357,7 +362,7 @@ init_htab(hashp, nelem) |
357 |
*/ |
358 |
nelem = (nelem - 1) / hashp->FFACTOR + 1; |
359 |
|
360 |
- l2 = __log2(MAX(nelem, 2)); |
361 |
+ l2 = __hash_log2(MAX(nelem, 2)); |
362 |
nbuckets = 1 << l2; |
363 |
|
364 |
hashp->SPARES[l2] = l2 + 1; |
365 |
@@ -375,7 +380,7 @@ init_htab(hashp, nelem) |
366 |
hashp->BSHIFT) + 1; |
367 |
|
368 |
nsegs = (nbuckets - 1) / hashp->SGSIZE + 1; |
369 |
- nsegs = 1 << __log2(nsegs); |
370 |
+ nsegs = 1 << __hash_log2(nsegs); |
371 |
|
372 |
if (nsegs > hashp->DSIZE) |
373 |
hashp->DSIZE = nsegs; |
374 |
@@ -505,7 +510,7 @@ flush_meta(hashp) |
375 |
else |
376 |
if (wsize != sizeof(HASHHDR)) { |
377 |
errno = EFTYPE; |
378 |
- hashp->errno = errno; |
379 |
+ hashp->errnum = errno; |
380 |
return (-1); |
381 |
} |
382 |
for (i = 0; i < NCACHED; i++) |
383 |
@@ -536,7 +541,7 @@ hash_get(dbp, key, data, flag) |
384 |
|
385 |
hashp = (HTAB *)dbp->internal; |
386 |
if (flag) { |
387 |
- hashp->errno = errno = EINVAL; |
388 |
+ hashp->errnum = errno = EINVAL; |
389 |
return (ERROR); |
390 |
} |
391 |
return (hash_access(hashp, HASH_GET, (DBT *)key, data)); |
392 |
@@ -553,11 +558,11 @@ hash_put(dbp, key, data, flag) |
393 |
|
394 |
hashp = (HTAB *)dbp->internal; |
395 |
if (flag && flag != R_NOOVERWRITE) { |
396 |
- hashp->errno = errno = EINVAL; |
397 |
+ hashp->errnum = errno = EINVAL; |
398 |
return (ERROR); |
399 |
} |
400 |
if ((hashp->flags & O_ACCMODE) == O_RDONLY) { |
401 |
- hashp->errno = errno = EPERM; |
402 |
+ hashp->errnum = errno = EPERM; |
403 |
return (ERROR); |
404 |
} |
405 |
return (hash_access(hashp, flag == R_NOOVERWRITE ? |
406 |
@@ -574,11 +579,11 @@ hash_delete(dbp, key, flag) |
407 |
|
408 |
hashp = (HTAB *)dbp->internal; |
409 |
if (flag && flag != R_CURSOR) { |
410 |
- hashp->errno = errno = EINVAL; |
411 |
+ hashp->errnum = errno = EINVAL; |
412 |
return (ERROR); |
413 |
} |
414 |
if ((hashp->flags & O_ACCMODE) == O_RDONLY) { |
415 |
- hashp->errno = errno = EPERM; |
416 |
+ hashp->errnum = errno = EPERM; |
417 |
return (ERROR); |
418 |
} |
419 |
return (hash_access(hashp, HASH_DELETE, (DBT *)key, NULL)); |
420 |
@@ -729,7 +734,7 @@ hash_seq(dbp, key, data, flag) |
421 |
|
422 |
hashp = (HTAB *)dbp->internal; |
423 |
if (flag && flag != R_FIRST && flag != R_NEXT) { |
424 |
- hashp->errno = errno = EINVAL; |
425 |
+ hashp->errnum = errno = EINVAL; |
426 |
return (ERROR); |
427 |
} |
428 |
#ifdef HASH_STATISTICS |
429 |
@@ -744,7 +749,7 @@ hash_seq(dbp, key, data, flag) |
430 |
for (bp = NULL; !bp || !bp[0]; ) { |
431 |
if (!(bufp = hashp->cpage)) { |
432 |
for (bucket = hashp->cbucket; |
433 |
- bucket <= hashp->MAX_BUCKET; |
434 |
+ bucket <= (u_int32_t) hashp->MAX_BUCKET; |
435 |
bucket++, hashp->cndx = 1) { |
436 |
bufp = __get_buf(hashp, bucket, NULL, 0); |
437 |
if (!bufp) |
438 |
@@ -842,13 +847,13 @@ __expand_table(hashp) |
439 |
* * increases), we need to copy the current contents of the spare |
440 |
* split bucket to the next bucket. |
441 |
*/ |
442 |
- spare_ndx = __log2(hashp->MAX_BUCKET + 1); |
443 |
+ spare_ndx = __hash_log2(hashp->MAX_BUCKET + 1); |
444 |
if (spare_ndx > hashp->OVFL_POINT) { |
445 |
hashp->SPARES[spare_ndx] = hashp->SPARES[hashp->OVFL_POINT]; |
446 |
hashp->OVFL_POINT = spare_ndx; |
447 |
} |
448 |
|
449 |
- if (new_bucket > hashp->HIGH_MASK) { |
450 |
+ if (new_bucket > (u_int32_t) hashp->HIGH_MASK) { |
451 |
/* Starting a new doubling */ |
452 |
hashp->LOW_MASK = hashp->HIGH_MASK; |
453 |
hashp->HIGH_MASK = new_bucket | hashp->LOW_MASK; |
454 |
@@ -868,7 +873,7 @@ hash_realloc(p_ptr, oldsize, newsize) |
455 |
{ |
456 |
register void *p; |
457 |
|
458 |
- if (p = malloc(newsize)) { |
459 |
+ if ((p = malloc(newsize))) { |
460 |
memmove(p, *p_ptr, oldsize); |
461 |
memset((char *)p + oldsize, 0, newsize - oldsize); |
462 |
free(*p_ptr); |
463 |
--- db.1.85/hash/hash.h.jj Fri Jun 24 17:12:29 1994 |
464 |
+++ db.1.85/hash/hash.h Wed Apr 19 17:56:12 2000 |
465 |
@@ -71,28 +71,28 @@ typedef struct hashhdr { /* Disk reside |
466 |
int dsize; /* Directory Size */ |
467 |
int ssize; /* Segment Size */ |
468 |
int sshift; /* Segment shift */ |
469 |
- int ovfl_point; /* Where overflow pages are being |
470 |
+ int ovfl_point; /* Where overflow pages are being |
471 |
* allocated */ |
472 |
int last_freed; /* Last overflow page freed */ |
473 |
int max_bucket; /* ID of Maximum bucket in use */ |
474 |
int high_mask; /* Mask to modulo into entire table */ |
475 |
- int low_mask; /* Mask to modulo into lower half of |
476 |
+ int low_mask; /* Mask to modulo into lower half of |
477 |
* table */ |
478 |
int ffactor; /* Fill factor */ |
479 |
int nkeys; /* Number of keys in hash table */ |
480 |
int hdrpages; /* Size of table header */ |
481 |
int h_charkey; /* value of hash(CHARKEY) */ |
482 |
-#define NCACHED 32 /* number of bit maps and spare |
483 |
+#define NCACHED 32 /* number of bit maps and spare |
484 |
* points */ |
485 |
int spares[NCACHED];/* spare pages for overflow */ |
486 |
- u_int16_t bitmaps[NCACHED]; /* address of overflow page |
487 |
+ u_int16_t bitmaps[NCACHED]; /* address of overflow page |
488 |
* bitmaps */ |
489 |
} HASHHDR; |
490 |
|
491 |
typedef struct htab { /* Memory resident data structure */ |
492 |
HASHHDR hdr; /* Header */ |
493 |
int nsegs; /* Number of allocated segments */ |
494 |
- int exsegs; /* Number of extra allocated |
495 |
+ int exsegs; /* Number of extra allocated |
496 |
* segments */ |
497 |
u_int32_t /* Hash function */ |
498 |
(*hash)__P((const void *, size_t)); |
499 |
@@ -103,16 +103,16 @@ typedef struct htab { /* Memory reside |
500 |
BUFHEAD *cpage; /* Current page */ |
501 |
int cbucket; /* Current bucket */ |
502 |
int cndx; /* Index of next item on cpage */ |
503 |
- int errno; /* Error Number -- for DBM |
504 |
- * compatability */ |
505 |
- int new_file; /* Indicates if fd is backing store |
506 |
+ int errnum; /* Error Number -- for DBM |
507 |
+ * compatibility */ |
508 |
+ int new_file; /* Indicates if fd is backing store |
509 |
* or no */ |
510 |
- int save_file; /* Indicates whether we need to flush |
511 |
+ int save_file; /* Indicates whether we need to flush |
512 |
* file at |
513 |
* exit */ |
514 |
u_int32_t *mapp[NCACHED]; /* Pointers to page maps */ |
515 |
int nmaps; /* Initial number of bitmaps */ |
516 |
- int nbufs; /* Number of buffers left to |
517 |
+ int nbufs; /* Number of buffers left to |
518 |
* allocate */ |
519 |
BUFHEAD bufhead; /* Header of buffer lru list */ |
520 |
SEGMENT *dir; /* Hash Bucket directory */ |
521 |
@@ -170,7 +170,7 @@ typedef struct htab { /* Memory reside |
522 |
#define OADDR_OF(S,O) ((u_int32_t)((u_int32_t)(S) << SPLITSHIFT) + (O)) |
523 |
|
524 |
#define BUCKET_TO_PAGE(B) \ |
525 |
- (B) + hashp->HDRPAGES + ((B) ? hashp->SPARES[__log2((B)+1)-1] : 0) |
526 |
+ (B) + hashp->HDRPAGES + ((B) ? hashp->SPARES[__hash_log2((B)+1)-1] : 0) |
527 |
#define OADDR_TO_PAGE(B) \ |
528 |
BUCKET_TO_PAGE ( (1 << SPLITNUM((B))) -1 ) + OPAGENUM((B)); |
529 |
|
530 |
@@ -194,7 +194,7 @@ typedef struct htab { /* Memory reside |
531 |
* so it starts on this page and continues on the next. |
532 |
* The format of the page is: |
533 |
* KEY_OFF PARTIAL_KEY OVFL_PAGENO OVFLPAGE |
534 |
- * |
535 |
+ * |
536 |
* KEY_OFF -- offset of the beginning of the key |
537 |
* PARTIAL_KEY -- 1 |
538 |
* OVFL_PAGENO - page number of the next overflow page |
539 |
@@ -229,7 +229,7 @@ typedef struct htab { /* Memory reside |
540 |
* OVFL_PAGENO - page number of the next overflow page |
541 |
* OVFLPAGE -- 0 |
542 |
* |
543 |
- * FULL_KEY_DATA |
544 |
+ * FULL_KEY_DATA |
545 |
* This must be the first key/data pair on the page. |
546 |
* There are two cases: |
547 |
* |
548 |
--- db.1.85/hash/hash_bigkey.c.jj Fri Jun 24 17:12:30 1994 |
549 |
+++ db.1.85/hash/hash_bigkey.c Wed Apr 19 17:56:12 2000 |
550 |
@@ -121,7 +121,7 @@ __big_insert(hashp, bufp, key, val) |
551 |
if (!bufp) |
552 |
return (-1); |
553 |
n = p[0]; |
554 |
- if (!key_size) |
555 |
+ if (!key_size) { |
556 |
if (FREESPACE(p)) { |
557 |
move_bytes = MIN(FREESPACE(p), val_size); |
558 |
off = OFFSET(p) - move_bytes; |
559 |
@@ -134,6 +134,7 @@ __big_insert(hashp, bufp, key, val) |
560 |
OFFSET(p) = off; |
561 |
} else |
562 |
p[n - 2] = FULL_KEY; |
563 |
+ } |
564 |
p = (u_int16_t *)bufp->page; |
565 |
cp = bufp->page; |
566 |
bufp->flags |= BUF_MOD; |
567 |
@@ -147,7 +148,7 @@ __big_insert(hashp, bufp, key, val) |
568 |
* Here's the hack to make sure that if the data ends on the |
569 |
* same page as the key ends, FREESPACE is at least one. |
570 |
*/ |
571 |
- if (space == val_size && val_size == val->size) |
572 |
+ if ((int) space == val_size && (size_t) val_size == val->size) |
573 |
move_bytes--; |
574 |
off = OFFSET(p) - move_bytes; |
575 |
memmove(cp + off, val_data, move_bytes); |
576 |
@@ -249,7 +250,7 @@ __big_delete(hashp, bufp) |
577 |
bufp->flags |= BUF_MOD; |
578 |
if (rbufp) |
579 |
__free_ovflpage(hashp, rbufp); |
580 |
- if (last_bfp != rbufp) |
581 |
+ if (last_bfp && last_bfp != rbufp) |
582 |
__free_ovflpage(hashp, last_bfp); |
583 |
|
584 |
hashp->NKEYS--; |
585 |
@@ -431,7 +432,7 @@ __big_return(hashp, bufp, ndx, val, set_ |
586 |
} |
587 |
|
588 |
val->size = collect_data(hashp, bufp, (int)len, set_current); |
589 |
- if (val->size == -1) |
590 |
+ if (val->size == (size_t) -1) |
591 |
return (-1); |
592 |
if (save_p->addr != save_addr) { |
593 |
/* We are pretty short on buffers. */ |
594 |
@@ -510,7 +511,7 @@ __big_keydata(hashp, bufp, key, val, set |
595 |
int set; |
596 |
{ |
597 |
key->size = collect_key(hashp, bufp, 0, val, set); |
598 |
- if (key->size == -1) |
599 |
+ if (key->size == (size_t) -1) |
600 |
return (-1); |
601 |
key->data = (u_char *)hashp->tmp_key; |
602 |
return (0); |
603 |
@@ -590,7 +591,7 @@ __big_split(hashp, op, np, big_keyp, add |
604 |
return (-1); |
605 |
change = (__call_hash(hashp, key.data, key.size) != obucket); |
606 |
|
607 |
- if (ret->next_addr = __find_last_page(hashp, &big_keyp)) { |
608 |
+ if ((ret->next_addr = __find_last_page(hashp, &big_keyp))) { |
609 |
if (!(ret->nextp = |
610 |
__get_buf(hashp, ret->next_addr, big_keyp, 0))) |
611 |
return (-1);; |
612 |
--- db.1.85/hash/hash_log2.c.jj Tue May 31 22:56:53 1994 |
613 |
+++ db.1.85/hash/hash_log2.c Wed Apr 19 17:56:12 2000 |
614 |
@@ -42,8 +42,10 @@ static char sccsid[] = "@(#)hash_log2.c |
615 |
|
616 |
#include <db.h> |
617 |
|
618 |
+u_int32_t __hash_log2 __P((u_int32_t)); |
619 |
+ |
620 |
u_int32_t |
621 |
-__log2(num) |
622 |
+__hash_log2(num) |
623 |
u_int32_t num; |
624 |
{ |
625 |
register u_int32_t i, limit; |
626 |
--- db.1.85/hash/ndbm.c.jj Thu Jul 21 20:02:40 1994 |
627 |
+++ db.1.85/hash/ndbm.c Wed Apr 19 17:56:12 2000 |
628 |
@@ -47,6 +47,7 @@ static char sccsid[] = "@(#)ndbm.c 8.4 ( |
629 |
|
630 |
#include <stdio.h> |
631 |
#include <string.h> |
632 |
+#include <stdlib.h> |
633 |
|
634 |
#include <ndbm.h> |
635 |
#include "hash.h" |
636 |
@@ -61,8 +62,16 @@ dbm_open(file, flags, mode) |
637 |
const char *file; |
638 |
int flags, mode; |
639 |
{ |
640 |
+ DBM *db; |
641 |
HASHINFO info; |
642 |
- char path[MAXPATHLEN]; |
643 |
+ const size_t len = strlen(file) + sizeof (DBM_SUFFIX); |
644 |
+#ifdef __GNUC__ |
645 |
+ char path[len]; |
646 |
+#else |
647 |
+ char *path = malloc(len); |
648 |
+ if (path == NULL) |
649 |
+ return NULL; |
650 |
+#endif |
651 |
|
652 |
info.bsize = 4096; |
653 |
info.ffactor = 40; |
654 |
@@ -72,7 +81,11 @@ dbm_open(file, flags, mode) |
655 |
info.lorder = 0; |
656 |
(void)strcpy(path, file); |
657 |
(void)strcat(path, DBM_SUFFIX); |
658 |
- return ((DBM *)__hash_open(path, flags, mode, &info, 0)); |
659 |
+ db = (DBM *)__hash_open(path, flags, mode, &info, 0); |
660 |
+#ifndef __GNUC__ |
661 |
+ free(path); |
662 |
+#endif |
663 |
+ return db; |
664 |
} |
665 |
|
666 |
extern void |
667 |
@@ -180,7 +193,7 @@ dbm_error(db) |
668 |
HTAB *hp; |
669 |
|
670 |
hp = (HTAB *)db->internal; |
671 |
- return (hp->errno); |
672 |
+ return (hp->errnum); |
673 |
} |
674 |
|
675 |
extern int |
676 |
@@ -190,7 +203,7 @@ dbm_clearerr(db) |
677 |
HTAB *hp; |
678 |
|
679 |
hp = (HTAB *)db->internal; |
680 |
- hp->errno = 0; |
681 |
+ hp->errnum = 0; |
682 |
return (0); |
683 |
} |
684 |
|
685 |
--- db.1.85/recno/rec_close.c.jj Thu Aug 18 17:23:29 1994 |
686 |
+++ db.1.85/recno/rec_close.c Wed Apr 19 17:56:12 2000 |
687 |
@@ -79,13 +79,14 @@ __rec_close(dbp) |
688 |
if (F_ISSET(t, R_MEMMAPPED) && munmap(t->bt_smap, t->bt_msize)) |
689 |
status = RET_ERROR; |
690 |
|
691 |
- if (!F_ISSET(t, R_INMEM)) |
692 |
+ if (!F_ISSET(t, R_INMEM)) { |
693 |
if (F_ISSET(t, R_CLOSEFP)) { |
694 |
if (fclose(t->bt_rfp)) |
695 |
status = RET_ERROR; |
696 |
} else |
697 |
if (close(t->bt_rfd)) |
698 |
status = RET_ERROR; |
699 |
+ } |
700 |
|
701 |
if (__bt_close(dbp) == RET_ERROR) |
702 |
status = RET_ERROR; |
703 |
@@ -150,7 +151,7 @@ __rec_sync(dbp, flags) |
704 |
*/ |
705 |
status = (dbp->seq)(dbp, &key, &data, R_FIRST); |
706 |
while (status == RET_SUCCESS) { |
707 |
- if (write(t->bt_rfd, data.data, data.size) != data.size) |
708 |
+ if ((size_t) write(t->bt_rfd, data.data, data.size) != data.size) |
709 |
return (RET_ERROR); |
710 |
status = (dbp->seq)(dbp, &key, &data, R_NEXT); |
711 |
} |
712 |
@@ -162,7 +163,7 @@ __rec_sync(dbp, flags) |
713 |
while (status == RET_SUCCESS) { |
714 |
iov[0].iov_base = data.data; |
715 |
iov[0].iov_len = data.size; |
716 |
- if (writev(t->bt_rfd, iov, 2) != data.size + 1) |
717 |
+ if ((size_t) writev(t->bt_rfd, iov, 2) != data.size + 1) |
718 |
return (RET_ERROR); |
719 |
status = (dbp->seq)(dbp, &key, &data, R_NEXT); |
720 |
} |
721 |
--- db.1.85/recno/rec_put.c.jj Thu Aug 18 17:24:16 1994 |
722 |
+++ db.1.85/recno/rec_put.c Wed Apr 19 17:56:12 2000 |
723 |
@@ -170,7 +170,7 @@ einval: errno = EINVAL; |
724 |
|
725 |
if (flags == R_SETCURSOR) |
726 |
t->bt_cursor.rcursor = nrec; |
727 |
- |
728 |
+ |
729 |
F_SET(t, R_MODIFIED); |
730 |
return (__rec_ret(t, NULL, nrec, key, NULL)); |
731 |
} |
732 |
@@ -256,7 +256,7 @@ __rec_iput(t, nrec, data, flags) |
733 |
* the offset array, shift the pointers up. |
734 |
*/ |
735 |
nbytes = NRLEAFDBT(data->size); |
736 |
- if (h->upper - h->lower < nbytes + sizeof(indx_t)) { |
737 |
+ if ((u_int32_t) (h->upper - h->lower) < nbytes + sizeof(indx_t)) { |
738 |
status = __bt_split(t, h, NULL, data, dflags, nbytes, index); |
739 |
if (status == RET_SUCCESS) |
740 |
++t->bt_nrecs; |
741 |
--- db.1.85/recno/rec_seq.c.jj Thu Jul 14 03:35:40 1994 |
742 |
+++ db.1.85/recno/rec_seq.c Wed Apr 19 17:56:12 2000 |
743 |
@@ -31,7 +31,7 @@ |
744 |
* SUCH DAMAGE. |
745 |
*/ |
746 |
|
747 |
-#ifndef lint |
748 |
+#if defined(LIBC_SCCS) && !defined(lint) |
749 |
static char sccsid[] = "@(#)rec_seq.c 8.3 (Berkeley) 7/14/94"; |
750 |
#endif /* not lint */ |
751 |
|
752 |
--- db.1.85/recno/rec_utils.c.jj Sat Jul 16 16:55:08 1994 |
753 |
+++ db.1.85/recno/rec_utils.c Wed Apr 19 17:56:12 2000 |
754 |
@@ -90,7 +90,7 @@ dataonly: |
755 |
return (RET_SUCCESS); |
756 |
|
757 |
/* |
758 |
- * We must copy big keys/data to make them contigous. Otherwise, |
759 |
+ * We must copy big keys/data to make them contiguous. Otherwise, |
760 |
* leave the page pinned and don't copy unless the user specified |
761 |
* concurrent access. |
762 |
*/ |
763 |
--- db.1.85/mpool/mpool.c.jj Tue Jul 26 21:19:35 1994 |
764 |
+++ db.1.85/mpool/mpool.c Wed Apr 19 18:06:21 2000 |
765 |
@@ -50,6 +50,14 @@ static char sccsid[] = "@(#)mpool.c 8.5 |
766 |
#define __MPOOLINTERFACE_PRIVATE |
767 |
#include <mpool.h> |
768 |
|
769 |
+#define mpool_open __mpool_open |
770 |
+#define mpool_filter __mpool_filter |
771 |
+#define mpool_new __mpool_new |
772 |
+#define mpool_get __mpool_get |
773 |
+#define mpool_put __mpool_put |
774 |
+#define mpool_sync __mpool_sync |
775 |
+#define mpool_close __mpool_close |
776 |
+ |
777 |
static BKT *mpool_bkt __P((MPOOL *)); |
778 |
static BKT *mpool_look __P((MPOOL *, pgno_t)); |
779 |
static int mpool_write __P((MPOOL *, BKT *)); |
780 |
@@ -109,7 +117,7 @@ mpool_filter(mp, pgin, pgout, pgcookie) |
781 |
mp->pgout = pgout; |
782 |
mp->pgcookie = pgcookie; |
783 |
} |
784 |
- |
785 |
+ |
786 |
/* |
787 |
* mpool_new -- |
788 |
* Get a new page of memory. |
789 |
@@ -205,7 +213,8 @@ mpool_get(mp, pgno, flags) |
790 |
off = mp->pagesize * pgno; |
791 |
if (lseek(mp->fd, off, SEEK_SET) != off) |
792 |
return (NULL); |
793 |
- if ((nr = read(mp->fd, bp->page, mp->pagesize)) != mp->pagesize) { |
794 |
+ if ((u_long) (nr = read(mp->fd, bp->page, mp->pagesize)) |
795 |
+ != mp->pagesize) { |
796 |
if (nr >= 0) |
797 |
errno = EFTYPE; |
798 |
return (NULL); |
799 |
@@ -300,6 +309,23 @@ mpool_sync(mp) |
800 |
return (fsync(mp->fd) ? RET_ERROR : RET_SUCCESS); |
801 |
} |
802 |
|
803 |
+#undef mpool_open |
804 |
+#undef mpool_filter |
805 |
+#undef mpool_new |
806 |
+#undef mpool_get |
807 |
+#undef mpool_put |
808 |
+#undef mpool_close |
809 |
+#undef mpool_sync |
810 |
+#define weak_alias(original, alias) \ |
811 |
+ asm (".weak " #alias "\n" #alias " = " #original); |
812 |
+weak_alias (__mpool_open, mpool_open) |
813 |
+weak_alias (__mpool_filter, mpool_filter) |
814 |
+weak_alias (__mpool_new, mpool_new) |
815 |
+weak_alias (__mpool_get, mpool_get) |
816 |
+weak_alias (__mpool_put, mpool_put) |
817 |
+weak_alias (__mpool_close, mpool_close) |
818 |
+weak_alias (__mpool_sync, mpool_sync) |
819 |
+ |
820 |
/* |
821 |
* mpool_bkt |
822 |
* Get a page from the cache (or create one). |
823 |
@@ -380,7 +406,7 @@ mpool_write(mp, bp) |
824 |
off = mp->pagesize * bp->pgno; |
825 |
if (lseek(mp->fd, off, SEEK_SET) != off) |
826 |
return (RET_ERROR); |
827 |
- if (write(mp->fd, bp->page, mp->pagesize) != mp->pagesize) |
828 |
+ if ((u_long) write(mp->fd, bp->page, mp->pagesize) != mp->pagesize) |
829 |
return (RET_ERROR); |
830 |
|
831 |
bp->flags &= ~MPOOL_DIRTY; |
832 |
@@ -436,7 +462,7 @@ mpool_stat(mp) |
833 |
mp->pagealloc, mp->pageflush); |
834 |
if (mp->cachehit + mp->cachemiss) |
835 |
(void)fprintf(stderr, |
836 |
- "%.0f%% cache hit rate (%lu hits, %lu misses)\n", |
837 |
+ "%.0f%% cache hit rate (%lu hits, %lu misses)\n", |
838 |
((double)mp->cachehit / (mp->cachehit + mp->cachemiss)) |
839 |
* 100, mp->cachehit, mp->cachemiss); |
840 |
(void)fprintf(stderr, "%lu page reads, %lu page writes\n", |
841 |
@@ -456,7 +482,7 @@ mpool_stat(mp) |
842 |
cnt = 0; |
843 |
} else |
844 |
sep = ", "; |
845 |
- |
846 |
+ |
847 |
} |
848 |
(void)fprintf(stderr, "\n"); |
849 |
} |
850 |
--- db.1.85/db/db.c.jj Tue Feb 22 00:07:47 1994 |
851 |
+++ db.1.85/db/db.c Wed Apr 19 18:06:46 2000 |
852 |
@@ -44,6 +44,8 @@ static char sccsid[] = "@(#)db.c 8.4 (Be |
853 |
|
854 |
#include <db.h> |
855 |
|
856 |
+#define dbopen __dbopen |
857 |
+ |
858 |
DB * |
859 |
dbopen(fname, flags, mode, type, openinfo) |
860 |
const char *fname; |
861 |
@@ -72,9 +74,13 @@ dbopen(fname, flags, mode, type, openinf |
862 |
errno = EINVAL; |
863 |
return (NULL); |
864 |
} |
865 |
+#undef dbopen |
866 |
+#define weak_alias(original, alias) \ |
867 |
+ asm (".weak " #alias "\n" #alias " = " #original); |
868 |
+weak_alias (__dbopen, dbopen) |
869 |
|
870 |
static int |
871 |
-__dberr() |
872 |
+__dberr __P((void)) |
873 |
{ |
874 |
return (RET_ERROR); |
875 |
} |
876 |
@@ -90,10 +96,14 @@ __dbpanic(dbp) |
877 |
DB *dbp; |
878 |
{ |
879 |
/* The only thing that can succeed is a close. */ |
880 |
- dbp->del = (int (*)())__dberr; |
881 |
- dbp->fd = (int (*)())__dberr; |
882 |
- dbp->get = (int (*)())__dberr; |
883 |
- dbp->put = (int (*)())__dberr; |
884 |
- dbp->seq = (int (*)())__dberr; |
885 |
- dbp->sync = (int (*)())__dberr; |
886 |
+ dbp->del = (int (*)__P((const struct __db *, |
887 |
+ const DBT *, u_int))) __dberr; |
888 |
+ dbp->get = (int (*)__P((const struct __db *, |
889 |
+ const DBT *, DBT *, u_int))) __dberr; |
890 |
+ dbp->put = (int (*)__P((const struct __db *, |
891 |
+ DBT *, const DBT *, u_int))) __dberr; |
892 |
+ dbp->seq = (int (*)__P((const struct __db *, |
893 |
+ DBT *, DBT *, u_int))) __dberr; |
894 |
+ dbp->sync = (int (*)__P((const struct __db *, u_int))) __dberr; |
895 |
+ dbp->fd = (int (*)__P((const struct __db *))) __dberr; |
896 |
} |
897 |
--- db.1.85/PORT/include/ndbm.h.jj Thu Jun 3 05:32:29 1993 |
898 |
+++ db.1.85/PORT/include/ndbm.h Wed Apr 19 17:56:12 2000 |
899 |
@@ -36,8 +36,8 @@ |
900 |
* @(#)ndbm.h 8.1 (Berkeley) 6/2/93 |
901 |
*/ |
902 |
|
903 |
-#ifndef _NDBM_H_ |
904 |
-#define _NDBM_H_ |
905 |
+#ifndef _NDBM_H |
906 |
+#define _NDBM_H 1 |
907 |
|
908 |
#include <db.h> |
909 |
|
910 |
@@ -72,6 +72,8 @@ datum dbm_nextkey __P((DBM *)); |
911 |
DBM *dbm_open __P((const char *, int, int)); |
912 |
int dbm_store __P((DBM *, datum, datum, int)); |
913 |
int dbm_dirfno __P((DBM *)); |
914 |
+int dbm_error __P((DBM *)); |
915 |
+int dbm_clearerr __P((DBM *)); |
916 |
__END_DECLS |
917 |
|
918 |
-#endif /* !_NDBM_H_ */ |
919 |
+#endif /* ndbm.h */ |
920 |
--- db.1.85/PORT/linux/include/compat.h.jj Tue Jun 21 00:13:19 1994 |
921 |
+++ db.1.85/PORT/linux/include/compat.h Wed Apr 19 17:56:12 2000 |
922 |
@@ -1,155 +1,9 @@ |
923 |
-/*- |
924 |
- * Copyright (c) 1991, 1993 |
925 |
- * The Regents of the University of California. All rights reserved. |
926 |
- * |
927 |
- * Redistribution and use in source and binary forms, with or without |
928 |
- * modification, are permitted provided that the following conditions |
929 |
- * are met: |
930 |
- * 1. Redistributions of source code must retain the above copyright |
931 |
- * notice, this list of conditions and the following disclaimer. |
932 |
- * 2. Redistributions in binary form must reproduce the above copyright |
933 |
- * notice, this list of conditions and the following disclaimer in the |
934 |
- * documentation and/or other materials provided with the distribution. |
935 |
- * 3. All advertising materials mentioning features or use of this software |
936 |
- * must display the following acknowledgement: |
937 |
- * This product includes software developed by the University of |
938 |
- * California, Berkeley and its contributors. |
939 |
- * 4. Neither the name of the University nor the names of its contributors |
940 |
- * may be used to endorse or promote products derived from this software |
941 |
- * without specific prior written permission. |
942 |
- * |
943 |
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
944 |
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
945 |
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
946 |
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
947 |
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
948 |
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
949 |
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
950 |
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
951 |
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
952 |
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
953 |
- * SUCH DAMAGE. |
954 |
- * |
955 |
- * @(#)compat.h 8.13 (Berkeley) 2/21/94 |
956 |
- */ |
957 |
- |
958 |
-#ifndef _COMPAT_H_ |
959 |
-#define _COMPAT_H_ |
960 |
+/* Values for building 4.4 BSD db routines in the GNU C library. */ |
961 |
|
962 |
-#include <sys/types.h> |
963 |
+#ifndef _compat_h_ |
964 |
+#define _compat_h_ |
965 |
|
966 |
-/* |
967 |
- * If your system doesn't typedef u_long, u_short, or u_char, change |
968 |
- * the 0 to a 1. |
969 |
- */ |
970 |
-#if 0 |
971 |
-typedef unsigned char u_char; /* 4.[34]BSD names. */ |
972 |
-typedef unsigned int u_int; |
973 |
-typedef unsigned long u_long; |
974 |
-typedef unsigned short u_short; |
975 |
-#endif |
976 |
- |
977 |
-/* If your system doesn't typedef size_t, change the 0 to a 1. */ |
978 |
-#if 0 |
979 |
-typedef unsigned int size_t; /* POSIX, 4.[34]BSD names. */ |
980 |
-#endif |
981 |
- |
982 |
-/* If your system doesn't typedef ssize_t, change the 0 to a 1. */ |
983 |
-#if 0 |
984 |
-typedef int ssize_t; /* POSIX names. */ |
985 |
-#endif |
986 |
- |
987 |
-/* |
988 |
- * If your system doesn't have the POSIX type for a signal mask, |
989 |
- * change the 0 to a 1. |
990 |
- */ |
991 |
-#if 0 /* POSIX 1003.1 signal mask type. */ |
992 |
-typedef unsigned int sigset_t; |
993 |
-#endif |
994 |
- |
995 |
-/* |
996 |
- * If your system's vsprintf returns a char *, not an int, |
997 |
- * change the 0 to a 1. |
998 |
- */ |
999 |
-#if 0 |
1000 |
-#define VSPRINTF_CHARSTAR |
1001 |
-#endif |
1002 |
- |
1003 |
-/* |
1004 |
- * If you don't have POSIX 1003.1 signals, the signal code surrounding the |
1005 |
- * temporary file creation is intended to block all of the possible signals |
1006 |
- * long enough to create the file and unlink it. All of this stuff is |
1007 |
- * intended to use old-style BSD calls to fake POSIX 1003.1 calls. |
1008 |
- */ |
1009 |
-#ifdef NO_POSIX_SIGNALS |
1010 |
-#define sigemptyset(set) (*(set) = 0) |
1011 |
-#define sigfillset(set) (*(set) = ~(sigset_t)0, 0) |
1012 |
-#define sigaddset(set,signo) (*(set) |= sigmask(signo), 0) |
1013 |
-#define sigdelset(set,signo) (*(set) &= ~sigmask(signo), 0) |
1014 |
-#define sigismember(set,signo) ((*(set) & sigmask(signo)) != 0) |
1015 |
- |
1016 |
-#define SIG_BLOCK 1 |
1017 |
-#define SIG_UNBLOCK 2 |
1018 |
-#define SIG_SETMASK 3 |
1019 |
- |
1020 |
-static int __sigtemp; /* For the use of sigprocmask */ |
1021 |
- |
1022 |
-/* Repeated test of oset != NULL is to avoid "*0". */ |
1023 |
-#define sigprocmask(how, set, oset) \ |
1024 |
- ((__sigtemp = \ |
1025 |
- (((how) == SIG_BLOCK) ? \ |
1026 |
- sigblock(0) | *(set) : \ |
1027 |
- (((how) == SIG_UNBLOCK) ? \ |
1028 |
- sigblock(0) & ~(*(set)) : \ |
1029 |
- ((how) == SIG_SETMASK ? \ |
1030 |
- *(set) : sigblock(0))))), \ |
1031 |
- ((oset) ? (*(oset ? oset : set) = sigsetmask(__sigtemp)) : \ |
1032 |
- sigsetmask(__sigtemp)), 0) |
1033 |
-#endif |
1034 |
- |
1035 |
-/* |
1036 |
- * If your system doesn't have an include file with the appropriate |
1037 |
- * byte order set, make sure you specify the correct one. |
1038 |
- */ |
1039 |
-#ifndef BYTE_ORDER |
1040 |
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ |
1041 |
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */ |
1042 |
-#define BYTE_ORDER LITTLE_ENDIAN /* Set for your system. */ |
1043 |
-#endif |
1044 |
- |
1045 |
-#if defined(SYSV) || defined(SYSTEM5) |
1046 |
-#define index(a, b) strchr(a, b) |
1047 |
-#define rindex(a, b) strrchr(a, b) |
1048 |
-#define bzero(a, b) memset(a, 0, b) |
1049 |
-#define bcmp(a, b, n) memcmp(a, b, n) |
1050 |
-#define bcopy(a, b, n) memmove(b, a, n) |
1051 |
-#endif |
1052 |
- |
1053 |
-#if defined(BSD) || defined(BSD4_3) |
1054 |
-#define strchr(a, b) index(a, b) |
1055 |
-#define strrchr(a, b) rindex(a, b) |
1056 |
-#define memcmp(a, b, n) bcmp(a, b, n) |
1057 |
-#define memmove(a, b, n) bcopy(b, a, n) |
1058 |
-#endif |
1059 |
- |
1060 |
-/* |
1061 |
- * 32-bit machine. The db routines are theoretically independent of |
1062 |
- * the size of u_shorts and u_longs, but I don't know that anyone has |
1063 |
- * ever actually tried it. At a minimum, change the following #define's |
1064 |
- * if you are trying to compile on a different type of system. |
1065 |
- */ |
1066 |
-#ifndef USHRT_MAX |
1067 |
-#define USHRT_MAX 0xFFFF |
1068 |
-#define ULONG_MAX 0xFFFFFFFF |
1069 |
-#endif |
1070 |
- |
1071 |
-#ifndef O_ACCMODE /* POSIX 1003.1 access mode mask. */ |
1072 |
-#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) |
1073 |
-#endif |
1074 |
- |
1075 |
-#ifndef _POSIX2_RE_DUP_MAX /* POSIX 1003.2 RE limit. */ |
1076 |
-#define _POSIX2_RE_DUP_MAX 255 |
1077 |
-#endif |
1078 |
+#include <fcntl.h> |
1079 |
|
1080 |
/* |
1081 |
* If you can't provide lock values in the open(2) call. Note, this |
1082 |
@@ -163,41 +17,26 @@ static int __sigtemp; /* For the use of |
1083 |
#define O_SHLOCK 0 |
1084 |
#endif |
1085 |
|
1086 |
+#include <errno.h> |
1087 |
+ |
1088 |
#ifndef EFTYPE |
1089 |
#define EFTYPE EINVAL /* POSIX 1003.1 format errno. */ |
1090 |
#endif |
1091 |
|
1092 |
-#ifndef WCOREDUMP /* 4.4BSD extension */ |
1093 |
-#define WCOREDUMP(a) 0 |
1094 |
-#endif |
1095 |
- |
1096 |
-#ifndef STDERR_FILENO |
1097 |
-#define STDIN_FILENO 0 /* ANSI C #defines */ |
1098 |
-#define STDOUT_FILENO 1 |
1099 |
-#define STDERR_FILENO 2 |
1100 |
-#endif |
1101 |
- |
1102 |
-#ifndef SEEK_END |
1103 |
-#define SEEK_SET 0 /* POSIX 1003.1 seek values */ |
1104 |
-#define SEEK_CUR 1 |
1105 |
-#define SEEK_END 2 |
1106 |
-#endif |
1107 |
+#include <unistd.h> |
1108 |
+#include <limits.h> |
1109 |
|
1110 |
#ifndef _POSIX_VDISABLE /* POSIX 1003.1 disabling char. */ |
1111 |
#define _POSIX_VDISABLE 0 /* Some systems used 0. */ |
1112 |
#endif |
1113 |
|
1114 |
+#include <termios.h> |
1115 |
+ |
1116 |
#ifndef TCSASOFT /* 4.4BSD extension. */ |
1117 |
#define TCSASOFT 0 |
1118 |
#endif |
1119 |
|
1120 |
-#ifndef _POSIX2_RE_DUP_MAX /* POSIX 1003.2 values. */ |
1121 |
-#define _POSIX2_RE_DUP_MAX 255 |
1122 |
-#endif |
1123 |
- |
1124 |
-#ifndef NULL /* ANSI C #defines NULL everywhere. */ |
1125 |
-#define NULL 0 |
1126 |
-#endif |
1127 |
+#include <sys/param.h> |
1128 |
|
1129 |
#ifndef MAX /* Usually found in <sys/param.h>. */ |
1130 |
#define MAX(_a,_b) ((_a)<(_b)?(_b):(_a)) |
1131 |
@@ -206,26 +45,5 @@ static int __sigtemp; /* For the use of |
1132 |
#define MIN(_a,_b) ((_a)<(_b)?(_a):(_b)) |
1133 |
#endif |
1134 |
|
1135 |
-/* Default file permissions. */ |
1136 |
-#ifndef DEFFILEMODE /* 4.4BSD extension. */ |
1137 |
-#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) |
1138 |
-#endif |
1139 |
- |
1140 |
-#ifndef S_ISDIR /* POSIX 1003.1 file type tests. */ |
1141 |
-#define S_ISDIR(m) ((m & 0170000) == 0040000) /* directory */ |
1142 |
-#define S_ISCHR(m) ((m & 0170000) == 0020000) /* char special */ |
1143 |
-#define S_ISBLK(m) ((m & 0170000) == 0060000) /* block special */ |
1144 |
-#define S_ISREG(m) ((m & 0170000) == 0100000) /* regular file */ |
1145 |
-#define S_ISFIFO(m) ((m & 0170000) == 0010000) /* fifo */ |
1146 |
-#endif |
1147 |
-#ifndef S_ISLNK /* BSD POSIX 1003.1 extensions */ |
1148 |
-#define S_ISLNK(m) ((m & 0170000) == 0120000) /* symbolic link */ |
1149 |
-#define S_ISSOCK(m) ((m & 0170000) == 0140000) /* socket */ |
1150 |
-#endif |
1151 |
- |
1152 |
-/* The type of a va_list. */ |
1153 |
-#ifndef _BSD_VA_LIST_ /* 4.4BSD #define. */ |
1154 |
-#define _BSD_VA_LIST_ char * |
1155 |
-#endif |
1156 |
|
1157 |
-#endif /* !_COMPAT_H_ */ |
1158 |
+#endif /* compat.h */ |
1159 |
--- db.1.85/PORT/linux/Makefile.jj Thu Jul 14 03:43:16 1994 |
1160 |
+++ db.1.85/PORT/linux/Makefile Thu Apr 20 08:54:43 2000 |
1161 |
@@ -1,8 +1,16 @@ |
1162 |
# @(#)Makefile 8.9 (Berkeley) 7/14/94 |
1163 |
|
1164 |
LIBDB= libdb.a |
1165 |
+ARCH=$(shell uname -m) |
1166 |
+ifeq ($(ARCH),alpha) |
1167 |
+SOVER=2.1 |
1168 |
+else |
1169 |
+SOVER=2 |
1170 |
+endif |
1171 |
+LIBDBSO=libdb.so.$(SOVER) |
1172 |
+PROG= db_dump185 |
1173 |
OBJ1= hash.o hash_bigkey.o hash_buf.o hash_func.o hash_log2.o hash_page.o \ |
1174 |
- hsearch.o ndbm.o |
1175 |
+ ndbm.o |
1176 |
OBJ2= bt_close.o bt_conv.o bt_debug.o bt_delete.o bt_get.o bt_open.o \ |
1177 |
bt_overflow.o bt_page.o bt_put.o bt_search.o bt_seq.o bt_split.o \ |
1178 |
bt_utils.o |
1179 |
@@ -10,93 +18,49 @@ OBJ3= db.o |
1180 |
OBJ4= mpool.o |
1181 |
OBJ5= rec_close.o rec_delete.o rec_get.o rec_open.o rec_put.o rec_search.o \ |
1182 |
rec_seq.o rec_utils.o |
1183 |
+MISC= |
1184 |
+OBJS= $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5) $(MISC) |
1185 |
+SHOBJS= $(patsubst %.o,%.os,$(OBJS)) |
1186 |
|
1187 |
-MISC= snprintf.o |
1188 |
+all: $(LIBDB) $(LIBDBSO) $(PROG) |
1189 |
|
1190 |
-${LIBDB}: ${OBJ1} ${OBJ2} ${OBJ3} ${OBJ4} ${OBJ5} ${MISC} |
1191 |
+$(LIBDB): $(OBJS) |
1192 |
rm -f $@ |
1193 |
- ar cq $@ \ |
1194 |
- `lorder ${OBJ1} ${OBJ2} ${OBJ3} ${OBJ4} ${OBJ5} ${MISC} | tsort` |
1195 |
+ ar cq $@ $(OBJS) |
1196 |
ranlib $@ |
1197 |
|
1198 |
-clean: |
1199 |
- rm -f ${LIBDB} ${OBJ1} ${OBJ2} ${OBJ3} ${OBJ4} ${OBJ5} ${MISC} |
1200 |
+$(LIBDBSO): $(SHOBJS) |
1201 |
+ $(CC) -Wl,-O1 -Wl,--version-script=libdb.map -Wl,-soname=$(LIBDBSO) -shared -o $@ $^ |
1202 |
+ ln -sf $@ libdb.so |
1203 |
|
1204 |
-OORG= -O |
1205 |
-CL= ${CC} -c -D__DBINTERFACE_PRIVATE ${OORG} -I. -Iinclude |
1206 |
+$(PROG): db_dump185.o $(LIBDBSO) |
1207 |
+ $(CC) -o $@ db_dump185.o -L. -ldb |
1208 |
|
1209 |
-hash.o: ../../hash/hash.c |
1210 |
- ${CL} -I../../hash ../../hash/hash.c |
1211 |
-hash_bigkey.o: ../../hash/hash_bigkey.c |
1212 |
- ${CL} -I../../hash ../../hash/hash_bigkey.c |
1213 |
-hash_buf.o: ../../hash/hash_buf.c |
1214 |
- ${CL} -I../../hash ../../hash/hash_buf.c |
1215 |
-hash_func.o: ../../hash/hash_func.c |
1216 |
- ${CL} -I../../hash ../../hash/hash_func.c |
1217 |
-hash_log2.o: ../../hash/hash_log2.c |
1218 |
- ${CL} -I../../hash ../../hash/hash_log2.c |
1219 |
-hash_page.o: ../../hash/hash_page.c |
1220 |
- ${CL} -I../../hash ../../hash/hash_page.c |
1221 |
-hsearch.o: ../../hash/hsearch.c |
1222 |
- ${CL} -I../../hash ../../hash/hsearch.c |
1223 |
-ndbm.o: ../../hash/ndbm.c |
1224 |
- ${CL} -I../../hash ../../hash/ndbm.c |
1225 |
- |
1226 |
-bt_close.o: ../../btree/bt_close.c |
1227 |
- ${CL} -I../../btree ../../btree/bt_close.c |
1228 |
-bt_conv.o: ../../btree/bt_conv.c |
1229 |
- ${CL} -I../../btree ../../btree/bt_conv.c |
1230 |
-bt_debug.o: ../../btree/bt_debug.c |
1231 |
- ${CL} -I../../btree ../../btree/bt_debug.c |
1232 |
-bt_delete.o: ../../btree/bt_delete.c |
1233 |
- ${CL} -I../../btree ../../btree/bt_delete.c |
1234 |
-bt_get.o: ../../btree/bt_get.c |
1235 |
- ${CL} -I../../btree ../../btree/bt_get.c |
1236 |
-bt_open.o: ../../btree/bt_open.c |
1237 |
- ${CL} -I../../btree ../../btree/bt_open.c |
1238 |
-bt_overflow.o: ../../btree/bt_overflow.c |
1239 |
- ${CL} -I../../btree ../../btree/bt_overflow.c |
1240 |
-bt_page.o: ../../btree/bt_page.c |
1241 |
- ${CL} -I../../btree ../../btree/bt_page.c |
1242 |
-bt_put.o: ../../btree/bt_put.c |
1243 |
- ${CL} -I../../btree ../../btree/bt_put.c |
1244 |
-bt_search.o: ../../btree/bt_search.c |
1245 |
- ${CL} -I../../btree ../../btree/bt_search.c |
1246 |
-bt_seq.o: ../../btree/bt_seq.c |
1247 |
- ${CL} -I../../btree ../../btree/bt_seq.c |
1248 |
-bt_split.o: ../../btree/bt_split.c |
1249 |
- ${CL} -I../../btree ../../btree/bt_split.c |
1250 |
-bt_stack.o: ../../btree/bt_stack.c |
1251 |
- ${CL} -I../../btree ../../btree/bt_stack.c |
1252 |
-bt_utils.o: ../../btree/bt_utils.c |
1253 |
- ${CL} -I../../btree ../../btree/bt_utils.c |
1254 |
+clean: |
1255 |
+ rm -f $(LIBDB) $(LIBDBSO) $(OBJS) $(SHOBJS) |
1256 |
|
1257 |
-db.o: ../../db/db.c |
1258 |
- ${CL} ../../db/db.c |
1259 |
+OORG= -O2 |
1260 |
+CL= $(CC) -c -D__DBINTERFACE_PRIVATE $(OORG) -I. -Iinclude |
1261 |
|
1262 |
+db_dump185.o: db_dump185.c |
1263 |
+ $(CL) -o $@ $< |
1264 |
+%.o: ../../hash/%.c |
1265 |
+ $(CL) -I../../hash -g -o $@ $< |
1266 |
+%.os: ../../hash/%.c |
1267 |
+ $(CL) -I../../hash -fpic -o $@ $< |
1268 |
+%.o: ../../btree/%.c |
1269 |
+ $(CL) -I../../btree -g -o $@ $< |
1270 |
+%.os: ../../btree/%.c |
1271 |
+ $(CL) -I../../btree -fpic -o $@ $< |
1272 |
+db.o: ../../db/db.c |
1273 |
+ $(CL) -g -o $@ $< |
1274 |
+db.os: ../../db/db.c |
1275 |
+ $(CL) -fpic -o $@ $< |
1276 |
mpool.o: ../../mpool/mpool.c |
1277 |
- ${CL} -I../../mpool ../../mpool/mpool.c |
1278 |
- |
1279 |
-rec_close.o: ../../recno/rec_close.c |
1280 |
- ${CL} -I../../recno ../../recno/rec_close.c |
1281 |
-rec_delete.o: ../../recno/rec_delete.c |
1282 |
- ${CL} -I../../recno ../../recno/rec_delete.c |
1283 |
-rec_get.o: ../../recno/rec_get.c |
1284 |
- ${CL} -I../../recno ../../recno/rec_get.c |
1285 |
-rec_open.o: ../../recno/rec_open.c |
1286 |
- ${CL} -I../../recno ../../recno/rec_open.c |
1287 |
-rec_put.o: ../../recno/rec_put.c |
1288 |
- ${CL} -I../../recno ../../recno/rec_put.c |
1289 |
-rec_search.o: ../../recno/rec_search.c |
1290 |
- ${CL} -I../../recno ../../recno/rec_search.c |
1291 |
-rec_seq.o: ../../recno/rec_seq.c |
1292 |
- ${CL} -I../../recno ../../recno/rec_seq.c |
1293 |
-rec_utils.o: ../../recno/rec_utils.c |
1294 |
- ${CL} -I../../recno ../../recno/rec_utils.c |
1295 |
- |
1296 |
-memmove.o: |
1297 |
- ${CC} -DMEMMOVE -c -O -I. -Iinclude clib/memmove.c |
1298 |
-mktemp.o: |
1299 |
- ${CC} -c -O -I. -Iinclude clib/mktemp.c |
1300 |
-snprintf.o: |
1301 |
- ${CC} -c -O -I. -Iinclude clib/snprintf.c |
1302 |
+ $(CL) -g -o $@ $< |
1303 |
+mpool.os: ../../mpool/mpool.c |
1304 |
+ $(CL) -fpic -o $@ $< |
1305 |
+%.o: ../../recno/%.c |
1306 |
+ $(CL) -I../../recno -g -o $@ $< |
1307 |
+%.os: ../../recno/%.c |
1308 |
+ $(CL) -I../../recno -fpic -o $@ $< |
1309 |
--- db.1.85/PORT/linux/libdb.map.jj Wed Apr 19 17:56:12 2000 |
1310 |
+++ db.1.85/PORT/linux/libdb.map Wed Apr 19 17:56:12 2000 |
1311 |
@@ -0,0 +1,11 @@ |
1312 |
+GLIBC_2.0 { |
1313 |
+ global: |
1314 |
+ # the real DB entry point. |
1315 |
+ dbopen; __dbopen; |
1316 |
+ |
1317 |
+ # The compatibility functions. |
1318 |
+ dbm_clearerr; dbm_close; dbm_delete; dbm_dirfno; dbm_error; |
1319 |
+ dbm_fetch; dbm_firstkey; dbm_nextkey; dbm_open; dbm_store; |
1320 |
+ local: |
1321 |
+ *; |
1322 |
+}; |
1323 |
--- db.1.85/PORT/linux/db_dump185.c.jj Thu Apr 20 08:49:24 2000 |
1324 |
+++ db.1.85/PORT/linux/db_dump185.c Thu Apr 20 08:50:25 2000 |
1325 |
@@ -0,0 +1,350 @@ |
1326 |
+/*- |
1327 |
+ * See the file LICENSE for redistribution information. |
1328 |
+ * |
1329 |
+ * Copyright (c) 1996, 1997, 1998 |
1330 |
+ * Sleepycat Software. All rights reserved. |
1331 |
+ */ |
1332 |
+ |
1333 |
+#ifndef lint |
1334 |
+static const char copyright[] = |
1335 |
+"@(#) Copyright (c) 1996, 1997, 1998\n\ |
1336 |
+ Sleepycat Software Inc. All rights reserved.\n"; |
1337 |
+static const char sccsid[] = "@(#)db_dump185.c 10.10 (Sleepycat) 4/10/98"; |
1338 |
+#endif |
1339 |
+ |
1340 |
+#ifndef NO_SYSTEM_INCLUDES |
1341 |
+#include <sys/types.h> |
1342 |
+ |
1343 |
+#include <ctype.h> |
1344 |
+#include <errno.h> |
1345 |
+#include <fcntl.h> |
1346 |
+#include <stdlib.h> |
1347 |
+#include <stdio.h> |
1348 |
+#include <string.h> |
1349 |
+#include <unistd.h> |
1350 |
+#endif |
1351 |
+ |
1352 |
+#include "db.h" |
1353 |
+ |
1354 |
+/* Hash Table Information */ |
1355 |
+typedef struct hashhdr185 { /* Disk resident portion */ |
1356 |
+ int magic; /* Magic NO for hash tables */ |
1357 |
+ int version; /* Version ID */ |
1358 |
+ u_int32_t lorder; /* Byte Order */ |
1359 |
+ int bsize; /* Bucket/Page Size */ |
1360 |
+ int bshift; /* Bucket shift */ |
1361 |
+ int dsize; /* Directory Size */ |
1362 |
+ int ssize; /* Segment Size */ |
1363 |
+ int sshift; /* Segment shift */ |
1364 |
+ int ovfl_point; /* Where overflow pages are being |
1365 |
+ * allocated */ |
1366 |
+ int last_freed; /* Last overflow page freed */ |
1367 |
+ int max_bucket; /* ID of Maximum bucket in use */ |
1368 |
+ int high_mask; /* Mask to modulo into entire table */ |
1369 |
+ int low_mask; /* Mask to modulo into lower half of |
1370 |
+ * table */ |
1371 |
+ int ffactor; /* Fill factor */ |
1372 |
+ int nkeys; /* Number of keys in hash table */ |
1373 |
+} HASHHDR185; |
1374 |
+typedef struct htab185 { /* Memory resident data structure */ |
1375 |
+ HASHHDR185 hdr; /* Header */ |
1376 |
+} HTAB185; |
1377 |
+ |
1378 |
+/* Hash Table Information */ |
1379 |
+typedef struct hashhdr186 { /* Disk resident portion */ |
1380 |
+ int32_t magic; /* Magic NO for hash tables */ |
1381 |
+ int32_t version; /* Version ID */ |
1382 |
+ int32_t lorder; /* Byte Order */ |
1383 |
+ int32_t bsize; /* Bucket/Page Size */ |
1384 |
+ int32_t bshift; /* Bucket shift */ |
1385 |
+ int32_t ovfl_point; /* Where overflow pages are being allocated */ |
1386 |
+ int32_t last_freed; /* Last overflow page freed */ |
1387 |
+ int32_t max_bucket; /* ID of Maximum bucket in use */ |
1388 |
+ int32_t high_mask; /* Mask to modulo into entire table */ |
1389 |
+ int32_t low_mask; /* Mask to modulo into lower half of table */ |
1390 |
+ int32_t ffactor; /* Fill factor */ |
1391 |
+ int32_t nkeys; /* Number of keys in hash table */ |
1392 |
+ int32_t hdrpages; /* Size of table header */ |
1393 |
+ int32_t h_charkey; /* value of hash(CHARKEY) */ |
1394 |
+#define NCACHED 32 /* number of bit maps and spare points */ |
1395 |
+ int32_t spares[NCACHED];/* spare pages for overflow */ |
1396 |
+ u_int16_t bitmaps[NCACHED]; /* address of overflow page bitmaps */ |
1397 |
+} HASHHDR186; |
1398 |
+typedef struct htab186 { /* Memory resident data structure */ |
1399 |
+ HASHHDR186 hdr; /* Header */ |
1400 |
+} HTAB186; |
1401 |
+ |
1402 |
+typedef struct _epgno { |
1403 |
+ u_int32_t pgno; /* the page number */ |
1404 |
+ u_int16_t index; /* the index on the page */ |
1405 |
+} EPGNO; |
1406 |
+ |
1407 |
+typedef struct _epg { |
1408 |
+ void *page; /* the (pinned) page */ |
1409 |
+ u_int16_t index; /* the index on the page */ |
1410 |
+} EPG; |
1411 |
+ |
1412 |
+typedef struct _cursor { |
1413 |
+ EPGNO pg; /* B: Saved tree reference. */ |
1414 |
+ DBT key; /* B: Saved key, or key.data == NULL. */ |
1415 |
+ u_int32_t rcursor; /* R: recno cursor (1-based) */ |
1416 |
+ |
1417 |
+#define CURS_ACQUIRE 0x01 /* B: Cursor needs to be reacquired. */ |
1418 |
+#define CURS_AFTER 0x02 /* B: Unreturned cursor after key. */ |
1419 |
+#define CURS_BEFORE 0x04 /* B: Unreturned cursor before key. */ |
1420 |
+#define CURS_INIT 0x08 /* RB: Cursor initialized. */ |
1421 |
+ u_int8_t flags; |
1422 |
+} CURSOR; |
1423 |
+ |
1424 |
+/* The in-memory btree/recno data structure. */ |
1425 |
+typedef struct _btree { |
1426 |
+ void *bt_mp; /* memory pool cookie */ |
1427 |
+ |
1428 |
+ void *bt_dbp; /* pointer to enclosing DB */ |
1429 |
+ |
1430 |
+ EPG bt_cur; /* current (pinned) page */ |
1431 |
+ void *bt_pinned; /* page pinned across calls */ |
1432 |
+ |
1433 |
+ CURSOR bt_cursor; /* cursor */ |
1434 |
+ |
1435 |
+ EPGNO bt_stack[50]; /* stack of parent pages */ |
1436 |
+ EPGNO *bt_sp; /* current stack pointer */ |
1437 |
+ |
1438 |
+ DBT bt_rkey; /* returned key */ |
1439 |
+ DBT bt_rdata; /* returned data */ |
1440 |
+ |
1441 |
+ int bt_fd; /* tree file descriptor */ |
1442 |
+ |
1443 |
+ u_int32_t bt_free; /* next free page */ |
1444 |
+ u_int32_t bt_psize; /* page size */ |
1445 |
+ u_int16_t bt_ovflsize; /* cut-off for key/data overflow */ |
1446 |
+ int bt_lorder; /* byte order */ |
1447 |
+ /* sorted order */ |
1448 |
+ enum { NOT, BACK, FORWARD } bt_order; |
1449 |
+ EPGNO bt_last; /* last insert */ |
1450 |
+ |
1451 |
+ /* B: key comparison function */ |
1452 |
+ int (*bt_cmp) __P((const DBT *, const DBT *)); |
1453 |
+ /* B: prefix comparison function */ |
1454 |
+ size_t (*bt_pfx) __P((const DBT *, const DBT *)); |
1455 |
+ /* R: recno input function */ |
1456 |
+ int (*bt_irec) __P((struct _btree *, u_int32_t)); |
1457 |
+ |
1458 |
+ FILE *bt_rfp; /* R: record FILE pointer */ |
1459 |
+ int bt_rfd; /* R: record file descriptor */ |
1460 |
+ |
1461 |
+ void *bt_cmap; /* R: current point in mapped space */ |
1462 |
+ void *bt_smap; /* R: start of mapped space */ |
1463 |
+ void *bt_emap; /* R: end of mapped space */ |
1464 |
+ size_t bt_msize; /* R: size of mapped region. */ |
1465 |
+ |
1466 |
+ u_int32_t bt_nrecs; /* R: number of records */ |
1467 |
+ size_t bt_reclen; /* R: fixed record length */ |
1468 |
+ u_char bt_bval; /* R: delimiting byte/pad character */ |
1469 |
+ |
1470 |
+/* |
1471 |
+ * NB: |
1472 |
+ * B_NODUPS and R_RECNO are stored on disk, and may not be changed. |
1473 |
+ */ |
1474 |
+#define B_INMEM 0x00001 /* in-memory tree */ |
1475 |
+#define B_METADIRTY 0x00002 /* need to write metadata */ |
1476 |
+#define B_MODIFIED 0x00004 /* tree modified */ |
1477 |
+#define B_NEEDSWAP 0x00008 /* if byte order requires swapping */ |
1478 |
+#define B_RDONLY 0x00010 /* read-only tree */ |
1479 |
+ |
1480 |
+#define B_NODUPS 0x00020 /* no duplicate keys permitted */ |
1481 |
+#define R_RECNO 0x00080 /* record oriented tree */ |
1482 |
+ |
1483 |
+#define R_CLOSEFP 0x00040 /* opened a file pointer */ |
1484 |
+#define R_EOF 0x00100 /* end of input file reached. */ |
1485 |
+#define R_FIXLEN 0x00200 /* fixed length records */ |
1486 |
+#define R_MEMMAPPED 0x00400 /* memory mapped file. */ |
1487 |
+#define R_INMEM 0x00800 /* in-memory file */ |
1488 |
+#define R_MODIFIED 0x01000 /* modified file */ |
1489 |
+#define R_RDONLY 0x02000 /* read-only file */ |
1490 |
+ |
1491 |
+#define B_DB_LOCK 0x04000 /* DB_LOCK specified. */ |
1492 |
+#define B_DB_SHMEM 0x08000 /* DB_SHMEM specified. */ |
1493 |
+#define B_DB_TXN 0x10000 /* DB_TXN specified. */ |
1494 |
+ u_int32_t flags; |
1495 |
+} BTREE; |
1496 |
+ |
1497 |
+void db_btree __P((DB *, int)); |
1498 |
+void db_hash __P((DB *, int)); |
1499 |
+void dbt_dump __P((DBT *)); |
1500 |
+void dbt_print __P((DBT *)); |
1501 |
+int main __P((int, char *[])); |
1502 |
+void usage __P((void)); |
1503 |
+ |
1504 |
+const char |
1505 |
+ *progname = "db_dump185"; /* Program name. */ |
1506 |
+ |
1507 |
+int |
1508 |
+main(argc, argv) |
1509 |
+ int argc; |
1510 |
+ char *argv[]; |
1511 |
+{ |
1512 |
+ extern char *optarg; |
1513 |
+ extern int optind; |
1514 |
+ DB *dbp; |
1515 |
+ DBT key, data; |
1516 |
+ int ch, pflag, rval; |
1517 |
+ |
1518 |
+ pflag = 0; |
1519 |
+ while ((ch = getopt(argc, argv, "f:p")) != EOF) |
1520 |
+ switch (ch) { |
1521 |
+ case 'f': |
1522 |
+ if (freopen(optarg, "w", stdout) == NULL) |
1523 |
+ err(1, "%s", optarg); |
1524 |
+ break; |
1525 |
+ case 'p': |
1526 |
+ pflag = 1; |
1527 |
+ break; |
1528 |
+ case '?': |
1529 |
+ default: |
1530 |
+ usage(); |
1531 |
+ } |
1532 |
+ argc -= optind; |
1533 |
+ argv += optind; |
1534 |
+ |
1535 |
+ if (argc != 1) |
1536 |
+ usage(); |
1537 |
+ |
1538 |
+ if ((dbp = dbopen(argv[0], O_RDONLY, 0, DB_BTREE, NULL)) == NULL) { |
1539 |
+ if ((dbp = dbopen(argv[0], O_RDONLY, 0, DB_HASH, NULL)) == NULL) |
1540 |
+ err(1, "%s", argv[0]); |
1541 |
+ db_hash(dbp, pflag); |
1542 |
+ } else |
1543 |
+ db_btree(dbp, pflag); |
1544 |
+ |
1545 |
+ /* |
1546 |
+ * !!! |
1547 |
+ * DB 1.85 DBTs are a subset of DB 2.0 DBTs, so we just use the |
1548 |
+ * new dump/print routines. |
1549 |
+ */ |
1550 |
+ if (pflag) |
1551 |
+ while (!(rval = dbp->seq(dbp, &key, &data, R_NEXT))) { |
1552 |
+ dbt_print(&key); |
1553 |
+ dbt_print(&data); |
1554 |
+ } |
1555 |
+ else |
1556 |
+ while (!(rval = dbp->seq(dbp, &key, &data, R_NEXT))) { |
1557 |
+ dbt_dump(&key); |
1558 |
+ dbt_dump(&data); |
1559 |
+ } |
1560 |
+ |
1561 |
+ if (rval == -1) |
1562 |
+ err(1, "seq"); |
1563 |
+ return (0); |
1564 |
+} |
1565 |
+ |
1566 |
+/* |
1567 |
+ * db_hash -- |
1568 |
+ * Dump out hash header information. |
1569 |
+ */ |
1570 |
+void |
1571 |
+db_hash(dbp, pflag) |
1572 |
+ DB *dbp; |
1573 |
+ int pflag; |
1574 |
+{ |
1575 |
+ HTAB185 *hash185p; |
1576 |
+ HTAB186 *hash186p; |
1577 |
+ |
1578 |
+ printf("format=%s\n", pflag ? "print" : "bytevalue"); |
1579 |
+ printf("type=hash\n"); |
1580 |
+ |
1581 |
+ /* DB 1.85 was version 2, DB 1.86 was version 3. */ |
1582 |
+ hash185p = dbp->internal; |
1583 |
+ if (hash185p->hdr.version > 2) { |
1584 |
+ hash186p = dbp->internal; |
1585 |
+ printf("h_ffactor=%lu\n", (u_long)hash186p->hdr.ffactor); |
1586 |
+ if (hash186p->hdr.lorder != 0) |
1587 |
+ printf("db_lorder=%lu\n", (u_long)hash186p->hdr.lorder); |
1588 |
+ printf("db_pagesize=%lu\n", (u_long)hash186p->hdr.bsize); |
1589 |
+ } else { |
1590 |
+ printf("h_ffactor=%lu\n", (u_long)hash185p->hdr.ffactor); |
1591 |
+ if (hash185p->hdr.lorder != 0) |
1592 |
+ printf("db_lorder=%lu\n", (u_long)hash185p->hdr.lorder); |
1593 |
+ printf("db_pagesize=%lu\n", (u_long)hash185p->hdr.bsize); |
1594 |
+ } |
1595 |
+ printf("HEADER=END\n"); |
1596 |
+} |
1597 |
+ |
1598 |
+/* |
1599 |
+ * db_btree -- |
1600 |
+ * Dump out btree header information. |
1601 |
+ */ |
1602 |
+void |
1603 |
+db_btree(dbp, pflag) |
1604 |
+ DB *dbp; |
1605 |
+ int pflag; |
1606 |
+{ |
1607 |
+ BTREE *btp; |
1608 |
+ |
1609 |
+ btp = dbp->internal; |
1610 |
+ |
1611 |
+ printf("format=%s\n", pflag ? "print" : "bytevalue"); |
1612 |
+ printf("type=btree\n"); |
1613 |
+#ifdef NOT_AVAILABLE_IN_185 |
1614 |
+ printf("bt_minkey=%lu\n", (u_long)XXX); |
1615 |
+ printf("bt_maxkey=%lu\n", (u_long)XXX); |
1616 |
+#endif |
1617 |
+ if (btp->bt_lorder != 0) |
1618 |
+ printf("db_lorder=%lu\n", (u_long)btp->bt_lorder); |
1619 |
+ printf("db_pagesize=%lu\n", (u_long)btp->bt_psize); |
1620 |
+ if (!(btp->flags & B_NODUPS)) |
1621 |
+ printf("duplicates=1\n"); |
1622 |
+ printf("HEADER=END\n"); |
1623 |
+} |
1624 |
+ |
1625 |
+static char hex[] = "0123456789abcdef"; |
1626 |
+ |
1627 |
+/* |
1628 |
+ * dbt_dump -- |
1629 |
+ * Write out a key or data item using byte values. |
1630 |
+ */ |
1631 |
+void |
1632 |
+dbt_dump(dbtp) |
1633 |
+ DBT *dbtp; |
1634 |
+{ |
1635 |
+ size_t len; |
1636 |
+ u_int8_t *p; |
1637 |
+ |
1638 |
+ for (len = dbtp->size, p = dbtp->data; len--; ++p) |
1639 |
+ (void)printf("%c%c", |
1640 |
+ hex[(*p & 0xf0) >> 4], hex[*p & 0x0f]); |
1641 |
+ printf("\n"); |
1642 |
+} |
1643 |
+ |
1644 |
+/* |
1645 |
+ * dbt_print -- |
1646 |
+ * Write out a key or data item using printable characters. |
1647 |
+ */ |
1648 |
+void |
1649 |
+dbt_print(dbtp) |
1650 |
+ DBT *dbtp; |
1651 |
+{ |
1652 |
+ size_t len; |
1653 |
+ u_int8_t *p; |
1654 |
+ |
1655 |
+ for (len = dbtp->size, p = dbtp->data; len--; ++p) |
1656 |
+ if (isprint(*p)) { |
1657 |
+ if (*p == '\\') |
1658 |
+ (void)printf("\\"); |
1659 |
+ (void)printf("%c", *p); |
1660 |
+ } else |
1661 |
+ (void)printf("\\%c%c", |
1662 |
+ hex[(*p & 0xf0) >> 4], hex[*p & 0x0f]); |
1663 |
+ printf("\n"); |
1664 |
+} |
1665 |
+ |
1666 |
+/* |
1667 |
+ * usage -- |
1668 |
+ * Display the usage message. |
1669 |
+ */ |
1670 |
+void |
1671 |
+usage() |
1672 |
+{ |
1673 |
+ (void)fprintf(stderr, "usage: db_dump185 [-p] [-f file] db_file\n"); |
1674 |
+ exit(1); |
1675 |
+} |
1676 |
--- db.1.85/include/mpool.h.jj Thu Jul 14 03:33:26 1994 |
1677 |
+++ db.1.85/include/mpool.h Wed Apr 19 17:56:12 2000 |
1678 |
@@ -33,6 +33,9 @@ |
1679 |
* @(#)mpool.h 8.2 (Berkeley) 7/14/94 |
1680 |
*/ |
1681 |
|
1682 |
+#ifndef _MPOOL_H |
1683 |
+#define _MPOOL_H 1 |
1684 |
+ |
1685 |
#include <sys/queue.h> |
1686 |
|
1687 |
/* |
1688 |
@@ -67,9 +70,9 @@ typedef struct MPOOL { |
1689 |
u_long pagesize; /* file page size */ |
1690 |
int fd; /* file descriptor */ |
1691 |
/* page in conversion routine */ |
1692 |
- void (*pgin) __P((void *, pgno_t, void *)); |
1693 |
+ void (*pgin) __PMT((void *, pgno_t, void *)); |
1694 |
/* page out conversion routine */ |
1695 |
- void (*pgout) __P((void *, pgno_t, void *)); |
1696 |
+ void (*pgout) __PMT((void *, pgno_t, void *)); |
1697 |
void *pgcookie; /* cookie for page in/out routines */ |
1698 |
#ifdef STATISTICS |
1699 |
u_long cachehit; |
1700 |
@@ -85,15 +88,25 @@ typedef struct MPOOL { |
1701 |
} MPOOL; |
1702 |
|
1703 |
__BEGIN_DECLS |
1704 |
+MPOOL *__mpool_open __P((void *, int, pgno_t, pgno_t)); |
1705 |
MPOOL *mpool_open __P((void *, int, pgno_t, pgno_t)); |
1706 |
+void __mpool_filter __P((MPOOL *, void (*)(void *, pgno_t, void *), |
1707 |
+ void (*)(void *, pgno_t, void *), void *)); |
1708 |
void mpool_filter __P((MPOOL *, void (*)(void *, pgno_t, void *), |
1709 |
void (*)(void *, pgno_t, void *), void *)); |
1710 |
+void *__mpool_new __P((MPOOL *, pgno_t *)); |
1711 |
void *mpool_new __P((MPOOL *, pgno_t *)); |
1712 |
+void *__mpool_get __P((MPOOL *, pgno_t, u_int)); |
1713 |
void *mpool_get __P((MPOOL *, pgno_t, u_int)); |
1714 |
+int __mpool_put __P((MPOOL *, void *, u_int)); |
1715 |
int mpool_put __P((MPOOL *, void *, u_int)); |
1716 |
+int __mpool_sync __P((MPOOL *)); |
1717 |
int mpool_sync __P((MPOOL *)); |
1718 |
+int __mpool_close __P((MPOOL *)); |
1719 |
int mpool_close __P((MPOOL *)); |
1720 |
#ifdef STATISTICS |
1721 |
void mpool_stat __P((MPOOL *)); |
1722 |
#endif |
1723 |
__END_DECLS |
1724 |
+ |
1725 |
+#endif /* mpool.h */ |
1726 |
--- db.1.85/include/db.h.jj Tue Jun 21 21:59:28 1994 |
1727 |
+++ db.1.85/include/db.h Wed Apr 19 17:56:12 2000 |
1728 |
@@ -33,8 +33,8 @@ |
1729 |
* @(#)db.h 8.7 (Berkeley) 6/16/94 |
1730 |
*/ |
1731 |
|
1732 |
-#ifndef _DB_H_ |
1733 |
-#define _DB_H_ |
1734 |
+#ifndef _DB_H |
1735 |
+#define _DB_H 1 |
1736 |
|
1737 |
#include <sys/types.h> |
1738 |
#include <sys/cdefs.h> |
1739 |
@@ -117,14 +117,14 @@ typedef enum { DB_BTREE, DB_HASH, DB_REC |
1740 |
/* Access method description structure. */ |
1741 |
typedef struct __db { |
1742 |
DBTYPE type; /* Underlying db type. */ |
1743 |
- int (*close) __P((struct __db *)); |
1744 |
- int (*del) __P((const struct __db *, const DBT *, u_int)); |
1745 |
- int (*get) __P((const struct __db *, const DBT *, DBT *, u_int)); |
1746 |
- int (*put) __P((const struct __db *, DBT *, const DBT *, u_int)); |
1747 |
- int (*seq) __P((const struct __db *, DBT *, DBT *, u_int)); |
1748 |
- int (*sync) __P((const struct __db *, u_int)); |
1749 |
+ int (*close) __PMT((struct __db *)); |
1750 |
+ int (*del) __PMT((const struct __db *, const DBT *, u_int)); |
1751 |
+ int (*get) __PMT((const struct __db *, const DBT *, DBT *, u_int)); |
1752 |
+ int (*put) __PMT((const struct __db *, DBT *, const DBT *, u_int)); |
1753 |
+ int (*seq) __PMT((const struct __db *, DBT *, DBT *, u_int)); |
1754 |
+ int (*sync) __PMT((const struct __db *, u_int)); |
1755 |
void *internal; /* Access method private. */ |
1756 |
- int (*fd) __P((const struct __db *)); |
1757 |
+ int (*fd) __PMT((const struct __db *)); |
1758 |
} DB; |
1759 |
|
1760 |
#define BTREEMAGIC 0x053162 |
1761 |
@@ -139,9 +139,9 @@ typedef struct { |
1762 |
int minkeypage; /* minimum keys per page */ |
1763 |
u_int psize; /* page size */ |
1764 |
int (*compare) /* comparison function */ |
1765 |
- __P((const DBT *, const DBT *)); |
1766 |
+ __PMT((const DBT *, const DBT *)); |
1767 |
size_t (*prefix) /* prefix function */ |
1768 |
- __P((const DBT *, const DBT *)); |
1769 |
+ __PMT((const DBT *, const DBT *)); |
1770 |
int lorder; /* byte order */ |
1771 |
} BTREEINFO; |
1772 |
|
1773 |
@@ -155,7 +155,7 @@ typedef struct { |
1774 |
u_int nelem; /* number of elements */ |
1775 |
u_int cachesize; /* bytes to cache */ |
1776 |
u_int32_t /* hash function */ |
1777 |
- (*hash) __P((const void *, size_t)); |
1778 |
+ (*hash) __PMT((const void *, size_t)); |
1779 |
int lorder; /* byte order */ |
1780 |
} HASHINFO; |
1781 |
|
1782 |
@@ -224,6 +224,7 @@ typedef struct { |
1783 |
#endif |
1784 |
|
1785 |
__BEGIN_DECLS |
1786 |
+DB *__dbopen __P((const char *, int, int, DBTYPE, const void *)); |
1787 |
DB *dbopen __P((const char *, int, int, DBTYPE, const void *)); |
1788 |
|
1789 |
#ifdef __DBINTERFACE_PRIVATE |
1790 |
@@ -233,4 +234,5 @@ DB *__rec_open __P((const char *, int, i |
1791 |
void __dbpanic __P((DB *dbp)); |
1792 |
#endif |
1793 |
__END_DECLS |
1794 |
-#endif /* !_DB_H_ */ |
1795 |
+ |
1796 |
+#endif /* db.h */ |