helly Sun Dec 29 10:32:38 2002 EDT
Modified files:
/php4/ext/dba dba_db3.c dba_db4.c
Log:
Added support for db3/db4 error handling/information
Index: php4/ext/dba/dba_db3.c
diff -u php4/ext/dba/dba_db3.c:1.23 php4/ext/dba/dba_db3.c:1.24
--- php4/ext/dba/dba_db3.c:1.23 Fri Dec 20 12:47:58 2002
+++ php4/ext/dba/dba_db3.c Sun Dec 29 10:32:38 2002
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_db3.c,v 1.23 2002/12/20 17:47:58 helly Exp $ */
+/* $Id: dba_db3.c,v 1.24 2002/12/29 15:32:38 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -35,6 +35,13 @@
#include <db.h>
#endif
+static void php_dba_db3_errcall_fcn(const char *errpfx, char *msg)
+{
+ TSRMLS_FETCH();
+
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg);
+}
+
#define DB3_DATA dba_db3_data *dba = info->dbf
#define DB3_GKEY \
DBT gkey; \
@@ -50,7 +57,7 @@
{
DB *dbp = NULL;
DBTYPE type;
- int gmode = 0;
+ int gmode = 0, err;
int filemode = 0644;
struct stat check_stat;
int s = VCWD_STAT(info->path, &check_stat);
@@ -65,30 +72,37 @@
info->mode == DBA_WRITER ? 0 :
info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
- if (gmode == -1)
+ if (gmode == -1) {
return FAILURE; /* not possible */
+ }
if (info->argc > 0) {
convert_to_long_ex(info->argv[0]);
filemode = Z_LVAL_PP(info->argv[0]);
}
- if (db_create(&dbp, NULL, 0) == 0 &&
+ if ((err=db_create(&dbp, NULL, 0)) == 0) {
+ dbp->set_errcall(dbp, php_dba_db3_errcall_fcn);
+ if (
#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
- dbp->open(dbp, 0, info->path, NULL, type, gmode, filemode) ==
0) {
+ (err=dbp->open(dbp, 0, info->path, NULL, type, gmode,
+filemode)) == 0) {
#else
- dbp->open(dbp, info->path, NULL, type, gmode, filemode) == 0) {
+ (err=dbp->open(dbp, info->path, NULL, type, gmode, filemode))
+== 0) {
#endif
- dba_db3_data *data;
+ dba_db3_data *data;
- data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);
- data->dbp = dbp;
- data->cursor = NULL;
- info->dbf = data;
+ data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);
+ data->dbp = dbp;
+ data->cursor = NULL;
+ info->dbf = data;
- return SUCCESS;
- } else if (dbp != NULL) {
- dbp->close(dbp, 0);
+ return SUCCESS;
+ } else {
+ dbp->close(dbp, 0);
+ *error = db_strerror(err);
+ }
+ } else {
+ *error = db_strerror(err);
}
return FAILURE;
Index: php4/ext/dba/dba_db4.c
diff -u php4/ext/dba/dba_db4.c:1.2 php4/ext/dba/dba_db4.c:1.3
--- php4/ext/dba/dba_db4.c:1.2 Fri Dec 20 12:47:58 2002
+++ php4/ext/dba/dba_db4.c Sun Dec 29 10:32:38 2002
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_db4.c,v 1.2 2002/12/20 17:47:58 helly Exp $ */
+/* $Id: dba_db4.c,v 1.3 2002/12/29 15:32:38 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -35,6 +35,13 @@
#include <db.h>
#endif
+static void php_dba_db4_errcall_fcn(const char *errpfx, char *msg)
+{
+ TSRMLS_FETCH();
+
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg);
+}
+
#define DB4_DATA dba_db4_data *dba = info->dbf
#define DB4_GKEY \
DBT gkey; \
@@ -50,7 +57,7 @@
{
DB *dbp = NULL;
DBTYPE type;
- int gmode = 0;
+ int gmode = 0, err;
int filemode = 0644;
struct stat check_stat;
int s = VCWD_STAT(info->path, &check_stat);
@@ -73,22 +80,28 @@
filemode = Z_LVAL_PP(info->argv[0]);
}
- if (db_create(&dbp, NULL, 0) == 0 &&
+ if ((err=db_create(&dbp, NULL, 0)) == 0) {
+ dbp->set_errcall(dbp, php_dba_db4_errcall_fcn);
+ if (
#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
- dbp->open(dbp, 0, info->path, NULL, type, gmode, filemode) ==
0) {
+ (err=dbp->open(dbp, 0, info->path, NULL, type, gmode,
+filemode)) == 0) {
#else
- dbp->open(dbp, info->path, NULL, type, gmode, filemode) == 0) {
+ (err=dbp->open(dbp, info->path, NULL, type, gmode, filemode))
+== 0) {
#endif
- dba_db4_data *data;
+ dba_db4_data *data;
- data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);
- data->dbp = dbp;
- data->cursor = NULL;
- info->dbf = data;
+ data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);
+ data->dbp = dbp;
+ data->cursor = NULL;
+ info->dbf = data;
- return SUCCESS;
- } else if (dbp != NULL) {
- dbp->close(dbp, 0);
+ return SUCCESS;
+ } else {
+ dbp->close(dbp, 0);
+ *error = db_strerror(err);
+ }
+ } else {
+ *error = db_strerror(err);
}
return FAILURE;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php