cvs: php4(PHP_4_3) /ext/dba config.m4 dba.c /ext/dba/tests dba009.phpt

From: Date: Sun, 13 Apr 2003 20:16:14 +0000
Subject: cvs: php4(PHP_4_3) /ext/dba config.m4 dba.c /ext/dba/tests dba009.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-20260@lists.php.net to get a copy of this message
helly Sun Apr 13 16:16:14 2003 EDT Added files: (Branch: PHP_4_3) /php4/ext/dba/tests dba009.phpt Modified files: /php4/ext/dba config.m4 dba.c Log: MFH: reenable dba_popen Index: php4/ext/dba/config.m4 diff -u php4/ext/dba/config.m4:1.29.2.14 php4/ext/dba/config.m4:1.29.2.15 --- php4/ext/dba/config.m4:1.29.2.14 Tue Apr 1 05:16:50 2003 +++ php4/ext/dba/config.m4 Sun Apr 13 16:16:14 2003 @@ -1,5 +1,5 @@ dnl -dnl $Id: config.m4,v 1.29.2.14 2003/04/01 10:16:50 sas Exp $ +dnl $Id: config.m4,v 1.29.2.15 2003/04/13 20:16:14 helly Exp $ dnl dnl Suppose we need FlatFile if no support or only CDB is used. @@ -320,8 +320,10 @@ fi AC_DEFINE(DBA_DBM,1,[ ]) THIS_LIBS=$LIB - break ]) + if test -n "$THIS_LIBS"; then + break + fi ]) done fi Index: php4/ext/dba/dba.c diff -u php4/ext/dba/dba.c:1.61.2.12 php4/ext/dba/dba.c:1.61.2.13 --- php4/ext/dba/dba.c:1.61.2.12 Fri Jan 31 15:10:10 2003 +++ php4/ext/dba/dba.c Sun Apr 13 16:16:14 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dba.c,v 1.61.2.12 2003/01/31 20:10:10 helly Exp $ */ +/* $Id: dba.c,v 1.61.2.13 2003/04/13 20:16:14 helly Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -51,7 +51,7 @@ */ function_entry dba_functions[] = { PHP_FE(dba_open, NULL) - PHP_FALIAS(dba_popen, dba_open, NULL) + PHP_FE(dba_popen, NULL) /* Disabled until 4.3.1, when persistent STDIO streams are implemented. */ /* PHP_FE(dba_popen, NULL) */ PHP_FE(dba_close, NULL) @@ -202,16 +202,26 @@ */ static void dba_close(dba_info *info TSRMLS_DC) { - if (info->hnd) info->hnd->close(info TSRMLS_CC); - if (info->path) pefree(info->path, info->flags&DBA_PERSISTENT); - if (info->fp && info->fp!=info->lock.fp) php_stream_close(info->fp); + if (info->hnd) { + info->hnd->close(info TSRMLS_CC); + } + if (info->path) { + pefree(info->path, info->flags&DBA_PERSISTENT); + } + if (info->fp && info->fp!=info->lock.fp) { + php_stream_close(info->fp); + } if (info->lock.fd) { php_flock(info->lock.fd, LOCK_UN); /*close(info->lock.fd);*/ info->lock.fd = 0; } - if (info->lock.fp) php_stream_close(info->lock.fp); - if (info->lock.name) pefree(info->lock.name, info->flags&DBA_PERSISTENT); + if (info->lock.fp) { + php_stream_close(info->lock.fp); + } + if (info->lock.name) { + pefree(info->lock.name, info->flags&DBA_PERSISTENT); + } pefree(info, info->flags&DBA_PERSISTENT); } /* }}} */ @@ -221,17 +231,34 @@ static void dba_close_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) { dba_info *info = (dba_info *)rsrc->ptr; - + dba_close(info TSRMLS_CC); } /* }}} */ +/* {{{ dba_close_pe_rsrc_deleter */ +int dba_close_pe_rsrc_deleter(list_entry *le, void *pDba TSRMLS_DC) +{ + return le->ptr == pDba; +} +/* }}} */ + +/* {{{ dba_close_pe_rsrc */ +static void dba_close_pe_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) +{ + dba_info *info = (dba_info *)rsrc->ptr; + + /* closes the resource by calling dba_close_rsrc() */ + zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) dba_close_pe_rsrc_deleter, info TSRMLS_CC); +} +/* }}} */ + /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(dba) { le_db = zend_register_list_destructors_ex(dba_close_rsrc, NULL, "dba", module_number); - le_pdb = zend_register_list_destructors_ex(NULL, dba_close_rsrc, "dba persistent", module_number); + le_pdb = zend_register_list_destructors_ex(dba_close_pe_rsrc, dba_close_rsrc, "dba persistent", module_number); return SUCCESS; } /* }}} */ @@ -348,6 +375,7 @@ int lock_mode, lock_flag, lock_dbf = 0; char *file_mode; char mode[4], *pmode, *lock_file_mode = NULL; + int persistent_flag = persistent ? STREAM_OPEN_PERSISTENT : 0; if(ac < 3) { WRONG_PARAM_COUNT; @@ -533,7 +561,7 @@ /* when in read only mode try to use existing .lck file first */ /* do not log errors for .lck file while in read ony mode on .lck file */ lock_file_mode = "rb"; - info->lock.fp = php_stream_open_wrapper(info->lock.name, lock_file_mode, STREAM_MUST_SEEK|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL); + info->lock.fp = php_stream_open_wrapper(info->lock.name, lock_file_mode, STREAM_MUST_SEEK|IGNORE_PATH|ENFORCE_SAFE_MODE|persistent_flag, NULL); } if (!info->lock.fp) { /* when not in read mode or failed to open .lck file read only. now try again in create(write) mode and log errors */ @@ -541,7 +569,7 @@ } } if (!info->lock.fp) { - info->lock.fp = php_stream_open_wrapper(info->lock.name, lock_file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL); + info->lock.fp = php_stream_open_wrapper(info->lock.name, lock_file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE|persistent_flag, NULL); } if (!info->lock.fp) { dba_close(info TSRMLS_CC); @@ -565,7 +593,7 @@ if (info->lock.fp && lock_dbf) { info->fp = info->lock.fp; /* use the same stream for locking and database access */ } else { - info->fp = php_stream_open_wrapper(info->path, file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL); + info->fp = php_stream_open_wrapper(info->path, file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE|persistent_flag, NULL); } if (!info->fp) { dba_close(info TSRMLS_CC); @@ -592,6 +620,8 @@ Z_TYPE(new_le) = le_pdb; new_le.ptr = info; if (zend_hash_update(&EG(persistent_list), key, keylen+1, &new_le, sizeof(list_entry), NULL) == FAILURE) { + dba_close(info TSRMLS_CC); + php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Could not register persistent resource"); FREENOW; RETURN_FALSE; } Index: php4/ext/dba/tests/dba009.phpt +++ php4/ext/dba/tests/dba009.phpt --TEST-- DBA dba_popen Test --SKIPIF-- <?php require_once('skipif.inc'); print("info $HND handler used"); ?> --FILE-- <?php require_once('test.inc'); echo "database handler: $handler\n"; if (($db=dba_popen($db_file, "n", $handler))!==FALSE) { echo "Opened\n"; dba_insert("a", "Inserted", $db); echo dba_fetch("a", $db)."\n"; dba_close($db); echo "Closed\n"; } else { echo "Error creating database\n"; } if (($db=dba_popen($db_file, "n", $handler))!==FALSE) { echo "Opened\n"; dba_insert("a", "Inserted", $db); echo dba_fetch("a", $db)."\n"; } ?> --EXPECTF-- database handler: %s Opened Inserted Closed Opened Inserted

« previous php.cvs (#20260) next »