diff options
author | Roger E. Masse <rmasse@newcnri.cnri.reston.va.us> | 1997-01-16 22:05:33 (GMT) |
---|---|---|
committer | Roger E. Masse <rmasse@newcnri.cnri.reston.va.us> | 1997-01-16 22:05:33 (GMT) |
commit | d9240d19b2b3f93d4182ec3e444d26f7022ee457 (patch) | |
tree | 4bef7d5878ed8c346a2c7fe0998e568e0aca2659 /Modules/bsddbmodule.c | |
parent | eca63b83ac030709a6c83e3c2f14fd49899ea5b0 (diff) | |
download | cpython-d9240d19b2b3f93d4182ec3e444d26f7022ee457.zip cpython-d9240d19b2b3f93d4182ec3e444d26f7022ee457.tar.gz cpython-d9240d19b2b3f93d4182ec3e444d26f7022ee457.tar.bz2 |
Already renamed. Indented.
Diffstat (limited to 'Modules/bsddbmodule.c')
-rw-r--r-- | Modules/bsddbmodule.c | 984 |
1 files changed, 513 insertions, 471 deletions
diff --git a/Modules/bsddbmodule.c b/Modules/bsddbmodule.c index 01b1116..203180f 100644 --- a/Modules/bsddbmodule.c +++ b/Modules/bsddbmodule.c @@ -50,9 +50,9 @@ PERFORMANCE OF THIS SOFTWARE. (it messes up the info required in the Setup file) */ typedef struct { - PyObject_HEAD - DB *di_bsddb; - int di_size; /* -1 means recompute */ + PyObject_HEAD + DB *di_bsddb; + int di_size; /* -1 means recompute */ } bsddbobject; staticforward PyTypeObject Bsddbtype; @@ -64,627 +64,669 @@ static PyObject *BsddbError; static PyObject * newdbhashobject(file, flags, mode, bsize, ffactor, nelem, cachesize, hash, lorder) - char *file; - int flags; - int mode; - int bsize; - int ffactor; - int nelem; - int cachesize; - int hash; /* XXX ignored */ - int lorder; + char *file; + int flags; + int mode; + int bsize; + int ffactor; + int nelem; + int cachesize; + int hash; /* XXX ignored */ + int lorder; { - bsddbobject *dp; - HASHINFO info; + bsddbobject *dp; + HASHINFO info; - if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) - return NULL; + if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) + return NULL; - info.bsize = bsize; - info.ffactor = ffactor; - info.nelem = nelem; - info.cachesize = cachesize; - info.hash = NULL; /* XXX should derive from hash argument */ - info.lorder = lorder; + info.bsize = bsize; + info.ffactor = ffactor; + info.nelem = nelem; + info.cachesize = cachesize; + info.hash = NULL; /* XXX should derive from hash argument */ + info.lorder = lorder; #ifdef O_BINARY - flags |= O_BINARY; + flags |= O_BINARY; #endif - if ((dp->di_bsddb = dbopen(file, flags, mode, DB_HASH, &info)) == NULL) { - PyErr_SetFromErrno(BsddbError); - Py_DECREF(dp); - return NULL; - } + if ((dp->di_bsddb = dbopen(file, flags, + mode, DB_HASH, &info)) == NULL) { + PyErr_SetFromErrno(BsddbError); + Py_DECREF(dp); + return NULL; + } - dp->di_size = -1; + dp->di_size = -1; - return (PyObject *)dp; + return (PyObject *)dp; } static PyObject * newdbbtobject(file, flags, mode, - btflags, cachesize, maxkeypage, minkeypage, psize, lorder) - char *file; - int flags; - int mode; - int btflags; - int cachesize; - int maxkeypage; - int minkeypage; - int psize; - int lorder; + btflags, cachesize, maxkeypage, minkeypage, psize, lorder) + char *file; + int flags; + int mode; + int btflags; + int cachesize; + int maxkeypage; + int minkeypage; + int psize; + int lorder; { - bsddbobject *dp; - BTREEINFO info; + bsddbobject *dp; + BTREEINFO info; - if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) - return NULL; + if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) + return NULL; - info.flags = btflags; - info.cachesize = cachesize; - info.maxkeypage = maxkeypage; - info.minkeypage = minkeypage; - info.psize = psize; - info.lorder = lorder; - info.compare = 0; /* Use default comparison functions, for now..*/ - info.prefix = 0; + info.flags = btflags; + info.cachesize = cachesize; + info.maxkeypage = maxkeypage; + info.minkeypage = minkeypage; + info.psize = psize; + info.lorder = lorder; + info.compare = 0; /* Use default comparison functions, for now..*/ + info.prefix = 0; #ifdef O_BINARY - flags |= O_BINARY; + flags |= O_BINARY; #endif - if ((dp->di_bsddb = dbopen(file, flags, mode, DB_BTREE, &info)) == NULL) { - PyErr_SetFromErrno(BsddbError); - Py_DECREF(dp); - return NULL; - } + if ((dp->di_bsddb = dbopen(file, flags, + mode, DB_BTREE, &info)) == NULL) { + PyErr_SetFromErrno(BsddbError); + Py_DECREF(dp); + return NULL; + } - dp->di_size = -1; + dp->di_size = -1; - return (PyObject *)dp; + return (PyObject *)dp; } static PyObject * newdbrnobject(file, flags, mode, - rnflags, cachesize, psize, lorder, reclen, bval, bfname) - char *file; - int flags; - int mode; - int rnflags; - int cachesize; - int psize; - int lorder; - size_t reclen; - u_char bval; - char *bfname; + rnflags, cachesize, psize, lorder, reclen, bval, bfname) + char *file; + int flags; + int mode; + int rnflags; + int cachesize; + int psize; + int lorder; + size_t reclen; + u_char bval; + char *bfname; { - bsddbobject *dp; - RECNOINFO info; + bsddbobject *dp; + RECNOINFO info; - if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) - return NULL; + if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) + return NULL; - info.flags = rnflags; - info.cachesize = cachesize; - info.psize = psize; - info.lorder = lorder; - info.reclen = reclen; - info.bval = bval; - info.bfname = bfname; + info.flags = rnflags; + info.cachesize = cachesize; + info.psize = psize; + info.lorder = lorder; + info.reclen = reclen; + info.bval = bval; + info.bfname = bfname; #ifdef O_BINARY - flags |= O_BINARY; + flags |= O_BINARY; #endif - if ((dp->di_bsddb = dbopen(file, flags, mode, DB_RECNO, &info)) == NULL) { - PyErr_SetFromErrno(BsddbError); - Py_DECREF(dp); - return NULL; - } + if ((dp->di_bsddb = dbopen(file, flags, mode, + DB_RECNO, &info)) == NULL) { + PyErr_SetFromErrno(BsddbError); + Py_DECREF(dp); + return NULL; + } - dp->di_size = -1; + dp->di_size = -1; - return (PyObject *)dp; + return (PyObject *)dp; } static void bsddb_dealloc(dp) - bsddbobject *dp; + bsddbobject *dp; { - if (dp->di_bsddb != NULL) { - if ((dp->di_bsddb->close)(dp->di_bsddb) != 0) - fprintf(stderr, - "Python bsddb: close errno %d in dealloc\n", errno); - } - PyMem_DEL(dp); + if (dp->di_bsddb != NULL) { + if ((dp->di_bsddb->close)(dp->di_bsddb) != 0) + fprintf(stderr, + "Python bsddb: close errno %d in dealloc\n", + errno); + } + PyMem_DEL(dp); } static int bsddb_length(dp) - bsddbobject *dp; + bsddbobject *dp; { - if (dp->di_size < 0) { - DBT krec, drec; - int status; - int size = 0; - for (status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec,R_FIRST); - status == 0; - status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_NEXT)) - size++; - if (status < 0) { - PyErr_SetFromErrno(BsddbError); - return -1; + if (dp->di_size < 0) { + DBT krec, drec; + int status; + int size = 0; + for (status = (dp->di_bsddb->seq)(dp->di_bsddb, + &krec, &drec,R_FIRST); + status == 0; + status = (dp->di_bsddb->seq)(dp->di_bsddb, + &krec, &drec, R_NEXT)) + size++; + if (status < 0) { + PyErr_SetFromErrno(BsddbError); + return -1; + } + dp->di_size = size; } - dp->di_size = size; - } - return dp->di_size; + return dp->di_size; } static PyObject * bsddb_subscript(dp, key) - bsddbobject *dp; - PyObject *key; + bsddbobject *dp; + PyObject *key; { - int status; - DBT krec, drec; - char *data; - int size; - - if (!PyArg_Parse(key, "s#", &data, &size)) - return NULL; - krec.data = data; - krec.size = size; - - status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); - if (status != 0) { - if (status < 0) - PyErr_SetFromErrno(BsddbError); - else - PyErr_SetObject(PyExc_KeyError, key); - return NULL; - } - - return PyString_FromStringAndSize((char *)drec.data, (int)drec.size); + int status; + DBT krec, drec; + char *data; + int size; + + if (!PyArg_Parse(key, "s#", &data, &size)) + return NULL; + krec.data = data; + krec.size = size; + + status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); + if (status != 0) { + if (status < 0) + PyErr_SetFromErrno(BsddbError); + else + PyErr_SetObject(PyExc_KeyError, key); + return NULL; + } + + return PyString_FromStringAndSize((char *)drec.data, (int)drec.size); } static int bsddb_ass_sub(dp, key, value) - bsddbobject *dp; - PyObject *key, *value; + bsddbobject *dp; + PyObject *key, *value; { - int status; - DBT krec, drec; - char *data; - int size; - - if (!PyArg_Parse(key, "s#", &data, &size)) { - PyErr_SetString(PyExc_TypeError, "bsddb key type must be string"); - return -1; - } - krec.data = data; - krec.size = size; - dp->di_size = -1; - if (value == NULL) { - status = (dp->di_bsddb->del)(dp->di_bsddb, &krec, 0); - } - else { - if (!PyArg_Parse(value, "s#", &data, &size)) { - PyErr_SetString(PyExc_TypeError, "bsddb value type must be string"); - return -1; + int status; + DBT krec, drec; + char *data; + int size; + + if (!PyArg_Parse(key, "s#", &data, &size)) { + PyErr_SetString(PyExc_TypeError, + "bsddb key type must be string"); + return -1; + } + krec.data = data; + krec.size = size; + dp->di_size = -1; + if (value == NULL) { + status = (dp->di_bsddb->del)(dp->di_bsddb, &krec, 0); + } + else { + if (!PyArg_Parse(value, "s#", &data, &size)) { + PyErr_SetString(PyExc_TypeError, + "bsddb value type must be string"); + return -1; + } + drec.data = data; + drec.size = size; +#if 0 + /* For RECNO, put fails with 'No space left on device' + after a few short records are added?? Looks fine + to this point... linked with 1.85 on Solaris Intel + Roger E. Masse 1/16/97 + */ + printf("before put data: '%s', size: %d\n", + drec.data, drec.size); + printf("before put key= '%s', size= %d\n", + krec.data, krec.size); +#endif + status = (dp->di_bsddb->put)(dp->di_bsddb, &krec, &drec, 0); } - drec.data = data; - drec.size = size; - status = (dp->di_bsddb->put)(dp->di_bsddb, &krec, &drec, 0); - } - if (status != 0) { - if (status < 0) - PyErr_SetFromErrno(BsddbError); - else - PyErr_SetObject(PyExc_KeyError, key); - return -1; - } - return 0; + if (status != 0) { + if (status < 0) + PyErr_SetFromErrno(BsddbError); + else + PyErr_SetObject(PyExc_KeyError, key); + return -1; + } + return 0; } static PyMappingMethods bsddb_as_mapping = { - (inquiry)bsddb_length, /*mp_length*/ - (binaryfunc)bsddb_subscript, /*mp_subscript*/ - (objobjargproc)bsddb_ass_sub, /*mp_ass_subscript*/ + (inquiry)bsddb_length, /*mp_length*/ + (binaryfunc)bsddb_subscript, /*mp_subscript*/ + (objobjargproc)bsddb_ass_sub, /*mp_ass_subscript*/ }; static PyObject * bsddb_close(dp, args) - bsddbobject *dp; - PyObject *args; + bsddbobject *dp; + PyObject *args; { - if (!PyArg_NoArgs(args)) - return NULL; - if (dp->di_bsddb != NULL) { - if ((dp->di_bsddb->close)(dp->di_bsddb) != 0) { - dp->di_bsddb = NULL; - PyErr_SetFromErrno(BsddbError); - return NULL; + if (!PyArg_NoArgs(args)) + return NULL; + if (dp->di_bsddb != NULL) { + if ((dp->di_bsddb->close)(dp->di_bsddb) != 0) { + dp->di_bsddb = NULL; + PyErr_SetFromErrno(BsddbError); + return NULL; + } } - } - dp->di_bsddb = NULL; - Py_INCREF(Py_None); - return Py_None; + dp->di_bsddb = NULL; + Py_INCREF(Py_None); + return Py_None; } static PyObject * bsddb_keys(dp, args) - bsddbobject *dp; - PyObject *args; + bsddbobject *dp; + PyObject *args; { - PyObject *list, *item; - DBT krec, drec; - int status; - int err; - - if (!PyArg_NoArgs(args)) - return NULL; - list = PyList_New(0); - if (list == NULL) - return NULL; - for (status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_FIRST); - status == 0; - status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_NEXT)) { - item = PyString_FromStringAndSize((char *)krec.data, (int)krec.size); - if (item == NULL) { - Py_DECREF(list); - return NULL; + PyObject *list, *item; + DBT krec, drec; + int status; + int err; + + if (!PyArg_NoArgs(args)) + return NULL; + list = PyList_New(0); + if (list == NULL) + return NULL; + for (status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_FIRST); + status == 0; + status = (dp->di_bsddb->seq)(dp->di_bsddb, + &krec, &drec, R_NEXT)) { + item = PyString_FromStringAndSize((char *)krec.data, + (int)krec.size); + if (item == NULL) { + Py_DECREF(list); + return NULL; + } + err = PyList_Append(list, item); + Py_DECREF(item); + if (err != 0) { + Py_DECREF(list); + return NULL; + } } - err = PyList_Append(list, item); - Py_DECREF(item); - if (err != 0) { - Py_DECREF(list); - return NULL; + if (status < 0) { + PyErr_SetFromErrno(BsddbError); + Py_DECREF(list); + return NULL; } - } - if (status < 0) { - PyErr_SetFromErrno(BsddbError); - Py_DECREF(list); - return NULL; - } - if (dp->di_size < 0) - dp->di_size = PyList_Size(list); /* We just did the work for this... */ - return list; + if (dp->di_size < 0) + dp->di_size = PyList_Size(list); /* We just did the work */ + return list; } static PyObject * bsddb_has_key(dp, args) - bsddbobject *dp; - PyObject *args; + bsddbobject *dp; + PyObject *args; { - DBT krec, drec; - int status; - char *data; - int size; - - if (!PyArg_Parse(args, "s#", &data, &size)) - return NULL; - krec.data = data; - krec.size = size; - - status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); - if (status < 0) { - PyErr_SetFromErrno(BsddbError); - return NULL; - } - - return PyInt_FromLong(status == 0); + DBT krec, drec; + int status; + char *data; + int size; + + if (!PyArg_Parse(args, "s#", &data, &size)) + return NULL; + krec.data = data; + krec.size = size; + + status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); + if (status < 0) { + PyErr_SetFromErrno(BsddbError); + return NULL; + } + + return PyInt_FromLong(status == 0); } static PyObject * bsddb_set_location(dp, key) - bsddbobject *dp; - PyObject *key; + bsddbobject *dp; + PyObject *key; { - int status; - DBT krec, drec; - char *data; - int size; - - if (!PyArg_Parse(key, "s#", &data, &size)) - return NULL; - krec.data = data; - krec.size = size; - - status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_CURSOR); - if (status != 0) { - if (status < 0) - PyErr_SetFromErrno(BsddbError); - else - PyErr_SetObject(PyExc_KeyError, key); - return NULL; - } - - return Py_BuildValue("s#s#", krec.data, krec.size, drec.data, drec.size); + int status; + DBT krec, drec; + char *data; + int size; + + if (!PyArg_Parse(key, "s#", &data, &size)) + return NULL; + krec.data = data; + krec.size = size; + + status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_CURSOR); + if (status != 0) { + if (status < 0) + PyErr_SetFromErrno(BsddbError); + else + PyErr_SetObject(PyExc_KeyError, key); + return NULL; + } + + return Py_BuildValue("s#s#", krec.data, krec.size, + drec.data, drec.size); } static PyObject * bsddb_seq(dp, args, sequence_request) - bsddbobject *dp; - PyObject *args; - int sequence_request; + bsddbobject *dp; + PyObject *args; + int sequence_request; { - int status; - DBT krec, drec; + int status; + DBT krec, drec; - if (!PyArg_NoArgs(args)) - return NULL; + if (!PyArg_NoArgs(args)) + return NULL; - krec.data = 0; - krec.size = 0; + krec.data = 0; + krec.size = 0; - status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, sequence_request); - if (status != 0) { - if (status < 0) - PyErr_SetFromErrno(BsddbError); - else - PyErr_SetObject(PyExc_KeyError, args); - return NULL; - } + status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, + &drec, sequence_request); + if (status != 0) { + if (status < 0) + PyErr_SetFromErrno(BsddbError); + else + PyErr_SetObject(PyExc_KeyError, args); + return NULL; + } - return Py_BuildValue("s#s#", krec.data, krec.size, drec.data, drec.size); + return Py_BuildValue("s#s#", krec.data, krec.size, + drec.data, drec.size); } static PyObject * bsddb_next(dp, key) - bsddbobject *dp; - PyObject *key; + bsddbobject *dp; + PyObject *key; { - return bsddb_seq(dp, key, R_NEXT); + return bsddb_seq(dp, key, R_NEXT); } static PyObject * bsddb_previous(dp, key) - bsddbobject *dp; - PyObject *key; + bsddbobject *dp; + PyObject *key; { - return bsddb_seq(dp, key, R_PREV); + return bsddb_seq(dp, key, R_PREV); } static PyObject * bsddb_first(dp, key) - bsddbobject *dp; - PyObject *key; + bsddbobject *dp; + PyObject *key; { - return bsddb_seq(dp, key, R_FIRST); + return bsddb_seq(dp, key, R_FIRST); } static PyObject * bsddb_last(dp, key) - bsddbobject *dp; - PyObject *key; + bsddbobject *dp; + PyObject *key; { - return bsddb_seq(dp, key, R_LAST); + return bsddb_seq(dp, key, R_LAST); } static PyObject * bsddb_sync(dp, args) - bsddbobject *dp; - PyObject *args; + bsddbobject *dp; + PyObject *args; { - int status; - - status = (dp->di_bsddb->sync)(dp->di_bsddb, 0); - if (status != 0) { - PyErr_SetFromErrno(BsddbError); - return NULL; - } - return PyInt_FromLong(status = 0); + int status; + + status = (dp->di_bsddb->sync)(dp->di_bsddb, 0); + if (status != 0) { + PyErr_SetFromErrno(BsddbError); + return NULL; + } + return PyInt_FromLong(status = 0); } static PyMethodDef bsddb_methods[] = { - {"close", (PyCFunction)bsddb_close}, - {"keys", (PyCFunction)bsddb_keys}, - {"has_key", (PyCFunction)bsddb_has_key}, - {"set_location", (PyCFunction)bsddb_set_location}, - {"next", (PyCFunction)bsddb_next}, - {"previous", (PyCFunction)bsddb_previous}, - {"first", (PyCFunction)bsddb_first}, - {"last", (PyCFunction)bsddb_last}, - {"sync", (PyCFunction)bsddb_sync}, - {NULL, NULL} /* sentinel */ + {"close", (PyCFunction)bsddb_close}, + {"keys", (PyCFunction)bsddb_keys}, + {"has_key", (PyCFunction)bsddb_has_key}, + {"set_location", (PyCFunction)bsddb_set_location}, + {"next", (PyCFunction)bsddb_next}, + {"previous", (PyCFunction)bsddb_previous}, + {"first", (PyCFunction)bsddb_first}, + {"last", (PyCFunction)bsddb_last}, + {"sync", (PyCFunction)bsddb_sync}, + {NULL, NULL} /* sentinel */ }; static PyObject * bsddb_getattr(dp, name) - PyObject *dp; - char *name; + PyObject *dp; + char *name; { - return Py_FindMethod(bsddb_methods, dp, name); + return Py_FindMethod(bsddb_methods, dp, name); } static PyTypeObject Bsddbtype = { - PyObject_HEAD_INIT(NULL) - 0, - "bsddb", - sizeof(bsddbobject), - 0, - (destructor)bsddb_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)bsddb_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - &bsddb_as_mapping, /*tp_as_mapping*/ + PyObject_HEAD_INIT(NULL) + 0, + "bsddb", + sizeof(bsddbobject), + 0, + (destructor)bsddb_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)bsddb_getattr, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + &bsddb_as_mapping, /*tp_as_mapping*/ }; static PyObject * bsdhashopen(self, args) - PyObject *self; - PyObject *args; + PyObject *self; + PyObject *args; { - char *file; - char *flag = NULL; - int flags = O_RDONLY; - int mode = 0666; - int bsize = 0; - int ffactor = 0; - int nelem = 0; - int cachesize = 0; - int hash = 0; /* XXX currently ignored */ - int lorder = 0; - - if (!PyArg_ParseTuple(args, "s|siiiiiii", - &file, &flag, &mode, - &bsize, &ffactor, &nelem, &cachesize, &hash, &lorder)) - return NULL; - if (flag != NULL) { - /* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ - if (flag[0] == 'r') - flags = O_RDONLY; - else if (flag[0] == 'w') - flags = O_RDWR; - else if (flag[0] == 'c') - flags = O_RDWR|O_CREAT; - else if (flag[0] == 'n') - flags = O_RDWR|O_CREAT|O_TRUNC; - else { - PyErr_SetString(BsddbError, - "Flag should begin with 'r', 'w', 'c' or 'n'"); - return NULL; - } - if (flag[1] == 'l') { + char *file; + char *flag = NULL; + int flags = O_RDONLY; + int mode = 0666; + int bsize = 0; + int ffactor = 0; + int nelem = 0; + int cachesize = 0; + int hash = 0; /* XXX currently ignored */ + int lorder = 0; + + if (!PyArg_ParseTuple(args, "s|siiiiiii", + &file, &flag, &mode, + &bsize, &ffactor, &nelem, &cachesize, + &hash, &lorder)) + return NULL; + if (flag != NULL) { + /* XXX need to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ + if (flag[0] == 'r') + flags = O_RDONLY; + else if (flag[0] == 'w') + flags = O_RDWR; + else if (flag[0] == 'c') + flags = O_RDWR|O_CREAT; + else if (flag[0] == 'n') + flags = O_RDWR|O_CREAT|O_TRUNC; + else { + PyErr_SetString(BsddbError, + "Flag should begin with 'r', 'w', 'c' or 'n'"); + return NULL; + } + if (flag[1] == 'l') { #if defined(O_EXLOCK) && defined(O_SHLOCK) - if (flag[0] == 'r') - flags |= O_SHLOCK; - else - flags |= O_EXLOCK; + if (flag[0] == 'r') + flags |= O_SHLOCK; + else + flags |= O_EXLOCK; #else - PyErr_SetString(BsddbError, "locking not supported on this platform"); - return NULL; + PyErr_SetString(BsddbError, + "locking not supported on this platform"); + return NULL; #endif + } } - } - return newdbhashobject(file, flags, mode, - bsize, ffactor, nelem, cachesize, hash, lorder); + return newdbhashobject(file, flags, mode, + bsize, ffactor, nelem, cachesize, hash, lorder); } static PyObject * bsdbtopen(self, args) - PyObject *self; - PyObject *args; + PyObject *self; + PyObject *args; { - char *file; - char *flag = NULL; - int flags = O_RDONLY; - int mode = 0666; - int cachesize = 0; - int maxkeypage = 0; - int minkeypage = 0; - int btflags = 0; - unsigned int psize = 0; - int lorder = 0; - - if (!PyArg_ParseTuple(args, "s|siiiiiii", - &file, &flag, &mode, - &btflags, &cachesize, &maxkeypage, &minkeypage, - &psize, &lorder)) - return NULL; - if (flag != NULL) { - /* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ - if (flag[0] == 'r') - flags = O_RDONLY; - else if (flag[0] == 'w') - flags = O_RDWR; - else if (flag[0] == 'c') - flags = O_RDWR|O_CREAT; - else if (flag[0] == 'n') - flags = O_RDWR|O_CREAT|O_TRUNC; - else { - PyErr_SetString(BsddbError, - "Flag should begin with 'r', 'w', 'c' or 'n'"); - return NULL; - } - if (flag[1] == 'l') { + char *file; + char *flag = NULL; + int flags = O_RDONLY; + int mode = 0666; + int cachesize = 0; + int maxkeypage = 0; + int minkeypage = 0; + int btflags = 0; + unsigned int psize = 0; + int lorder = 0; + + if (!PyArg_ParseTuple(args, "s|siiiiiii", + &file, &flag, &mode, + &btflags, &cachesize, &maxkeypage, &minkeypage, + &psize, &lorder)) + return NULL; + if (flag != NULL) { + /* XXX need to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ + if (flag[0] == 'r') + flags = O_RDONLY; + else if (flag[0] == 'w') + flags = O_RDWR; + else if (flag[0] == 'c') + flags = O_RDWR|O_CREAT; + else if (flag[0] == 'n') + flags = O_RDWR|O_CREAT|O_TRUNC; + else { + PyErr_SetString(BsddbError, + "Flag should begin with 'r', 'w', 'c' or 'n'"); + return NULL; + } + if (flag[1] == 'l') { #if defined(O_EXLOCK) && defined(O_SHLOCK) - if (flag[0] == 'r') - flags |= O_SHLOCK; - else - flags |= O_EXLOCK; + if (flag[0] == 'r') + flags |= O_SHLOCK; + else + flags |= O_EXLOCK; #else - PyErr_SetString(BsddbError, "locking not supported on this platform"); - return NULL; + PyErr_SetString(BsddbError, + "locking not supported on this platform"); + return NULL; #endif + } } - } - return newdbbtobject(file, flags, mode, - btflags, cachesize, maxkeypage, minkeypage, - psize, lorder); + return newdbbtobject(file, flags, mode, + btflags, cachesize, maxkeypage, minkeypage, + psize, lorder); } static PyObject * bsdrnopen(self, args) - PyObject *self; - PyObject *args; + PyObject *self; + PyObject *args; { - char *file; - char *flag = NULL; - int flags = O_RDONLY; - int mode = 0666; - int cachesize = 0; - int rnflags = 0; - unsigned int psize = 0; - int lorder = 0; - size_t reclen = 0; - char *bval = ""; - char *bfname = NULL; - - if (!PyArg_ParseTuple(args, "s|siiiiiiss", - &file, &flag, &mode, - &rnflags, &cachesize, &psize, &lorder, - &reclen, &bval, &bfname)) - return NULL; - if (flag != NULL) { - /* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ - if (flag[0] == 'r') - flags = O_RDONLY; - else if (flag[0] == 'w') - flags = O_RDWR; - else if (flag[0] == 'c') - flags = O_RDWR|O_CREAT; - else if (flag[0] == 'n') - flags = O_RDWR|O_CREAT|O_TRUNC; - else { - PyErr_SetString(BsddbError, - "Flag should begin with 'r', 'w', 'c' or 'n'"); - return NULL; - } - if (flag[1] == 'l') { + char *file; + char *flag = NULL; + int flags = O_RDONLY; + int mode = 0666; + int cachesize = 0; + int rnflags = 0; + unsigned int psize = 0; + int lorder = 0; + size_t reclen = 0; + char *bval = ""; + char *bfname = NULL; + + if (!PyArg_ParseTuple(args, "s|siiiiiiss", + &file, &flag, &mode, + &rnflags, &cachesize, &psize, &lorder, + &reclen, &bval, &bfname)) + return NULL; + +# if 0 + printf("file: %s\n", file); + printf("flag: %s\n", flag); + printf("mode: %d\n", mode); + printf("rnflags: 0x%x\n", rnflags); + printf("cachesize: %d\n", cachesize); + printf("psize: %d\n", psize); + printf("lorder: %d\n", 0); + printf("reclen: %d\n", reclen); + printf("bval: %c\n", bval[0]); + printf("bfname %s\n", bfname); +#endif + + if (flag != NULL) { + /* XXX need to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ + if (flag[0] == 'r') + flags = O_RDONLY; + else if (flag[0] == 'w') + flags = O_RDWR; + else if (flag[0] == 'c') + flags = O_RDWR|O_CREAT; + else if (flag[0] == 'n') + flags = O_RDWR|O_CREAT|O_TRUNC; + else { + PyErr_SetString(BsddbError, + "Flag should begin with 'r', 'w', 'c' or 'n'"); + return NULL; + } + if (flag[1] == 'l') { #if defined(O_EXLOCK) && defined(O_SHLOCK) - if (flag[0] == 'r') - flags |= O_SHLOCK; - else - flags |= O_EXLOCK; + if (flag[0] == 'r') + flags |= O_SHLOCK; + else + flags |= O_EXLOCK; #else - PyErr_SetString(BsddbError, "locking not supported on this platform"); - return NULL; + PyErr_SetString(BsddbError, + "locking not supported on this platform"); + return NULL; #endif + } + else if (flag[1] != '\0') { + PyErr_SetString(BsddbError, + "Flag char 2 should be 'l' or absent"); + return NULL; + } } - else if (flag[1] != '\0') { - PyErr_SetString(BsddbError, - "Flag char 2 should be 'l' or absent"); - return NULL; - } - } - return newdbrnobject(file, flags, mode, - rnflags, cachesize, psize, lorder, bval[0], bfname); + return newdbrnobject(file, flags, mode, rnflags, cachesize, + psize, lorder, reclen, bval[0], bfname); } static PyMethodDef bsddbmodule_methods[] = { - {"hashopen", (PyCFunction)bsdhashopen, 1}, - {"btopen", (PyCFunction)bsdbtopen, 1}, - {"rnopen", (PyCFunction)bsdrnopen, 1}, - {0, 0}, + {"hashopen", (PyCFunction)bsdhashopen, 1}, + {"btopen", (PyCFunction)bsdbtopen, 1}, + {"rnopen", (PyCFunction)bsdrnopen, 1}, + {0, 0}, }; void initbsddb() { - PyObject *m, *d; - - Bsddbtype.ob_type = &PyType_Type; - m = Py_InitModule("bsddb", bsddbmodule_methods); - d = PyModule_GetDict(m); - BsddbError = PyString_FromString("bsddb.error"); - if (BsddbError == NULL || PyDict_SetItemString(d, "error", BsddbError)) - Py_FatalError("can't define bsddb.error"); + PyObject *m, *d; + + Bsddbtype.ob_type = &PyType_Type; + m = Py_InitModule("bsddb", bsddbmodule_methods); + d = PyModule_GetDict(m); + BsddbError = PyString_FromString("bsddb.error"); + if (BsddbError == NULL || PyDict_SetItemString(d, "error", BsddbError)) + Py_FatalError("can't define bsddb.error"); } |