~ubuntu-branches/ubuntu/precise/python3-stdlib-extensions/precise

« back to all changes in this revision

Viewing changes to 3.2/Modules/_gdbmmodule.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2011-02-21 11:59:17 UTC
  • Revision ID: james.westby@ubuntu.com-20110221115917-n10ana6iovsy1erx
Tags: 3.2-1
Python 3.2 release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
135
135
    return v;
136
136
}
137
137
 
 
138
PyDoc_STRVAR(dbm_get__doc__,
 
139
"get(key[, default]) -> value\n\
 
140
Get the value for key, or default if not present; if not given,\n\
 
141
default is None.");
 
142
 
 
143
static PyObject *
 
144
dbm_get(dbmobject *dp, PyObject *args)
 
145
{
 
146
    PyObject *v, *res;
 
147
    PyObject *def = Py_None;
 
148
 
 
149
    if (!PyArg_UnpackTuple(args, "get", 1, 2, &v, &def))
 
150
        return NULL;
 
151
    res = dbm_subscript(dp, v);
 
152
    if (res == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) {
 
153
        PyErr_Clear();
 
154
        Py_INCREF(def);
 
155
        return def;
 
156
    }
 
157
    return res;
 
158
}
 
159
 
138
160
static int
139
161
dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
140
162
{
176
198
    return 0;
177
199
}
178
200
 
 
201
PyDoc_STRVAR(dbm_setdefault__doc__,
 
202
"setdefault(key[, default]) -> value\n\
 
203
Get value for key, or set it to default and return default if not present;\n\
 
204
if not given, default is None.");
 
205
 
 
206
static PyObject *
 
207
dbm_setdefault(dbmobject *dp, PyObject *args)
 
208
{
 
209
    PyObject *v, *res;
 
210
    PyObject *def = Py_None;
 
211
 
 
212
    if (!PyArg_UnpackTuple(args, "setdefault", 1, 2, &v, &def))
 
213
        return NULL;
 
214
    res = dbm_subscript(dp, v);
 
215
    if (res == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) {
 
216
        PyErr_Clear();
 
217
        if (dbm_ass_sub(dp, v, def) < 0)
 
218
            return NULL;
 
219
        return dbm_subscript(dp, v);
 
220
    }
 
221
    return res;
 
222
}
 
223
 
179
224
static PyMappingMethods dbm_as_mapping = {
180
225
    (lenfunc)dbm_length,                /*mp_length*/
181
226
    (binaryfunc)dbm_subscript,          /*mp_subscript*/
378
423
    {"nextkey",   (PyCFunction)dbm_nextkey, METH_VARARGS, dbm_nextkey__doc__},
379
424
    {"reorganize",(PyCFunction)dbm_reorganize,METH_NOARGS, dbm_reorganize__doc__},
380
425
    {"sync",      (PyCFunction)dbm_sync,    METH_NOARGS, dbm_sync__doc__},
 
426
    {"get",       (PyCFunction)dbm_get,     METH_VARARGS, dbm_get__doc__},
 
427
    {"setdefault",(PyCFunction)dbm_setdefault,METH_VARARGS, dbm_setdefault__doc__},
381
428
    {NULL,              NULL}           /* sentinel */
382
429
};
383
430