static PyObject * dbm_has_key(register dbmobject *dp, PyObject *args) { datum key, val; int tmp_size; if (!PyArg_ParseTuple(args, "s#:has_key", &key.dptr, &tmp_size)) return NULL; key.dsize = tmp_size; check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); return PyInt_FromLong(val.dptr != NULL); }
static PyObject * _gdbm_gdbm_reorganize_impl(dbmobject *self) /*[clinic end generated code: output=38d9624df92e961d input=f6bea85bcfd40dd2]*/ { check_dbmobject_open(self); errno = 0; if (gdbm_reorganize(self->di_dbm) < 0) { if (errno != 0) PyErr_SetFromErrno(DbmError); else PyErr_SetString(DbmError, gdbm_strerror(gdbm_errno)); return NULL; } Py_INCREF(Py_None); return Py_None; }
static PyObject * _dbm_dbm_get_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) /*[clinic end generated code: output=b44f95eba8203d93 input=fee97bbe85e84822]*/ { datum dbm_key, val; dbm_key.dptr = (char *)key; dbm_key.dsize = key_length; check_dbmobject_open(self); val = dbm_fetch(self->di_dbm, dbm_key); if (val.dptr != NULL) return PyBytes_FromStringAndSize(val.dptr, val.dsize); Py_INCREF(default_value); return default_value; }
static PyObject * dbm_firstkey(register dbmobject *dp, PyObject *unused) { register PyObject *v; datum key; check_dbmobject_open(dp); key = gdbm_firstkey(dp->di_dbm); if (key.dptr) { v = PyString_FromStringAndSize(key.dptr, key.dsize); free(key.dptr); return v; } else { Py_INCREF(Py_None); return Py_None; } }
static PyObject * dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, int group_right_1, PyObject *default_value) /*[clinic end generated code: checksum=28cf8928811bde51e535d67ae98ea039d79df717]*/ { datum dbm_key, val; if (!group_right_1) default_value = Py_None; dbm_key.dptr = (char *)key; dbm_key.dsize = key_length; check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, dbm_key); if (val.dptr != NULL) return PyBytes_FromStringAndSize(val.dptr, val.dsize); Py_INCREF(default_value); return default_value; }
static PyObject * _gdbm_gdbm_firstkey_impl(dbmobject *self) /*[clinic end generated code: output=9ff85628d84b65d2 input=0dbd6a335d69bba0]*/ { PyObject *v; datum key; check_dbmobject_open(self); key = gdbm_firstkey(self->di_dbm); if (key.dptr) { v = PyBytes_FromStringAndSize(key.dptr, key.dsize); free(key.dptr); return v; } else { Py_INCREF(Py_None); return Py_None; } }
static PyObject * dbm_get(register dbmobject *dp, PyObject *args) { datum key, val; PyObject *defvalue = Py_None; int tmp_size; if (!PyArg_ParseTuple(args, "s#|O:get", &key.dptr, &tmp_size, &defvalue)) return NULL; key.dsize = tmp_size; check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); if (val.dptr != NULL) return PyString_FromStringAndSize(val.dptr, val.dsize); else { Py_INCREF(defvalue); return defvalue; } }
static PyObject * dbm_setdefault(dbmobject *dp, PyObject *args) { datum key, val; PyObject *defvalue = NULL; char *tmp_ptr; Py_ssize_t tmp_size; if (!PyArg_ParseTuple(args, "s#|O:setdefault", &tmp_ptr, &tmp_size, &defvalue)) return NULL; key.dptr = tmp_ptr; key.dsize = tmp_size; check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); if (val.dptr != NULL) return PyBytes_FromStringAndSize(val.dptr, val.dsize); if (defvalue == NULL) { defvalue = PyBytes_FromStringAndSize(NULL, 0); if (defvalue == NULL) return NULL; val.dptr = NULL; val.dsize = 0; } else { if ( !PyArg_Parse(defvalue, "s#", &val.dptr, &tmp_size) ) { PyErr_SetString(PyExc_TypeError, "dbm mappings have byte string elements only"); return NULL; } val.dsize = tmp_size; Py_INCREF(defvalue); } if (dbm_store(dp->di_dbm, key, val, DBM_INSERT) < 0) { dbm_clearerr(dp->di_dbm); PyErr_SetString(DbmError, "cannot add item to database"); Py_DECREF(defvalue); return NULL; } return defvalue; }
static PyObject * _dbm_dbm_setdefault_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) /*[clinic end generated code: output=52545886cf272161 input=6a3b99ae91f20203]*/ { datum dbm_key, val; Py_ssize_t tmp_size; dbm_key.dptr = (char *)key; dbm_key.dsize = key_length; check_dbmobject_open(self); val = dbm_fetch(self->di_dbm, dbm_key); if (val.dptr != NULL) return PyBytes_FromStringAndSize(val.dptr, val.dsize); if (default_value == NULL) { default_value = PyBytes_FromStringAndSize(NULL, 0); if (default_value == NULL) return NULL; val.dptr = NULL; val.dsize = 0; } else { if ( !PyArg_Parse(default_value, "s#", &val.dptr, &tmp_size) ) { PyErr_SetString(PyExc_TypeError, "dbm mappings have byte string elements only"); return NULL; } val.dsize = tmp_size; Py_INCREF(default_value); } if (dbm_store(self->di_dbm, dbm_key, val, DBM_INSERT) < 0) { dbm_clearerr(self->di_dbm); PyErr_SetString(DbmError, "cannot add item to database"); Py_DECREF(default_value); return NULL; } return default_value; }
static PyObject * _gdbm_gdbm_nextkey_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length) /*[clinic end generated code: output=192ab892de6eb2f6 input=1f1606943614e36f]*/ { PyObject *v; datum dbm_key, nextkey; dbm_key.dptr = (char *)key; dbm_key.dsize = key_length; check_dbmobject_open(self); nextkey = gdbm_nextkey(self->di_dbm, dbm_key); if (nextkey.dptr) { v = PyBytes_FromStringAndSize(nextkey.dptr, nextkey.dsize); free(nextkey.dptr); return v; } else { Py_INCREF(Py_None); return Py_None; } }
static PyObject * _gdbm_gdbm_keys_impl(dbmobject *self) /*[clinic end generated code: output=cb4b1776c3645dcc input=1832ee0a3132cfaf]*/ { PyObject *v, *item; datum key, nextkey; int err; if (self == NULL || !is_dbmobject(self)) { PyErr_BadInternalCall(); return NULL; } check_dbmobject_open(self); v = PyList_New(0); if (v == NULL) return NULL; key = gdbm_firstkey(self->di_dbm); while (key.dptr) { item = PyBytes_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(self->di_dbm, key); free(key.dptr); key = nextkey; } return v; }
static PyObject * dbm_keys(register dbmobject *dp, PyObject *unused) { register PyObject *v, *item; datum key, nextkey; int err; if (dp == NULL || !is_dbmobject(dp)) { PyErr_BadInternalCall(); return NULL; } check_dbmobject_open(dp); v = PyList_New(0); if (v == NULL) return NULL; key = gdbm_firstkey(dp->di_dbm); while (key.dptr) { 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); key = nextkey; } return v; }
static PyObject * dbm_subscript(dbmobject *dp, PyObject *key) { datum drec, krec; Py_ssize_t tmp_size; if (!PyArg_Parse(key, "s#", &krec.dptr, &tmp_size) ) return NULL; krec.dsize = tmp_size; check_dbmobject_open(dp); drec = dbm_fetch(dp->di_dbm, krec); if ( drec.dptr == 0 ) { PyErr_SetObject(PyExc_KeyError, key); return NULL; } if ( dbm_error(dp->di_dbm) ) { dbm_clearerr(dp->di_dbm); PyErr_SetString(DbmError, ""); return NULL; } return PyBytes_FromStringAndSize(drec.dptr, drec.dsize); }