12
12
| obtain it through the world-wide-web, please send a note to |
13
13
| [email protected] so we can mail you a copy immediately. |
14
14
+----------------------------------------------------------------------+
15
- | Authors: Sascha Schumann <[email protected] > |
16
- | Marcus Boerger <[email protected] > |
15
+ | Author: Sascha Schumann <[email protected] > |
17
16
+----------------------------------------------------------------------+
18
17
*/
19
18
28
27
#if DBA_DBM
29
28
#include "php_dbm.h"
30
29
31
- #ifdef DBA_DBM_BUILTIN
32
- #include "libdbm/dbm.h"
33
- #else
34
30
#include <dbm.h>
35
- #endif
36
31
37
32
#include <unistd.h>
38
33
#include <sys/types.h>
39
34
#include <sys/stat.h>
40
35
#include <fcntl.h>
41
36
42
- #ifndef DBA_DBM_BUILTIN
43
- typedef struct {
44
- datum nextkey ;
45
- } dba_dbm_data ;
46
- #endif
47
-
48
37
#define DBM_DATA dba_dbm_data *dba = info->dbf
49
38
#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
50
39
@@ -56,43 +45,12 @@ typedef struct {
56
45
close(fd);
57
46
58
47
48
+ typedef struct {
49
+ datum nextkey ;
50
+ } dba_dbm_data ;
51
+
59
52
DBA_OPEN_FUNC (dbm )
60
53
{
61
- #ifdef DBA_DBM_BUILTIN
62
- char * fmode ;
63
- php_stream * fp ;
64
-
65
- info -> dbf = ecalloc (sizeof (dba_dbm_data ), 1 );
66
- if (!info -> dbf ) {
67
- * error = "Out of memory" ;
68
- return FAILURE ;
69
- }
70
-
71
- switch (info -> mode ) {
72
- case DBA_READER :
73
- fmode = "r" ;
74
- break ;
75
- case DBA_WRITER :
76
- fmode = "r+b" ;
77
- break ;
78
- case DBA_CREAT :
79
- fmode = "a+b" ;
80
- break ;
81
- case DBA_TRUNC :
82
- fmode = "w+b" ;
83
- break ;
84
- default :
85
- return FAILURE ; /* not possible */
86
- }
87
- fp = php_stream_open_wrapper (info -> path , fmode , STREAM_MUST_SEEK |IGNORE_PATH |ENFORCE_SAFE_MODE , NULL );
88
- if (!fp ) {
89
- * error = "Unable to open file" ;
90
- return FAILURE ;
91
- }
92
-
93
- ((dba_dbm_data * )info -> dbf )-> fp = fp ;
94
- return SUCCESS ;
95
- #else
96
54
int fd ;
97
55
int filemode = 0644 ;
98
56
@@ -126,50 +84,24 @@ DBA_OPEN_FUNC(dbm)
126
84
return FAILURE ;
127
85
}
128
86
return SUCCESS ;
129
- #endif
130
87
}
131
88
132
89
DBA_CLOSE_FUNC (dbm )
133
90
{
134
- DBM_DATA ;
135
-
136
- #ifdef DBA_DBM_BUILTIN
137
- php_stream_close (dba -> fp );
138
- if (dba -> nextkey .dptr )
139
- efree (dba -> nextkey .dptr );
140
- #else
91
+ efree (info -> dbf );
141
92
dbmclose ();
142
- #endif
143
- efree (dba );
144
93
}
145
94
146
- #ifdef DBA_DBM_BUILTIN
147
- #define DBM_FETCH (gkey ) dbm_file_fetch((dba_dbm_data*)info->dbf, gkey TSRMLS_CC)
148
- #define DBM_STORE (gkey , gval ) dbm_file_store((dba_dbm_data*)info->dbf, gkey, gval, DBM_REPLACE TSRMLS_CC)
149
- #define DBM_DELETE (gkey ) dbm_file_delete((dba_dbm_data*)info->dbf, gkey TSRMLS_CC)
150
- #define DBM_FIRSTKEY () dbm_file_firstkey((dba_dbm_data*)info->dbf TSRMLS_CC)
151
- #define DBM_NEXTKEY (gkey ) dbm_file_nextkey((dba_dbm_data*)info->dbf TSRMLS_CC)
152
- #else
153
- #define DBM_FETCH (gkey ) fetch(gkey)
154
- #define DBM_STORE (gkey , gval ) store(gkey, gval)
155
- #define DBM_DELETE (gkey ) delete(gkey)
156
- #define DBM_FIRSTKEY () firstkey()
157
- #define DBM_NEXTKEY (gkey ) nextkey(gkey)
158
- #endif
159
-
160
95
DBA_FETCH_FUNC (dbm )
161
96
{
162
97
datum gval ;
163
98
char * new = NULL ;
164
99
165
100
DBM_GKEY ;
166
- gval = DBM_FETCH (gkey );
101
+ gval = fetch (gkey );
167
102
if (gval .dptr ) {
168
103
if (newlen ) * newlen = gval .dsize ;
169
104
new = estrndup (gval .dptr , gval .dsize );
170
- #ifdef DBA_DBM_BUILTIN
171
- efree (gval .dptr );
172
- #endif
173
105
}
174
106
return new ;
175
107
}
@@ -182,19 +114,16 @@ DBA_UPDATE_FUNC(dbm)
182
114
gval .dptr = (char * ) val ;
183
115
gval .dsize = vallen ;
184
116
185
- return (DBM_STORE (gkey , gval ) == -1 ? FAILURE : SUCCESS );
117
+ return (store (gkey , gval ) == -1 ? FAILURE : SUCCESS );
186
118
}
187
119
188
120
DBA_EXISTS_FUNC (dbm )
189
121
{
190
122
datum gval ;
191
123
DBM_GKEY ;
192
124
193
- gval = DBM_FETCH (gkey );
125
+ gval = fetch (gkey );
194
126
if (gval .dptr ) {
195
- #ifdef DBA_DBM_BUILTIN
196
- efree (gval .dptr );
197
- #endif
198
127
return SUCCESS ;
199
128
}
200
129
return FAILURE ;
@@ -203,46 +132,41 @@ DBA_EXISTS_FUNC(dbm)
203
132
DBA_DELETE_FUNC (dbm )
204
133
{
205
134
DBM_GKEY ;
206
- return (DBM_DELETE (gkey ) == -1 ? FAILURE : SUCCESS );
135
+ return (delete (gkey ) == -1 ? FAILURE : SUCCESS );
207
136
}
208
137
209
138
DBA_FIRSTKEY_FUNC (dbm )
210
139
{
211
140
DBM_DATA ;
212
-
213
- #ifdef DBA_DBM_BUILTIN
214
- if (dba -> nextkey .dptr )
215
- efree (dba -> nextkey .dptr );
216
- #endif
217
- dba -> nextkey = DBM_FIRSTKEY ();
218
- if (dba -> nextkey .dptr ) {
219
- if (newlen )
220
- * newlen = dba -> nextkey .dsize ;
221
- return estrndup (dba -> nextkey .dptr , dba -> nextkey .dsize );
222
- }
223
- return NULL ;
141
+ datum gkey ;
142
+ char * key = NULL ;
143
+
144
+ gkey = firstkey ();
145
+ if (gkey .dptr ) {
146
+ if (newlen ) * newlen = gkey .dsize ;
147
+ key = estrndup (gkey .dptr , gkey .dsize );
148
+ dba -> nextkey = gkey ;
149
+ } else
150
+ dba -> nextkey .dptr = NULL ;
151
+ return key ;
224
152
}
225
153
226
154
DBA_NEXTKEY_FUNC (dbm )
227
155
{
228
156
DBM_DATA ;
229
- datum lkey ;
157
+ datum gkey ;
158
+ char * nkey = NULL ;
230
159
231
- if (!dba -> nextkey .dptr )
232
- return NULL ;
160
+ if (!dba -> nextkey .dptr ) return NULL ;
233
161
234
- lkey = dba -> nextkey ;
235
- dba -> nextkey = DBM_NEXTKEY (lkey );
236
- #ifdef DBA_DBM_BUILTIN
237
- if (lkey .dptr )
238
- efree (lkey .dptr );
239
- #endif
240
- if (dba -> nextkey .dptr ) {
241
- if (newlen )
242
- * newlen = dba -> nextkey .dsize ;
243
- return estrndup (dba -> nextkey .dptr , dba -> nextkey .dsize );
244
- }
245
- return NULL ;
162
+ gkey = nextkey (dba -> nextkey );
163
+ if (gkey .dptr ) {
164
+ if (newlen ) * newlen = gkey .dsize ;
165
+ nkey = estrndup (gkey .dptr , gkey .dsize );
166
+ dba -> nextkey = gkey ;
167
+ } else
168
+ dba -> nextkey .dptr = NULL ;
169
+ return nkey ;
246
170
}
247
171
248
172
DBA_OPTIMIZE_FUNC (dbm )
@@ -253,7 +177,6 @@ DBA_OPTIMIZE_FUNC(dbm)
253
177
254
178
DBA_SYNC_FUNC (dbm )
255
179
{
256
- /* dummy */
257
180
return SUCCESS ;
258
181
}
259
182
0 commit comments