xref: /csrg-svn/old/libndbm/dbm.c (revision 23760)
1 #ifndef lint
2 static char sccsid[] = "@(#) (Berkeley) 85/06/25";
3 #endif
4 
5 #include	"dbm.h"
6 
7 #define	NODB	((DBM *)0)
8 
9 static DBM *cur_db = NODB;
10 
11 static char no_db[] = "dbm: no open database\n";
12 
13 dbminit(file)
14 	char *file;
15 {
16 	if (cur_db != NODB)
17 		dbm_close(cur_db);
18 
19 	cur_db = dbm_open(file, 2, 0);
20 	if (cur_db == NODB) {
21 		cur_db = dbm_open(file, 0, 0);
22 		return (-1);
23 	}
24 	return (0);
25 }
26 
27 long
28 forder(key)
29 datum key;
30 {
31 	if (cur_db == NODB) {
32 		printf(no_db);
33 		return (0L);
34 	}
35 	return (dbm_forder(cur_db, key));
36 }
37 
38 datum
39 fetch(key)
40 datum key;
41 {
42 	datum item;
43 
44 	if (cur_db == NODB) {
45 		printf(no_db);
46 		item.dptr = 0;
47 		return (item);
48 	}
49 	return (dbm_fetch(cur_db, key));
50 }
51 
52 delete(key)
53 datum key;
54 {
55 	if (cur_db == NODB) {
56 		printf(no_db);
57 		return (-1);
58 	}
59 	if (dbm_rdonly(cur_db))
60 		return (-1);
61 	return (dbm_delete(cur_db, key));
62 }
63 
64 store(key, dat)
65 datum key, dat;
66 {
67 	if (cur_db == NODB) {
68 		printf(no_db);
69 		return (-1);
70 	}
71 	if (dbm_rdonly(cur_db))
72 		return (-1);
73 
74 	return (dbm_store(cur_db, key, dat, DBM_REPLACE));
75 }
76 
77 datum
78 firstkey()
79 {
80 	datum item;
81 
82 	if (cur_db == NODB) {
83 		printf(no_db);
84 		item.dptr = 0;
85 		return (item);
86 	}
87 	return (dbm_firstkey(cur_db));
88 }
89 
90 datum
91 nextkey(key)
92 datum key;
93 {
94 	datum item;
95 
96 	if (cur_db == NODB) {
97 		printf(no_db);
98 		item.dptr = 0;
99 		return (item);
100 	}
101 	return (dbm_nextkey(cur_db, key));
102 }
103