28#ifdef DB3_INCLUDE_FILE
29#include DB3_INCLUDE_FILE
34static void php_dba_db3_errcall_fcn(
35#
if (DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3))
38 const char *errpfx,
const char *
msg)
54 int filemode = info->file_permission;
55 struct stat check_stat;
58 if (!
s && !check_stat.st_size) {
59 info->mode = DBA_TRUNC;
62 type = info->mode == DBA_READER ? DB_UNKNOWN :
63 info->mode == DBA_TRUNC ? DB_BTREE :
64 s ? DB_BTREE : DB_UNKNOWN;
66 gmode = info->mode == DBA_READER ? DB_RDONLY :
67 (info->mode == DBA_CREAT &&
s) ? DB_CREATE :
68 (info->
mode == DBA_CREAT && !
s) ? 0 :
69 info->
mode == DBA_WRITER ? 0 :
70 info->
mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
76#ifdef DB_FCNTL_LOCKING
77 gmode |= DB_FCNTL_LOCKING;
80 if ((
err=db_create(&dbp,
NULL, 0)) == 0) {
81 dbp->set_errcall(dbp, php_dba_db3_errcall_fcn);
83#
if (DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1))
109 dba_db3_data *dba = info->dbf;
111 if (dba->cursor) dba->cursor->c_close(dba->cursor);
112 dba->dbp->close(dba->dbp, 0);
113 pefree(dba, info->flags&DBA_PERSISTENT);
118 dba_db3_data *dba = info->dbf;
128 return zend_string_init(
gval.data,
gval.size,
false);
135 dba_db3_data *dba = info->dbf;
148 mode == 1 ? DB_NOOVERWRITE : 0)) {
156 dba_db3_data *dba = info->dbf;
173 dba_db3_data *dba = info->dbf;
183DBA_FIRSTKEY_FUNC(db3)
185 dba_db3_data *dba = info->dbf;
188 dba->cursor->c_close(dba->cursor);
192 if (dba->dbp->cursor(dba->dbp,
NULL, &dba->cursor, 0) != 0) {
196 return dba_nextkey_db3(info);
201 dba_db3_data *dba = info->dbf;
207 if (dba->cursor->c_get(dba->cursor, &
gkey, &
gval, DB_NEXT) == 0) {
209 return zend_string_init(
gkey.data,
gkey.size,
false);
216DBA_OPTIMIZE_FUNC(db3)
223 dba_db3_data *dba = info->dbf;
230 return estrdup(DB_VERSION_STRING);
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)
#define VCWD_STAT(path, buff)