diff options
| -rw-r--r-- | ext/dba/dba.c | 12 | ||||
| -rw-r--r-- | ext/dba/dba_cdb.c | 4 | ||||
| -rw-r--r-- | ext/dba/dba_db2.c | 4 | ||||
| -rw-r--r-- | ext/dba/dba_db3.c | 4 | ||||
| -rw-r--r-- | ext/dba/dba_db4.c | 4 | ||||
| -rw-r--r-- | ext/dba/dba_dbm.c | 4 | ||||
| -rw-r--r-- | ext/dba/dba_flatfile.c | 4 | ||||
| -rw-r--r-- | ext/dba/dba_gdbm.c | 4 | ||||
| -rw-r--r-- | ext/dba/php_dba.h | 1 | ||||
| -rw-r--r-- | ext/dba/tests/dba_cdb.phpt | 22 | ||||
| -rw-r--r-- | ext/dba/tests/dba_handler.inc | 53 | 
11 files changed, 65 insertions, 51 deletions
| diff --git a/ext/dba/dba.c b/ext/dba/dba.c index de6072540d..e7b1068cc5 100644 --- a/ext/dba/dba.c +++ b/ext/dba/dba.c @@ -215,7 +215,7 @@ static int le_pdb;  static void dba_close(dba_info *info TSRMLS_DC)  {  	if (info->hnd) info->hnd->close(info TSRMLS_CC); -	if (info->path) efree(info->path); +	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); @@ -223,8 +223,8 @@ static void dba_close(dba_info *info TSRMLS_DC)  		info->lock.fd = 0;  	}  	if (info->lock.fp) php_stream_close(info->lock.fp); -	if (info->lock.name) efree(info->lock.name); -	efree(info); +	if (info->lock.name) pefree(info->lock.name, info->flags&DBA_PERSISTENT); +	pefree(info, info->flags&DBA_PERSISTENT);  }  /* }}} */ @@ -232,8 +232,8 @@ static void dba_close(dba_info *info TSRMLS_DC)   */  static void dba_close_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)  { -	dba_info *info = (dba_info *)rsrc->ptr; - +	dba_info *info = (dba_info *)rsrc->ptr;  +	  	dba_close(info TSRMLS_CC);  }  /* }}} */ @@ -514,7 +514,7 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)  	info->mode = modenr;  	info->argc = ac - 3;  	info->argv = args + 3; -	info->flags = (hptr->flags & ~DBA_LOCK_ALL) | (lock_flag & DBA_LOCK_ALL); +	info->flags = (hptr->flags & ~DBA_LOCK_ALL) | (lock_flag & DBA_LOCK_ALL) | (persistent ? DBA_PERSISTENT : 0);  	info->lock.mode = lock_mode;  	/* if any open call is a locking call: diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c index e04545e65f..b704465ab9 100644 --- a/ext/dba/dba_cdb.c +++ b/ext/dba/dba_cdb.c @@ -98,7 +98,7 @@ DBA_OPEN_FUNC(cdb)  			return FAILURE;  	} -	cdb = emalloc(sizeof(dba_cdb)); +	cdb = pemalloc(sizeof(dba_cdb), info->flags&DBA_PERSISTENT);  	memset(cdb, 0, sizeof(dba_cdb));  #if DBA_CDB_BUILTIN @@ -132,7 +132,7 @@ DBA_CLOSE_FUNC(cdb)  	cdb_free(&cdb->c);  	close(cdb->file);  #endif -	efree(cdb); +	pefree(cdb, info->flags&DBA_PERSISTENT);  }  #if DBA_CDB_BUILTIN diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c index 580e6f62e2..e1afa98ff4 100644 --- a/ext/dba/dba_db2.c +++ b/ext/dba/dba_db2.c @@ -76,7 +76,7 @@ DBA_OPEN_FUNC(db2)  		return FAILURE;  	} -	info->dbf = emalloc(sizeof(dba_db2_data)); +	info->dbf = pemalloc(sizeof(dba_db2_data), info->flags&DBA_PERSISTENT);  	memset(info->dbf, 0, sizeof(dba_db2_data));  	((dba_db2_data *) info->dbf)->dbp = dbp;  	return SUCCESS; @@ -89,7 +89,7 @@ DBA_CLOSE_FUNC(db2)  	if (dba->cursor)   		dba->cursor->c_close(dba->cursor);  	dba->dbp->close(dba->dbp, 0); -	efree(dba); +	pefree(dba, info->flags&DBA_PERSISTENT);  }  DBA_FETCH_FUNC(db2) diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c index dd93693d0a..65ff51e7a4 100644 --- a/ext/dba/dba_db3.c +++ b/ext/dba/dba_db3.c @@ -81,7 +81,7 @@ DBA_OPEN_FUNC(db3)  #endif  		dba_db3_data *data; -		data = emalloc(sizeof(*data)); +		data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);  		data->dbp = dbp;  		data->cursor = NULL;  		info->dbf = data; @@ -100,7 +100,7 @@ DBA_CLOSE_FUNC(db3)  	if (dba->cursor) dba->cursor->c_close(dba->cursor);  	dba->dbp->close(dba->dbp, 0); -	efree(dba); +	pefree(dba, info->flags&DBA_PERSISTENT);  }  DBA_FETCH_FUNC(db3) diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c index 06c6cdbd32..6cb2debcd7 100644 --- a/ext/dba/dba_db4.c +++ b/ext/dba/dba_db4.c @@ -81,7 +81,7 @@ DBA_OPEN_FUNC(db4)  #endif  		dba_db4_data *data; -		data = emalloc(sizeof(*data)); +		data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);  		data->dbp = dbp;  		data->cursor = NULL;  		info->dbf = data; @@ -100,7 +100,7 @@ DBA_CLOSE_FUNC(db4)  	if (dba->cursor) dba->cursor->c_close(dba->cursor);  	dba->dbp->close(dba->dbp, 0); -	efree(dba); +	pefree(dba, info->flags&DBA_PERSISTENT);  }  DBA_FETCH_FUNC(db4) diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c index 4eca420786..cb7664987b 100644 --- a/ext/dba/dba_dbm.c +++ b/ext/dba/dba_dbm.c @@ -78,14 +78,14 @@ DBA_OPEN_FUNC(dbm)  		return FAILURE;  	} -	info->dbf = emalloc(sizeof(dba_dbm_data)); +	info->dbf = pemalloc(sizeof(dba_dbm_data), info->flags&DBA_PERSISTENT);  	memset(info->dbf, 0, sizeof(dba_dbm_data));  	return SUCCESS;  }  DBA_CLOSE_FUNC(dbm)  { -	efree(info->dbf); +	pefree(info->dbf, info->flags&DBA_PERSISTENT);  	dbmclose();  } diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c index a22866c456..53a577ab57 100644 --- a/ext/dba/dba_flatfile.c +++ b/ext/dba/dba_flatfile.c @@ -41,7 +41,7 @@  DBA_OPEN_FUNC(flatfile)  { -	info->dbf = emalloc(sizeof(flatfile)); +	info->dbf = pemalloc(sizeof(flatfile), info->flags&DBA_PERSISTENT);  	memset(info->dbf, 0, sizeof(flatfile));  	((flatfile*)info->dbf)->fp = info->fp; @@ -55,7 +55,7 @@ DBA_CLOSE_FUNC(flatfile)  	if (dba->nextkey.dptr)  		efree(dba->nextkey.dptr); -	efree(dba); +	pefree(dba, info->flags&DBA_PERSISTENT);  }  DBA_FETCH_FUNC(flatfile) diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c index 18288ace27..93c53d4b94 100644 --- a/ext/dba/dba_gdbm.c +++ b/ext/dba/dba_gdbm.c @@ -59,7 +59,7 @@ DBA_OPEN_FUNC(gdbm)  	dbf = gdbm_open(info->path, 0, gmode, filemode, NULL);  	if(dbf) { -		info->dbf = emalloc(sizeof(dba_gdbm_data)); +		info->dbf = pemalloc(sizeof(dba_gdbm_data), info->flags&DBA_PERSISTENT);  		memset(info->dbf, 0, sizeof(dba_gdbm_data));  		((dba_gdbm_data *) info->dbf)->dbf = dbf;  		return SUCCESS; @@ -74,7 +74,7 @@ DBA_CLOSE_FUNC(gdbm)  	if(dba->nextkey.dptr) free(dba->nextkey.dptr);  	gdbm_close(dba->dbf); -	efree(dba); +	pefree(dba, info->flags&DBA_PERSISTENT);  }  DBA_FETCH_FUNC(gdbm) diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h index 2290c638e8..2e8877b6b5 100644 --- a/ext/dba/php_dba.h +++ b/ext/dba/php_dba.h @@ -63,6 +63,7 @@ typedef struct dba_info {  #define DBA_LOCK_WCT     (DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC)  #define DBA_STREAM_OPEN  (0x0010) +#define DBA_PERSISTENT   (0x0020)  extern zend_module_entry dba_module_entry;  #define dba_module_ptr &dba_module_entry diff --git a/ext/dba/tests/dba_cdb.phpt b/ext/dba/tests/dba_cdb.phpt index 2390acbce5..9a881706ee 100644 --- a/ext/dba/tests/dba_cdb.phpt +++ b/ext/dba/tests/dba_cdb.phpt @@ -4,7 +4,7 @@ DBA CDB handler test  <?php   	require_once('skipif.inc');  	if (!in_array('cdb', dba_handlers())) die('skip CDB handler not available'); -	die('skip CDB does not support replace or delete'); +	die('info CDB does not support replace or delete');  ?>  --FILE--  <?php @@ -14,17 +14,17 @@ DBA CDB handler test  ?>  --EXPECT--  database handler: cdb -3NYNYY +5YYYYY  Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { -  ["key number 6"]=> -  string(13) "The 6th value" +array(5) { +  ["key1"]=> +  string(16) "Content String 1"    ["key2"]=> -  string(27) "Content 2 replaced 2nd time" +  string(16) "Content String 2" +  ["key3"]=> +  string(20) "Third Content String" +  ["key4"]=> +  string(22) "Another Content String"    ["key5"]=>    string(23) "The last content string" -}
\ No newline at end of file +} diff --git a/ext/dba/tests/dba_handler.inc b/ext/dba/tests/dba_handler.inc index dafc991025..66a356bb18 100644 --- a/ext/dba/tests/dba_handler.inc +++ b/ext/dba/tests/dba_handler.inc @@ -6,8 +6,15 @@  		dba_insert("key3", "Third Content String", $db_file);  		dba_insert("key4", "Another Content String", $db_file);  		dba_insert("key5", "The last content string", $db_file); -		dba_delete("key3", $db_file); -		dba_delete("key1", $db_file); +		if ($handler != 'cdb') { +			dba_delete("key3", $db_file); +			dba_delete("key1", $db_file); +		} else { +			dba_close($db_file); +			if (($db_file = dba_open($db_filename, 'r'.$lock_flag, $handler))===FALSE) { +				echo "Error reopening database\n"; +			} +		}  		$a = dba_firstkey($db_file);  		$i=0;  		while($a) { @@ -20,28 +27,32 @@  		}  		echo "\n";  		echo dba_fetch("key2", $db_file)."\n"; -		dba_replace("key2", "Content 2 replaced", $db_file); -		echo dba_fetch("key2", $db_file)."\n"; +		if ($handler != 'cdb') { +			dba_replace("key2", "Content 2 replaced", $db_file); +			echo dba_fetch("key2", $db_file)."\n"; +		}  		dba_close($db_file);  	} else {  		echo "Error creating database\n";  	} -	$db_writer = dba_open($db_filename, 'w'.$lock_flag, $handler); -	if (($dba_reader = @dba_open($db_filename, 'r'.$lock_flag.($lock_flag ? 't' : ''), $handler))===false) { -		echo "Read during write: not allowed\n"; -	} else { -		echo "Read during write: allowed\n"; -	} -	if ($db_writer!==FALSE) { -		dba_insert("key number 6", "The 6th value", $db_writer); -		@dba_insert("key number 6", "The 6th value inserted again would be an error", $db_writer); -		dba_replace("key2", "Content 2 replaced 2nd time", $db_writer); -		dba_delete("key4", $db_writer); -		echo dba_fetch("key2", $db_writer)."\n"; -		echo dba_fetch("key number 6", $db_writer)."\n"; -		dba_close($db_writer); // when the writer is open at least db3 would fail because of buffered io. -	} else { -		die("Error reopening database\n"); +	if ($handler != 'cdb') { +		$db_writer = dba_open($db_filename, 'w'.$lock_flag, $handler); +		if (($dba_reader = @dba_open($db_filename, 'r'.$lock_flag.($lock_flag ? 't' : ''), $handler))===false) { +			echo "Read during write: not allowed\n"; +		} else { +			echo "Read during write: allowed\n"; +		} +		if ($db_writer!==FALSE) { +			dba_insert("key number 6", "The 6th value", $db_writer); +			@dba_insert("key number 6", "The 6th value inserted again would be an error", $db_writer); +			dba_replace("key2", "Content 2 replaced 2nd time", $db_writer); +			dba_delete("key4", $db_writer); +			echo dba_fetch("key2", $db_writer)."\n"; +			echo dba_fetch("key number 6", $db_writer)."\n"; +			dba_close($db_writer); // when the writer is open at least db3 would fail because of buffered io. +		} else { +			die("Error reopening database\n"); +		}  	}  	if (($db_file = dba_open($db_filename, 'r'.$lock_flag, $handler))!==FALSE) {  		$key = dba_firstkey($db_file); @@ -59,4 +70,6 @@  	if ($dba_reader) {  		dba_close($dba_reader);  	} +	if (($db_file = dba_popen($db_filename, 'r'.($handler!='gdbm'?'-':''), $handler))!==FALSE) { +	}	  ?>
\ No newline at end of file | 
