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

Reply via email to