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