summaryrefslogtreecommitdiff
path: root/ext/dba/dba_db4.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2006-02-18 17:11:06 +0000
committerMarcus Boerger <helly@php.net>2006-02-18 17:11:06 +0000
commit78516c79059e9566cb573998497bd72b7be1a0dc (patch)
treec55985dcf5bf9af6634ffd51170616d679c09ec4 /ext/dba/dba_db4.c
parent92ac0940d3595292a93e02820b68272547ad2167 (diff)
downloadphp-git-78516c79059e9566cb573998497bd72b7be1a0dc.tar.gz
- Fixed bug #36436 (DBA problem with Berkeley DB4).
Diffstat (limited to 'ext/dba/dba_db4.c')
-rw-r--r--ext/dba/dba_db4.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c
index ddfdf341b1..994dd8bd67 100644
--- a/ext/dba/dba_db4.c
+++ b/ext/dba/dba_db4.c
@@ -139,9 +139,15 @@ DBA_FETCH_FUNC(db4)
DB4_GKEY;
memset(&gval, 0, sizeof(gval));
+ if (info->flags & DBA_PERSISTENT) {
+ gval.flags |= DB_DBT_MALLOC;
+ }
if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
if (newlen) *newlen = gval.size;
new = estrndup(gval.data, gval.size);
+ if (info->flags & DBA_PERSISTENT) {
+ free(gval.data);
+ }
}
return new;
}
@@ -210,11 +216,23 @@ DBA_NEXTKEY_FUNC(db4)
memset(&gkey, 0, sizeof(gkey));
memset(&gval, 0, sizeof(gval));
+ if (info->flags & DBA_PERSISTENT) {
+ gkey.flags |= DB_DBT_MALLOC;
+ gval.flags |= DB_DBT_MALLOC;
+ }
if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) {
if (gkey.data) {
nkey = estrndup(gkey.data, gkey.size);
if (newlen) *newlen = gkey.size;
}
+ if (info->flags & DBA_PERSISTENT) {
+ if (gkey.data) {
+ free(gkey.data);
+ }
+ if (gval.data) {
+ free(gval.data);
+ }
+ }
}
return nkey;