Skip to content

Commit 4be5092

Browse files
committed
move newly introduced flatfile support from dbm to new flatfile handler
# do not make the same mistake as with ext/db where it was not clear # which format was used.
1 parent 5d9563d commit 4be5092

File tree

8 files changed

+369
-117
lines changed

8 files changed

+369
-117
lines changed

ext/dba/config.m4

+14-8
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,7 @@ AC_DBA_STD_RESULT
190190

191191
AC_ARG_WITH(dbm,
192192
[ --with-dbm[=DIR] Include DBM support],[
193-
if test "$withval" = "yes"; then
194-
PHP_ADD_BUILD_DIR($ext_builddir/libdbm)
195-
AC_DEFINE(DBA_DBM_BUILTIN, 1, [ ])
196-
AC_DEFINE(DBA_DBM, 1, [ ])
197-
dbm_sources="libdbm/dbm.c"
198-
THIS_RESULT="builtin"
199-
elif test "$withval" != "no"; then
193+
if test "$withval" != "no"; then
200194
for i in /usr/local /usr $withval; do
201195
if test -f "$i/include/dbm.h" ; then
202196
THIS_PREFIX=$i
@@ -247,11 +241,23 @@ AC_ARG_WITH(cdb,
247241
AC_MSG_CHECKING(for CDB support)
248242
AC_DBA_STD_RESULT
249243

244+
AC_ARG_WITH(flatfile,
245+
[ --with-flatfile[=DIR] Include FlatFile support],[
246+
if test "$withval" = "yes"; then
247+
PHP_ADD_BUILD_DIR($ext_builddir/libflatfile)
248+
AC_DEFINE(DBA_FLATFILE, 1, [ ])
249+
flat_sources="php_flatfile.c libflatfile/flatfile.c"
250+
THIS_RESULT="builtin"
251+
fi
252+
])
253+
AC_MSG_CHECKING(for FlatFile support)
254+
AC_DBA_STD_RESULT
255+
250256
AC_MSG_CHECKING(whether to enable DBA interface)
251257
if test "$HAVE_DBA" = "1"; then
252258
AC_MSG_RESULT(yes)
253259
AC_DEFINE(HAVE_DBA, 1, [ ])
254-
PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db3.c $cdb_sources $dbm_sources, $ext_shared)
260+
PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db3.c $cdb_sources $flat_sources, $ext_shared)
255261
PHP_SUBST(DBA_SHARED_LIBADD)
256262
else
257263
AC_MSG_RESULT(no)

ext/dba/dba.c

+3
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ static dba_handler handler[] = {
184184
#endif
185185
#if DBA_DB3
186186
DBA_HND(db3)
187+
#endif
188+
#if DBA_FLATFILE
189+
DBA_HND(flatfile)
187190
#endif
188191
{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
189192
};

ext/dba/dba_dbm.c

+32-109
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
| obtain it through the world-wide-web, please send a note to |
1313
| [email protected] so we can mail you a copy immediately. |
1414
+----------------------------------------------------------------------+
15-
| Authors: Sascha Schumann <[email protected]> |
16-
| Marcus Boerger <[email protected]> |
15+
| Author: Sascha Schumann <[email protected]> |
1716
+----------------------------------------------------------------------+
1817
*/
1918

@@ -28,23 +27,13 @@
2827
#if DBA_DBM
2928
#include "php_dbm.h"
3029

31-
#ifdef DBA_DBM_BUILTIN
32-
#include "libdbm/dbm.h"
33-
#else
3430
#include <dbm.h>
35-
#endif
3631

3732
#include <unistd.h>
3833
#include <sys/types.h>
3934
#include <sys/stat.h>
4035
#include <fcntl.h>
4136

42-
#ifndef DBA_DBM_BUILTIN
43-
typedef struct {
44-
datum nextkey;
45-
} dba_dbm_data;
46-
#endif
47-
4837
#define DBM_DATA dba_dbm_data *dba = info->dbf
4938
#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
5039

@@ -56,43 +45,12 @@ typedef struct {
5645
close(fd);
5746

5847

48+
typedef struct {
49+
datum nextkey;
50+
} dba_dbm_data;
51+
5952
DBA_OPEN_FUNC(dbm)
6053
{
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
9654
int fd;
9755
int filemode = 0644;
9856

@@ -126,50 +84,24 @@ DBA_OPEN_FUNC(dbm)
12684
return FAILURE;
12785
}
12886
return SUCCESS;
129-
#endif
13087
}
13188

13289
DBA_CLOSE_FUNC(dbm)
13390
{
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);
14192
dbmclose();
142-
#endif
143-
efree(dba);
14493
}
14594

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-
16095
DBA_FETCH_FUNC(dbm)
16196
{
16297
datum gval;
16398
char *new = NULL;
16499

165100
DBM_GKEY;
166-
gval = DBM_FETCH(gkey);
101+
gval = fetch(gkey);
167102
if(gval.dptr) {
168103
if(newlen) *newlen = gval.dsize;
169104
new = estrndup(gval.dptr, gval.dsize);
170-
#ifdef DBA_DBM_BUILTIN
171-
efree(gval.dptr);
172-
#endif
173105
}
174106
return new;
175107
}
@@ -182,19 +114,16 @@ DBA_UPDATE_FUNC(dbm)
182114
gval.dptr = (char *) val;
183115
gval.dsize = vallen;
184116

185-
return (DBM_STORE(gkey, gval) == -1 ? FAILURE : SUCCESS);
117+
return (store(gkey, gval) == -1 ? FAILURE : SUCCESS);
186118
}
187119

188120
DBA_EXISTS_FUNC(dbm)
189121
{
190122
datum gval;
191123
DBM_GKEY;
192124

193-
gval = DBM_FETCH(gkey);
125+
gval = fetch(gkey);
194126
if(gval.dptr) {
195-
#ifdef DBA_DBM_BUILTIN
196-
efree(gval.dptr);
197-
#endif
198127
return SUCCESS;
199128
}
200129
return FAILURE;
@@ -203,46 +132,41 @@ DBA_EXISTS_FUNC(dbm)
203132
DBA_DELETE_FUNC(dbm)
204133
{
205134
DBM_GKEY;
206-
return(DBM_DELETE(gkey) == -1 ? FAILURE : SUCCESS);
135+
return(delete(gkey) == -1 ? FAILURE : SUCCESS);
207136
}
208137

209138
DBA_FIRSTKEY_FUNC(dbm)
210139
{
211140
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;
224152
}
225153

226154
DBA_NEXTKEY_FUNC(dbm)
227155
{
228156
DBM_DATA;
229-
datum lkey;
157+
datum gkey;
158+
char *nkey = NULL;
230159

231-
if(!dba->nextkey.dptr)
232-
return NULL;
160+
if(!dba->nextkey.dptr) return NULL;
233161

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;
246170
}
247171

248172
DBA_OPTIMIZE_FUNC(dbm)
@@ -253,7 +177,6 @@ DBA_OPTIMIZE_FUNC(dbm)
253177

254178
DBA_SYNC_FUNC(dbm)
255179
{
256-
/* dummy */
257180
return SUCCESS;
258181
}
259182

0 commit comments

Comments
 (0)