26#ifdef GDBM_INCLUDE_FILE
27#include GDBM_INCLUDE_FILE
39 int filemode = info->file_permission;
41 gmode = info->mode == DBA_READER ? GDBM_READER :
42 info->mode == DBA_WRITER ? GDBM_WRITER :
43 info->mode == DBA_CREAT ? GDBM_WRCREAT :
44 info->mode == DBA_TRUNC ? GDBM_NEWDB : -1;
49 dbf = gdbm_open(
ZSTR_VAL(info->path), 0, gmode, filemode,
NULL);
52 info->dbf =
pemalloc(
sizeof(dba_gdbm_data), info->flags&DBA_PERSISTENT);
53 memset(info->dbf, 0,
sizeof(dba_gdbm_data));
54 ((dba_gdbm_data *) info->dbf)->dbf = dbf;
57 *
error = (
char *)gdbm_strerror(gdbm_errno);
63 dba_gdbm_data *dba = info->dbf;
65 if(dba->nextkey.dptr) free(dba->nextkey.dptr);
67 pefree(dba, info->flags&DBA_PERSISTENT);
72 dba_gdbm_data *dba = info->dbf;
82 fetched_val = zend_string_init(
gval.dptr,
gval.dsize,
false);
90 dba_gdbm_data *dba = info->dbf;
99 switch (gdbm_store(dba->dbf,
gkey,
gval,
mode == 1 ? GDBM_INSERT : GDBM_REPLACE)) {
117 dba_gdbm_data *dba = info->dbf;
128 dba_gdbm_data *dba = info->dbf;
137DBA_FIRSTKEY_FUNC(gdbm)
139 dba_gdbm_data *dba = info->dbf;
143 if (dba->nextkey.dptr) {
144 free(dba->nextkey.dptr);
147 gkey = gdbm_firstkey(dba->dbf);
149 key = zend_string_init(
gkey.dptr,
gkey.dsize,
false);
152 dba->nextkey.dptr =
NULL;
157DBA_NEXTKEY_FUNC(gdbm)
159 dba_gdbm_data *dba = info->dbf;
163 if(!dba->nextkey.dptr) {
return NULL; }
165 gkey = gdbm_nextkey(dba->dbf, dba->nextkey);
166 free(dba->nextkey.dptr);
168 key = zend_string_init(
gkey.dptr,
gkey.dsize,
false);
171 dba->nextkey.dptr =
NULL;
176DBA_OPTIMIZE_FUNC(gdbm)
178 dba_gdbm_data *dba = info->dbf;
180 gdbm_reorganize(dba->dbf);
186 dba_gdbm_data *dba = info->dbf;
memset(ptr, 0, type->size)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
unsigned char key[REFLECTION_KEY_LEN]
#define pefree(ptr, persistent)
#define pemalloc(size, persistent)
struct _zend_string zend_string