This source file includes following definitions.
- DBA_OPEN_FUNC
- DBA_CLOSE_FUNC
- DBA_FETCH_FUNC
- DBA_UPDATE_FUNC
- DBA_EXISTS_FUNC
- DBA_DELETE_FUNC
- DBA_FIRSTKEY_FUNC
- DBA_NEXTKEY_FUNC
- DBA_OPTIMIZE_FUNC
- DBA_SYNC_FUNC
- DBA_INFO_FUNC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "php.h"
26
27 #if DBA_NDBM
28 #include "php_ndbm.h"
29
30 #include <fcntl.h>
31 #ifdef NDBM_INCLUDE_FILE
32 #include NDBM_INCLUDE_FILE
33 #endif
34
35 #define NDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
36
37 DBA_OPEN_FUNC(ndbm)
38 {
39 DBM *dbf;
40 int gmode = 0;
41 int filemode = 0644;
42 dba_info *pinfo = (dba_info *) info;
43
44 switch(info->mode) {
45 case DBA_READER:
46 gmode = O_RDONLY;
47 break;
48 case DBA_WRITER:
49 gmode = O_RDWR;
50 break;
51 case DBA_CREAT:
52 gmode = O_RDWR | O_CREAT;
53 break;
54 case DBA_TRUNC:
55 gmode = O_RDWR | O_CREAT | O_TRUNC;
56 break;
57 default:
58 return FAILURE;
59 }
60
61 if(info->argc > 0) {
62 convert_to_long_ex(&info->argv[0]);
63 filemode = Z_LVAL(info->argv[0]);
64 }
65
66 dbf = dbm_open(info->path, gmode, filemode);
67
68 pinfo->dbf = dbf;
69 return SUCCESS;
70 }
71
72 DBA_CLOSE_FUNC(ndbm)
73 {
74 dbm_close(info->dbf);
75 }
76
77 DBA_FETCH_FUNC(ndbm)
78 {
79 datum gval;
80 char *new = NULL;
81
82 NDBM_GKEY;
83 gval = dbm_fetch(info->dbf, gkey);
84 if(gval.dptr) {
85 if(newlen) *newlen = gval.dsize;
86 new = estrndup(gval.dptr, gval.dsize);
87 }
88 return new;
89 }
90
91 DBA_UPDATE_FUNC(ndbm)
92 {
93 datum gval;
94
95 NDBM_GKEY;
96 gval.dptr = (char *) val;
97 gval.dsize = vallen;
98
99 if(!dbm_store(info->dbf, gkey, gval, mode == 1 ? DBM_INSERT : DBM_REPLACE))
100 return SUCCESS;
101 return FAILURE;
102 }
103
104 DBA_EXISTS_FUNC(ndbm)
105 {
106 datum gval;
107 NDBM_GKEY;
108 gval = dbm_fetch(info->dbf, gkey);
109 if(gval.dptr) {
110 return SUCCESS;
111 }
112 return FAILURE;
113 }
114
115 DBA_DELETE_FUNC(ndbm)
116 {
117 NDBM_GKEY;
118 return(dbm_delete(info->dbf, gkey) == -1 ? FAILURE : SUCCESS);
119 }
120
121 DBA_FIRSTKEY_FUNC(ndbm)
122 {
123 datum gkey;
124 char *key = NULL;
125
126 gkey = dbm_firstkey(info->dbf);
127 if(gkey.dptr) {
128 if(newlen) *newlen = gkey.dsize;
129 key = estrndup(gkey.dptr, gkey.dsize);
130 }
131 return key;
132 }
133
134 DBA_NEXTKEY_FUNC(ndbm)
135 {
136 datum gkey;
137 char *nkey = NULL;
138
139 gkey = dbm_nextkey(info->dbf);
140 if(gkey.dptr) {
141 if(newlen) *newlen = gkey.dsize;
142 nkey = estrndup(gkey.dptr, gkey.dsize);
143 }
144 return nkey;
145 }
146
147 DBA_OPTIMIZE_FUNC(ndbm)
148 {
149 return SUCCESS;
150 }
151
152 DBA_SYNC_FUNC(ndbm)
153 {
154 return SUCCESS;
155 }
156
157 DBA_INFO_FUNC(ndbm)
158 {
159 return estrdup("NDBM");
160 }
161
162 #endif
163
164
165
166
167
168
169
170
171