diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2006-06-05 00:31:01 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2006-06-05 00:31:01 (GMT) |
commit | 3dd20022ac3da63c4fe867a773d623e4fa1fce04 (patch) | |
tree | 5487ab20d2e69684d9ebbde01de91cdd78f09c7a | |
parent | 1985ff76ca757d0b6baf80725c405ffc91cc551a (diff) | |
download | cpython-3dd20022ac3da63c4fe867a773d623e4fa1fce04.zip cpython-3dd20022ac3da63c4fe867a773d623e4fa1fce04.tar.gz cpython-3dd20022ac3da63c4fe867a773d623e4fa1fce04.tar.bz2 |
bugfix: when log_archive was called with the DB_ARCH_REMOVE flag present
in BerkeleyDB >= 4.2 it tried to construct a list out of an uninitialized
char **log_list.
feature: export the DB_ARCH_REMOVE flag by name in the module on BerkeleyDB >= 4.2.
-rw-r--r-- | Lib/bsddb/test/test_basics.py | 3 | ||||
-rw-r--r-- | Modules/_bsddb.c | 14 |
2 files changed, 12 insertions, 5 deletions
diff --git a/Lib/bsddb/test/test_basics.py b/Lib/bsddb/test/test_basics.py index 24c4038..92cad06 100644 --- a/Lib/bsddb/test/test_basics.py +++ b/Lib/bsddb/test/test_basics.py @@ -665,6 +665,9 @@ class BasicTransactionTestCase(BasicTestCase): for log in logs: if verbose: print 'log file: ' + log + if db.version >= (4,2): + logs = self.env.log_archive(db.DB_ARCH_REMOVE) + assert not logs self.txn = self.env.txn_begin() diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index c8edaa0..2df73fe 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -4371,13 +4371,17 @@ DBEnv_log_archive(DBEnvObject* self, PyObject* args) { int flags=0; int err; - char **log_list_start, **log_list; + char **log_list = NULL; PyObject* list; PyObject* item = NULL; if (!PyArg_ParseTuple(args, "|i:log_archive", &flags)) return NULL; + list = PyList_New(0); + if (list == NULL) + return NULL; + CHECK_ENV_NOT_CLOSED(self); MYDB_BEGIN_ALLOW_THREADS; #if (DBVER >= 40) @@ -4390,11 +4394,8 @@ DBEnv_log_archive(DBEnvObject* self, PyObject* args) MYDB_END_ALLOW_THREADS; RETURN_IF_ERR(); - list = PyList_New(0); - if (list == NULL) - return NULL; - if (log_list) { + char **log_list_start; for (log_list_start = log_list; *log_list != NULL; ++log_list) { item = PyString_FromString (*log_list); if (item == NULL) { @@ -5247,6 +5248,9 @@ DL_EXPORT(void) init_bsddb(void) ADD_INT(d, DB_ARCH_ABS); ADD_INT(d, DB_ARCH_DATA); ADD_INT(d, DB_ARCH_LOG); +#if (DBVER >= 42) + ADD_INT(d, DB_ARCH_REMOVE); +#endif ADD_INT(d, DB_BTREE); ADD_INT(d, DB_HASH); |