SYN SYN
[p5sagit/p5-mst-13.2.git] / ext / SDBM_File / sdbm / dbm.c
CommitLineData
463ee0b2 1/*
2 * Copyright (c) 1985 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
22d4bb9c 6 * provided that the above copyright notice and this notice are
7 * duplicated in all such forms.
8 *
9 * [additional clause stricken -- see below]
10 *
11 * The name of the University may not be used to endorse or promote
12 * products derived from this software without specific prior written
13 * permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE.
17 *
18 * This notice previously contained the additional clause:
19 *
20 * and that any documentation, advertising materials, and other
21 * materials related to such distribution and use acknowledge that
22 * the software was developed by the University of California,
23 * Berkeley.
24 *
25 * Pursuant to the licensing change made by the Office of Technology
26 * Licensing of the University of California, Berkeley on July 22,
27 * 1999 and documented in:
28 *
29 * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
30 *
31 * this clause has been stricken and no longer is applicable to this
32 * software.
463ee0b2 33 */
34
35#ifndef lint
36static char sccsid[] = "@(#)dbm.c 5.4 (Berkeley) 5/24/89";
37#endif /* not lint */
38
39#include "dbm.h"
40
41#define NODB ((DBM *)0)
42
43static DBM *cur_db = NODB;
44
45static char no_db[] = "dbm: no open database\n";
46
ba106d47 47int
48dbminit(char *file)
463ee0b2 49{
50 if (cur_db != NODB)
51 dbm_close(cur_db);
52
53 cur_db = dbm_open(file, 2, 0);
54 if (cur_db == NODB) {
55 cur_db = dbm_open(file, 0, 0);
56 if (cur_db == NODB)
57 return (-1);
58 }
59 return (0);
60}
61
62long
ba106d47 63forder(datum key)
463ee0b2 64{
65 if (cur_db == NODB) {
66 printf(no_db);
67 return (0L);
68 }
69 return (dbm_forder(cur_db, key));
70}
71
72datum
ba106d47 73fetch(datum key)
463ee0b2 74{
75 datum item;
76
77 if (cur_db == NODB) {
78 printf(no_db);
79 item.dptr = 0;
80 return (item);
81 }
82 return (dbm_fetch(cur_db, key));
83}
84
ba106d47 85int
86delete(datum key)
463ee0b2 87{
88 if (cur_db == NODB) {
89 printf(no_db);
90 return (-1);
91 }
92 if (dbm_rdonly(cur_db))
93 return (-1);
94 return (dbm_delete(cur_db, key));
95}
96
ba106d47 97int
98store(datum key, datum dat)
463ee0b2 99{
100 if (cur_db == NODB) {
101 printf(no_db);
102 return (-1);
103 }
104 if (dbm_rdonly(cur_db))
105 return (-1);
106
107 return (dbm_store(cur_db, key, dat, DBM_REPLACE));
108}
109
110datum
ba106d47 111firstkey(void)
463ee0b2 112{
113 datum item;
114
115 if (cur_db == NODB) {
116 printf(no_db);
117 item.dptr = 0;
118 return (item);
119 }
120 return (dbm_firstkey(cur_db));
121}
122
123datum
ba106d47 124nextkey(datum key)
463ee0b2 125{
126 datum item;
127
128 if (cur_db == NODB) {
129 printf(no_db);
130 item.dptr = 0;
131 return (item);
132 }
133 return (dbm_nextkey(cur_db, key));
134}