staticforward PyTypeObject Bsddbtype;
#define is_bsddbobject(v) ((v)->ob_type == &Bsddbtype)
+#define check_bsddbobject_open(v) if ((v)->di_bsddb == NULL) \
+ { PyErr_SetString(BsddbError, "BSDDB object has already been closed"); \
+ return NULL; }
static PyObject *BsddbError;
bsddb_length(dp)
bsddbobject *dp;
{
+ if (dp->di_bsddb == NULL) {
+ PyErr_SetString(BsddbError, "BSDDB object has already been closed");
+ return -1;
+ }
if (dp->di_size < 0) {
DBT krec, drec;
int status;
if (!PyArg_Parse(key, "s#", &data, &size))
return NULL;
+ check_bsddbobject_open(dp);
+
krec.data = data;
krec.size = size;
"bsddb key type must be string");
return -1;
}
+ if (dp->di_bsddb == NULL) {
+ PyErr_SetString(BsddbError, "BSDDB object has already been closed");
+ return -1;
+ }
krec.data = data;
krec.size = size;
dp->di_size = -1;
if (!PyArg_NoArgs(args))
return NULL;
+ check_bsddbobject_open(dp);
list = PyList_New(0);
if (list == NULL)
return NULL;
if (!PyArg_Parse(args, "s#", &data, &size))
return NULL;
+ check_bsddbobject_open(dp);
krec.data = data;
krec.size = size;
if (!PyArg_Parse(key, "s#", &data, &size))
return NULL;
+ check_bsddbobject_open(dp);
krec.data = data;
krec.size = size;
if (!PyArg_NoArgs(args))
return NULL;
+ check_bsddbobject_open(dp);
krec.data = 0;
krec.size = 0;
{
int status;
+ if (!PyArg_NoArgs(args))
+ return NULL;
+ check_bsddbobject_open(dp);
status = (dp->di_bsddb->sync)(dp->di_bsddb, 0);
if (status != 0) {
PyErr_SetFromErrno(BsddbError);
staticforward PyTypeObject Dbmtype;
#define is_dbmobject(v) ((v)->ob_type == &Dbmtype)
+#define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
+ { PyErr_SetString(DbmError, "DBM object has already been closed"); \
+ return NULL; }
static PyObject *DbmError;
dbm_length(dp)
dbmobject *dp;
{
+ if (dp->di_dbm == NULL) {
+ PyErr_SetString(DbmError, "DBM object has already been closed");
+ return -1;
+ }
if ( dp->di_size < 0 ) {
datum key;
int size;
if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) )
return NULL;
+ check_dbmobject_open(dp);
drec = dbm_fetch(dp->di_dbm, krec);
if ( drec.dptr == 0 ) {
PyErr_SetString(PyExc_KeyError,
"dbm mappings have string indices only");
return -1;
}
+ if (dp->di_dbm == NULL) {
+ PyErr_SetString(DbmError, "DBM object has already been closed");
+ return -1;
+ }
dp->di_size = -1;
if (w == NULL) {
if ( dbm_delete(dp->di_dbm, krec) < 0 ) {
if (!PyArg_NoArgs(args))
return NULL;
+ check_dbmobject_open(dp);
v = PyList_New(0);
if (v == NULL)
return NULL;
if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize))
return NULL;
+ check_dbmobject_open(dp);
val = dbm_fetch(dp->di_dbm, key);
return PyInt_FromLong(val.dptr != NULL);
}
staticforward PyTypeObject Dbmtype;
#define is_dbmobject(v) ((v)->ob_type == &Dbmtype)
+#define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
+ { PyErr_SetString(DbmError, "GDBM object has already been closed"); \
+ return NULL; }
+
+
static PyObject *DbmError;
dbm_length(dp)
dbmobject *dp;
{
+ if (dp->di_dbm == NULL) {
+ PyErr_SetString(DbmError, "GDBM object has already been closed");
+ return -1;
+ }
if ( dp->di_size < 0 ) {
datum key,okey;
int size;
"gdbm mappings have string indices only");
return -1;
}
+ if (dp->di_dbm == NULL) {
+ PyErr_SetString(DbmError, "GDBM object has already been closed");
+ return -1;
+ }
dp->di_size = -1;
if (w == NULL) {
if ( gdbm_delete(dp->di_dbm, krec) < 0 ) {
if (!PyArg_NoArgs(args))
return NULL;
+ check_dbmobject_open(dp);
+
v = PyList_New(0);
if (v == NULL)
return NULL;
if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize))
return NULL;
+ check_dbmobject_open(dp);
return PyInt_FromLong((long) gdbm_exists(dp->di_dbm, key));
}
if (!PyArg_NoArgs(args))
return NULL;
+ check_dbmobject_open(dp);
key = gdbm_firstkey(dp->di_dbm);
if (key.dptr) {
v = PyString_FromStringAndSize(key.dptr, key.dsize);
if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize))
return NULL;
+ check_dbmobject_open(dp);
nextkey = gdbm_nextkey(dp->di_dbm, key);
if (nextkey.dptr) {
v = PyString_FromStringAndSize(nextkey.dptr, nextkey.dsize);
{
if (!PyArg_NoArgs(args))
return NULL;
+ check_dbmobject_open(dp);
errno = 0;
if (gdbm_reorganize(dp->di_dbm) < 0) {
if (errno != 0)
{
if (!PyArg_NoArgs(args))
return NULL;
+ check_dbmobject_open(dp);
gdbm_sync(dp->di_dbm);
Py_INCREF(Py_None);
return Py_None;