diff options
author | Roger E. Masse <rmasse@newcnri.cnri.reston.va.us> | 1996-12-17 19:55:33 (GMT) |
---|---|---|
committer | Roger E. Masse <rmasse@newcnri.cnri.reston.va.us> | 1996-12-17 19:55:33 (GMT) |
commit | b15bef85a781cc66c9fd98f7d19eca2304f7d727 (patch) | |
tree | 5e90f2cc2a365b6c23ce52208d4c40a4c874c55b /Modules/gdbmmodule.c | |
parent | d87e0bf6518b1ae752a82a46eb66417023b1428d (diff) | |
download | cpython-b15bef85a781cc66c9fd98f7d19eca2304f7d727.zip cpython-b15bef85a781cc66c9fd98f7d19eca2304f7d727.tar.gz cpython-b15bef85a781cc66c9fd98f7d19eca2304f7d727.tar.bz2 |
Renamed in a grand-ee-ous way!
Diffstat (limited to 'Modules/gdbmmodule.c')
-rw-r--r-- | Modules/gdbmmodule.c | 347 |
1 files changed, 176 insertions, 171 deletions
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c index e4829ea..de5f94a 100644 --- a/Modules/gdbmmodule.c +++ b/Modules/gdbmmodule.c @@ -36,8 +36,7 @@ PERFORMANCE OF THIS SOFTWARE. /* DBM module using dictionary interface */ -#include "allobjects.h" -#include "modsupport.h" +#include "Python.h" #include <sys/types.h> #include <sys/stat.h> @@ -45,39 +44,40 @@ PERFORMANCE OF THIS SOFTWARE. #include "gdbm.h" typedef struct { - OB_HEAD + PyObject_HEAD int di_size; /* -1 means recompute */ GDBM_FILE di_dbm; } dbmobject; -staticforward typeobject Dbmtype; +staticforward PyTypeObject Dbmtype; #define is_dbmobject(v) ((v)->ob_type == &Dbmtype) -static object *DbmError; +static PyObject *DbmError; -static object * +static PyObject * newdbmobject(file, flags, mode) - char *file; - int flags; - int mode; + char *file; +int flags; +int mode; { dbmobject *dp; - dp = NEWOBJ(dbmobject, &Dbmtype); + dp = PyObject_NEW(dbmobject, &Dbmtype); if (dp == NULL) return NULL; dp->di_size = -1; errno = 0; if ( (dp->di_dbm = gdbm_open(file, 0, flags, mode, NULL)) == 0 ) { - if (errno != 0) - err_errno(DbmError); - else - err_setstr(DbmError, (char *) gdbm_strerror(gdbm_errno)); - DECREF(dp); - return NULL; + if (errno != 0) + PyErr_SetFromErrno(DbmError); + else + PyErr_SetString(DbmError, + (char *) gdbm_strerror(gdbm_errno)); + Py_DECREF(dp); + return NULL; } - return (object *)dp; + return (PyObject *)dp; } /* Methods */ @@ -87,8 +87,8 @@ dbm_dealloc(dp) register dbmobject *dp; { if ( dp->di_dbm ) - gdbm_close(dp->di_dbm); - DEL(dp); + gdbm_close(dp->di_dbm); + PyMem_DEL(dp); } static int @@ -96,39 +96,40 @@ dbm_length(dp) dbmobject *dp; { if ( dp->di_size < 0 ) { - datum key,okey; - int size; - okey.dsize=0; - - size = 0; - for ( key=gdbm_firstkey(dp->di_dbm); key.dptr; - key = gdbm_nextkey(dp->di_dbm,okey)) { - size++; - if(okey.dsize) free(okey.dptr); - okey=key; - } - dp->di_size = size; + datum key,okey; + int size; + okey.dsize=0; + + size = 0; + for ( key=gdbm_firstkey(dp->di_dbm); key.dptr; + key = gdbm_nextkey(dp->di_dbm,okey)) { + size++; + if(okey.dsize) free(okey.dptr); + okey=key; + } + dp->di_size = size; } return dp->di_size; } -static object * +static PyObject * dbm_subscript(dp, key) dbmobject *dp; - register object *key; +register PyObject *key; { - object *v; + PyObject *v; datum drec, krec; - if (!getargs(key, "s#", &krec.dptr, &krec.dsize) ) + if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) ) return NULL; drec = gdbm_fetch(dp->di_dbm, krec); if ( drec.dptr == 0 ) { - err_setstr(KeyError, GETSTRINGVALUE((stringobject *)key)); - return NULL; + PyErr_SetString(PyExc_KeyError, + PyString_AS_STRING((PyStringObject *)key)); + return NULL; } - v = newsizedstringobject(drec.dptr, drec.dsize); + v = PyString_FromStringAndSize(drec.dptr, drec.dsize); free(drec.dptr); return v; } @@ -136,260 +137,264 @@ dbm_subscript(dp, key) static int dbm_ass_sub(dp, v, w) dbmobject *dp; - object *v, *w; +PyObject *v, *w; { datum krec, drec; - if ( !getargs(v, "s#", &krec.dptr, &krec.dsize) ) { - err_setstr(TypeError, "gdbm mappings have string indices only"); - return -1; + if ( !PyArg_Parse(v, "s#", &krec.dptr, &krec.dsize) ) { + PyErr_SetString(PyExc_TypeError, + "gdbm mappings have string indices only"); + return -1; } dp->di_size = -1; if (w == NULL) { - if ( gdbm_delete(dp->di_dbm, krec) < 0 ) { - err_setstr(KeyError, GETSTRINGVALUE((stringobject *)v)); - return -1; - } + if ( gdbm_delete(dp->di_dbm, krec) < 0 ) { + PyErr_SetString(PyExc_KeyError, + PyString_AS_STRING((PyStringObject *)v)); + return -1; + } } else { - if ( !getargs(w, "s#", &drec.dptr, &drec.dsize) ) { - err_setstr(TypeError, - "gdbm mappings have string elements only"); - return -1; - } - errno = 0; - if ( gdbm_store(dp->di_dbm, krec, drec, GDBM_REPLACE) < 0 ) { - if (errno != 0) - err_errno(DbmError); - else - err_setstr(DbmError, (char *) gdbm_strerror(gdbm_errno)); - return -1; - } + if ( !PyArg_Parse(w, "s#", &drec.dptr, &drec.dsize) ) { + PyErr_SetString(PyExc_TypeError, + "gdbm mappings have string elements only"); + return -1; + } + errno = 0; + if ( gdbm_store(dp->di_dbm, krec, drec, GDBM_REPLACE) < 0 ) { + if (errno != 0) + PyErr_SetFromErrno(DbmError); + else + PyErr_SetString(DbmError, + (char *) gdbm_strerror(gdbm_errno)); + return -1; + } } return 0; } -static mapping_methods dbm_as_mapping = { +static PyMappingMethods dbm_as_mapping = { (inquiry)dbm_length, /*mp_length*/ (binaryfunc)dbm_subscript, /*mp_subscript*/ (objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/ }; -static object * +static PyObject * dbm_close(dp, args) register dbmobject *dp; - object *args; +PyObject *args; { - if ( !getnoarg(args) ) + if ( !PyArg_NoArgs(args) ) return NULL; if ( dp->di_dbm ) gdbm_close(dp->di_dbm); dp->di_dbm = NULL; - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * dbm_keys(dp, args) register dbmobject *dp; - object *args; +PyObject *args; { - register object *v, *item; + register PyObject *v, *item; datum key, nextkey; int err; if (dp == NULL || !is_dbmobject(dp)) { - err_badcall(); + PyErr_BadInternalCall(); return NULL; } - if (!getnoarg(args)) + if (!PyArg_NoArgs(args)) return NULL; - v = newlistobject(0); + v = PyList_New(0); if (v == NULL) return NULL; key = gdbm_firstkey(dp->di_dbm); while (key.dptr) { - item = newsizedstringobject(key.dptr, key.dsize); - if (item == NULL) { - free(key.dptr); - DECREF(v); - return NULL; - } - err = addlistitem(v, item); - DECREF(item); - if (err != 0) { + item = PyString_FromStringAndSize(key.dptr, key.dsize); + if (item == NULL) { + free(key.dptr); + Py_DECREF(v); + return NULL; + } + err = PyList_Append(v, item); + Py_DECREF(item); + if (err != 0) { + free(key.dptr); + Py_DECREF(v); + return NULL; + } + nextkey = gdbm_nextkey(dp->di_dbm, key); free(key.dptr); - DECREF(v); - return NULL; - } - nextkey = gdbm_nextkey(dp->di_dbm, key); - free(key.dptr); - key = nextkey; + key = nextkey; } return v; } -static object * +static PyObject * dbm_has_key(dp, args) register dbmobject *dp; - object *args; +PyObject *args; { datum key; - if (!getargs(args, "s#", &key.dptr, &key.dsize)) + if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize)) return NULL; - return newintobject((long) gdbm_exists(dp->di_dbm, key)); + return PyInt_FromLong((long) gdbm_exists(dp->di_dbm, key)); } -static object * +static PyObject * dbm_firstkey(dp, args) register dbmobject *dp; - object *args; +PyObject *args; { - register object *v; + register PyObject *v; datum key; - if (!getnoarg(args)) + if (!PyArg_NoArgs(args)) return NULL; key = gdbm_firstkey(dp->di_dbm); if (key.dptr) { - v = newsizedstringobject(key.dptr, key.dsize); - free(key.dptr); - return v; + v = PyString_FromStringAndSize(key.dptr, key.dsize); + free(key.dptr); + return v; } else { - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } } -static object * +static PyObject * dbm_nextkey(dp, args) register dbmobject *dp; - object *args; +PyObject *args; { - register object *v; + register PyObject *v; datum key, nextkey; - if (!getargs(args, "s#", &key.dptr, &key.dsize)) + if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize)) return NULL; nextkey = gdbm_nextkey(dp->di_dbm, key); if (nextkey.dptr) { - v = newsizedstringobject(nextkey.dptr, nextkey.dsize); - free(nextkey.dptr); - return v; + v = PyString_FromStringAndSize(nextkey.dptr, nextkey.dsize); + free(nextkey.dptr); + return v; } else { - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } } -static object * +static PyObject * dbm_reorganize(dp, args) register dbmobject *dp; - object *args; +PyObject *args; { - if (!getnoarg(args)) + if (!PyArg_NoArgs(args)) return NULL; errno = 0; if (gdbm_reorganize(dp->di_dbm) < 0) { - if (errno != 0) - err_errno(DbmError); - else - err_setstr(DbmError, (char *) gdbm_strerror(gdbm_errno)); - return NULL; + if (errno != 0) + PyErr_SetFromErrno(DbmError); + else + PyErr_SetString(DbmError, + (char *) gdbm_strerror(gdbm_errno)); + return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static struct methodlist dbm_methods[] = { - {"close", (method)dbm_close}, - {"keys", (method)dbm_keys}, - {"has_key", (method)dbm_has_key}, - {"firstkey", (method)dbm_firstkey}, - {"nextkey", (method)dbm_nextkey}, - {"reorganize", (method)dbm_reorganize}, +static PyMethodDef dbm_methods[] = { + {"close", (PyCFunction)dbm_close}, + {"keys", (PyCFunction)dbm_keys}, + {"has_key", (PyCFunction)dbm_has_key}, + {"firstkey", (PyCFunction)dbm_firstkey}, + {"nextkey", (PyCFunction)dbm_nextkey}, + {"reorganize", (PyCFunction)dbm_reorganize}, {NULL, NULL} /* sentinel */ }; -static object * +static PyObject * dbm_getattr(dp, name) dbmobject *dp; - char *name; +char *name; { - return findmethod(dbm_methods, (object *)dp, name); + return Py_FindMethod(dbm_methods, (PyObject *)dp, name); } -static typeobject Dbmtype = { - OB_HEAD_INIT(&Typetype) +static PyTypeObject Dbmtype = { + PyObject_HEAD_INIT(&PyType_Type) 0, "gdbm", sizeof(dbmobject), 0, - (destructor)dbm_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)dbm_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - &dbm_as_mapping, /*tp_as_mapping*/ + (destructor)dbm_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)dbm_getattr, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + &dbm_as_mapping, /*tp_as_mapping*/ }; /* ----------------------------------------------------------------- */ -static object * +static PyObject * dbmopen(self, args) - object *self; - object *args; + PyObject *self; +PyObject *args; { - char *name; - char *flags = "r "; - int iflags; - int mode = 0666; + char *name; + char *flags = "r "; + int iflags; + int mode = 0666; /* XXXX add other flags. 2nd character can be "f" meaning open in fast mode. */ - if ( !newgetargs(args, "s|si", &name, &flags, &mode) ) - return NULL; + if ( !PyArg_ParseTuple(args, "s|si", &name, &flags, &mode) ) + return NULL; switch (flags[0]) { case 'r': - iflags = GDBM_READER; - break; + iflags = GDBM_READER; + break; case 'w': - iflags = GDBM_WRITER; - break; + iflags = GDBM_WRITER; + break; case 'c': - iflags = GDBM_WRCREAT; - break; + iflags = GDBM_WRCREAT; + break; case 'n': - iflags = GDBM_NEWDB; - break; - default: - err_setstr(DbmError, - "Flags should be one of 'r', 'w', 'c' or 'n'"); - return NULL; + iflags = GDBM_NEWDB; + break; + default: + PyErr_SetString(DbmError, + "Flags should be one of 'r', 'w', 'c' or 'n'"); + return NULL; } if (flags[1] == 'f') - iflags |= GDBM_FAST; - return newdbmobject(name, iflags, mode); + iflags |= GDBM_FAST; + return newdbmobject(name, iflags, mode); } -static struct methodlist dbmmodule_methods[] = { - { "open", (method)dbmopen, 1 }, - { 0, 0 }, +static PyMethodDef dbmmodule_methods[] = { + { "open", (PyCFunction)dbmopen, 1 }, + { 0, 0 }, }; void initgdbm() { - object *m, *d; + PyObject *m, *d; - m = initmodule("gdbm", dbmmodule_methods); - d = getmoduledict(m); - DbmError = newstringobject("gdbm.error"); - if ( DbmError == NULL || dictinsert(d, "error", DbmError) ) - fatal("can't define gdbm.error"); + m = Py_InitModule("gdbm", dbmmodule_methods); + d = PyModule_GetDict(m); + DbmError = PyString_FromString("gdbm.error"); + if ( DbmError == NULL || PyDict_SetItemString(d, "error", DbmError) ) + Py_FatalError("can't define gdbm.error"); } |