#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
const DB_ENV *dbenv,
#endif
- const char *errpfx, char *msg)
+ const char *errpfx, const char *msg)
{
TSRMLS_FETCH();
+
+#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 8 && DB_VERSION_PATCH <= 26)
+/* Bug 51086, Berkeley DB 4.8.26 */
+/* This code suppresses a BDB 4.8 error message that BDB incorrectly emits */
+ {
+ zstr funcname = get_active_function_name(TSRMLS_C);
+ int s_funcname_len;
+ char *s_funcname;
+ if (funcname.u != NULL) {
+ zend_unicode_to_string(ZEND_U_CONVERTER(UG(utf8_conv)), &s_funcname, &s_funcname_len, funcname.u, u_strlen(funcname.u) TSRMLS_CC);
+
+ if (s_funcname != NULL && (!strcmp(s_funcname,"dba_popen") || !strcmp(s_funcname,"dba_open"))
+ && !strncmp(msg, "fop_read_meta", sizeof("fop_read_meta")-1)) {
+ efree(s_funcname);
+ return;
+ }
+ if (s_funcname != NULL)
+ efree(s_funcname);
+ }
+ }
+#endif
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg);
}
struct stat check_stat;
int s = VCWD_STAT(info->path, &check_stat);
+#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR <= 7) /* Bug 51086 */
if (!s && !check_stat.st_size) {
info->mode = DBA_TRUNC; /* force truncate */
}
(info->mode == DBA_CREAT && !s) ? 0 :
info->mode == DBA_WRITER ? 0 :
info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
+#else
+ if (!s && !check_stat.st_size) {
+ info->mode = DBA_CREAT; /* force creation */
+ }
+
+ type = info->mode == DBA_READER ? DB_UNKNOWN :
+ (info->mode == DBA_TRUNC || info->mode == DBA_CREAT) ? DB_BTREE :
+ s ? DB_BTREE : DB_UNKNOWN;
+
+ gmode = info->mode == DBA_READER ? DB_RDONLY :
+ info->mode == DBA_CREAT ? DB_CREATE :
+ info->mode == DBA_WRITER ? 0 :
+ info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
+#endif
if (gmode == -1) {
return FAILURE; /* not possible */