Hi, I'm not sure if this is correct list for such things... The patch in attachment adds QDBM support for dba functions. It is based on gdbm part of this extension.
(sorry for my english) -- mg
diff -U 3 -H -d -r -N -a -- php-4.3.3-old/ext/dba/config.m4 php-4.3.3/ext/dba/config.m4 --- php-4.3.3-old/ext/dba/config.m4 2003-09-22 01:23:28.000000000 +0200 +++ php-4.3.3/ext/dba/config.m4 2003-09-22 01:21:47.000000000 +0200 @@ -129,6 +129,38 @@ ]) AC_DBA_STD_RESULT(ndbm) +AC_ARG_WITH(qdbm, +[ --with-qdbm[=DIR] DBA: Include QDBM support],[ + if test "$withval" != "no"; then + PHP_DBA_STD_BEGIN + for i in $withval /usr/local /usr; do + if test -f "$i/include/depot.h"; then + THIS_PREFIX=$i + THIS_INCLUDE=$i/include/depot.h + break + fi + done + + if test -n "$THIS_INCLUDE"; then + for LIB in qdbm; do + PHP_CHECK_LIBRARY($LIB, dpopen, [ + AC_DEFINE_UNQUOTED(QDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) + AC_DEFINE(DBA_QDBM, 1, [ ]) + THIS_LIBS=$LIB + ], [], [-L$THIS_PREFIX/lib]) + if test -n "$THIS_LIBS"; then + break + fi + done + fi + + PHP_DBA_STD_ASSIGN + PHP_DBA_STD_CHECK + PHP_DBA_STD_ATTACH + fi +]) +AC_DBA_STD_RESULT(qdbm) + dnl Berkeley specific (library and version test) dnl parameters(version, library list, function) AC_DEFUN(PHP_DBA_DB_CHECK,[ @@ -429,7 +461,7 @@ if test "$HAVE_DBA" = "1"; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_DBA, 1, [ ]) - PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db3.c dba_db4.c dba_flatfile.c dba_inifile.c $cdb_sources $flat_sources $ini_sources, $ext_shared) + PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db3.c dba_db4.c dba_flatfile.c dba_inifile.c dba_qdbm.c $cdb_sources $flat_sources $ini_sources, $ext_shared) PHP_ADD_BUILD_DIR($ext_builddir/libinifile) PHP_ADD_BUILD_DIR($ext_builddir/libcdb) PHP_ADD_BUILD_DIR($ext_builddir/libflatfile) diff -U 3 -H -d -r -N -a -- php-4.3.3-old/ext/dba/dba.c php-4.3.3/ext/dba/dba.c --- php-4.3.3-old/ext/dba/dba.c 2003-09-22 01:23:28.000000000 +0200 +++ php-4.3.3/ext/dba/dba.c 2003-09-22 01:16:00.000000000 +0200 @@ -48,6 +48,7 @@ #include "php_db4.h" #include "php_flatfile.h" #include "php_inifile.h" +#include "php_qdbm.h" /* {{{ dba_functions[] */ @@ -252,6 +253,9 @@ #if DBA_FLATFILE DBA_HND(flatfile, DBA_STREAM_OPEN|DBA_LOCK_ALL) /* No lock in lib */ #endif +#if DBA_QDBM + DBA_HND(qdbm, DBA_LOCK_EXT) +#endif { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; @@ -269,6 +273,8 @@ #define DBA_DEFAULT "ndbm" #elif DBA_DBM #define DBA_DEFAULT "dbm" +#elif DBA_QDBM +#define DBA_DEFAULT "qdbm" #else #define DBA_DEFAULT "" #endif diff -U 3 -H -d -r -N -a -- php-4.3.3-old/ext/dba/dba_qdbm.c php-4.3.3/ext/dba/dba_qdbm.c --- php-4.3.3-old/ext/dba/dba_qdbm.c 1970-01-01 01:00:00.000000000 +0100 +++ php-4.3.3/ext/dba/dba_qdbm.c 2003-09-22 01:34:12.000000000 +0200 @@ -0,0 +1,186 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 4 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2003 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | [EMAIL PROTECTED] so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Marcin Gibula <[EMAIL PROTECTED]> | + +----------------------------------------------------------------------+ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" + +#if DBA_QDBM +#include "php_qdbm.h" + +#ifdef QDBM_INCLUDE_FILE +#include QDBM_INCLUDE_FILE +#endif + +#define QDBM_DATA dba_qdbm_data *dba = info->dbf + +typedef struct { + DEPOT *dbf; +} dba_qdbm_data; + +DBA_OPEN_FUNC(qdbm) +{ + DEPOT *dbf; + int dmode = 0; + + dmode = info->mode == DBA_READER ? DP_OREADER : + info->mode == DBA_WRITER ? DP_OWRITER : + info->mode == DBA_CREAT ? DP_OWRITER | DP_OCREAT : + info->mode == DBA_TRUNC ? DP_OWRITER | DP_OTRUNC : -1; + + if (dmode == -1) + return FAILURE; + + dbf = dpopen(info->path, dmode, 0); + + if (dbf) { + info->dbf = pemalloc(sizeof(dba_qdbm_data), info->flags & DBA_PERSISTENT); + memset(info->dbf, 0, sizeof(dba_qdbm_data)); + ((dba_qdbm_data *) info->dbf)->dbf = dbf; + return SUCCESS; + } + + *error = (char *) dperrmsg(dpecode); + return FAILURE; +} + +DBA_CLOSE_FUNC(qdbm) +{ + QDBM_DATA; + + dpclose(dba->dbf); + pefree(dba, info->flags & DBA_PERSISTENT); +} + +DBA_FETCH_FUNC(qdbm) +{ + QDBM_DATA; + char *value, *new = NULL; + int value_size; + + value = dpget(dba->dbf, key, keylen, 0, -1, &value_size); + if (value) { + if (newlen) *newlen = value_size; + new = estrndup(value, value_size); + free(value); + } + + return new; +} + +DBA_UPDATE_FUNC(qdbm) +{ + QDBM_DATA; + int result; + + result = dpput(dba->dbf, key, keylen, val, vallen, mode == 1 ? DP_DKEEP : DP_DOVER); + if (result) + return SUCCESS; + + php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "%s", dperrmsg(dpecode)); + return FAILURE; +} + +DBA_EXISTS_FUNC(qdbm) +{ + QDBM_DATA; + char *value; + + value = dpget(dba->dbf, key, keylen, 0, -1, NULL); + if (value) { + free(value); + return SUCCESS; + } + + return FAILURE; +} + +DBA_DELETE_FUNC(qdbm) +{ + QDBM_DATA; + + return dpout(dba->dbf, key, keylen) ? SUCCESS : FAILURE; +} + +DBA_FIRSTKEY_FUNC(qdbm) +{ + QDBM_DATA; + int value_size; + char *value, *new = NULL; + + dpiterinit(dba->dbf); + + value = dpiternext(dba->dbf, &value_size); + if (value) { + if (newlen) *newlen = value_size; + new = estrndup(value, value_size); + free(value); + } + + return new; +} + +DBA_NEXTKEY_FUNC(qdbm) +{ + QDBM_DATA; + int value_size; + char *value, *new = NULL; + + value = dpiternext(dba->dbf, &value_size); + if (value) { + if (newlen) *newlen = value_size; + new = estrndup(value, value_size); + free(value); + } + + return new; +} + +DBA_OPTIMIZE_FUNC(qdbm) +{ + QDBM_DATA; + + dpoptimize(dba->dbf, 0); + return SUCCESS; +} + +DBA_SYNC_FUNC(qdbm) +{ + QDBM_DATA; + + dpsync(dba->dbf); + return SUCCESS; +} + +DBA_INFO_FUNC(qdbm) +{ + return estrdup(dpversion); +} + +#endif + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ diff -U 3 -H -d -r -N -a -- php-4.3.3-old/ext/dba/php_qdbm.h php-4.3.3/ext/dba/php_qdbm.h --- php-4.3.3-old/ext/dba/php_qdbm.h 1970-01-01 01:00:00.000000000 +0100 +++ php-4.3.3/ext/dba/php_qdbm.h 2003-09-22 01:16:00.000000000 +0200 @@ -0,0 +1,12 @@ +#ifndef PHP_QDBM_H +#define PHP_QDBM_H + +#if DBA_QDBM + +#include "php_dba.h" + +DBA_FUNCS(qdbm); + +#endif + +#endif
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php