Branch data Line data Source code
1 : : /*[clinic input]
2 : : preserve
3 : : [clinic start generated code]*/
4 : :
5 : : PyDoc_STRVAR(_dbm_dbm_close__doc__,
6 : : "close($self, /)\n"
7 : : "--\n"
8 : : "\n"
9 : : "Close the database.");
10 : :
11 : : #define _DBM_DBM_CLOSE_METHODDEF \
12 : : {"close", (PyCFunction)_dbm_dbm_close, METH_NOARGS, _dbm_dbm_close__doc__},
13 : :
14 : : static PyObject *
15 : : _dbm_dbm_close_impl(dbmobject *self);
16 : :
17 : : static PyObject *
18 : 190 : _dbm_dbm_close(dbmobject *self, PyObject *Py_UNUSED(ignored))
19 : : {
20 : 190 : return _dbm_dbm_close_impl(self);
21 : : }
22 : :
23 : : PyDoc_STRVAR(_dbm_dbm_keys__doc__,
24 : : "keys($self, /)\n"
25 : : "--\n"
26 : : "\n"
27 : : "Return a list of all keys in the database.");
28 : :
29 : : #define _DBM_DBM_KEYS_METHODDEF \
30 : : {"keys", _PyCFunction_CAST(_dbm_dbm_keys), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_keys__doc__},
31 : :
32 : : static PyObject *
33 : : _dbm_dbm_keys_impl(dbmobject *self, PyTypeObject *cls);
34 : :
35 : : static PyObject *
36 : 252 : _dbm_dbm_keys(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
37 : : {
38 [ - + ]: 252 : if (nargs) {
39 : 0 : PyErr_SetString(PyExc_TypeError, "keys() takes no arguments");
40 : 0 : return NULL;
41 : : }
42 : 252 : return _dbm_dbm_keys_impl(self, cls);
43 : : }
44 : :
45 : : PyDoc_STRVAR(_dbm_dbm_get__doc__,
46 : : "get($self, key, default=None, /)\n"
47 : : "--\n"
48 : : "\n"
49 : : "Return the value for key if present, otherwise default.");
50 : :
51 : : #define _DBM_DBM_GET_METHODDEF \
52 : : {"get", _PyCFunction_CAST(_dbm_dbm_get), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_get__doc__},
53 : :
54 : : static PyObject *
55 : : _dbm_dbm_get_impl(dbmobject *self, PyTypeObject *cls, const char *key,
56 : : Py_ssize_t key_length, PyObject *default_value);
57 : :
58 : : static PyObject *
59 : 8 : _dbm_dbm_get(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
60 : : {
61 : 8 : PyObject *return_value = NULL;
62 : : static const char * const _keywords[] = {"", "", NULL};
63 : : static _PyArg_Parser _parser = {"s#|O:get", _keywords, 0};
64 : : const char *key;
65 : : Py_ssize_t key_length;
66 : 8 : PyObject *default_value = Py_None;
67 : :
68 [ - + ]: 8 : if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
69 : : &key, &key_length, &default_value)) {
70 : 0 : goto exit;
71 : : }
72 : 8 : return_value = _dbm_dbm_get_impl(self, cls, key, key_length, default_value);
73 : :
74 : 8 : exit:
75 : 8 : return return_value;
76 : : }
77 : :
78 : : PyDoc_STRVAR(_dbm_dbm_setdefault__doc__,
79 : : "setdefault($self, key, default=b\'\', /)\n"
80 : : "--\n"
81 : : "\n"
82 : : "Return the value for key if present, otherwise default.\n"
83 : : "\n"
84 : : "If key is not in the database, it is inserted with default as the value.");
85 : :
86 : : #define _DBM_DBM_SETDEFAULT_METHODDEF \
87 : : {"setdefault", _PyCFunction_CAST(_dbm_dbm_setdefault), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_setdefault__doc__},
88 : :
89 : : static PyObject *
90 : : _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject *cls, const char *key,
91 : : Py_ssize_t key_length, PyObject *default_value);
92 : :
93 : : static PyObject *
94 : 4 : _dbm_dbm_setdefault(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
95 : : {
96 : 4 : PyObject *return_value = NULL;
97 : : static const char * const _keywords[] = {"", "", NULL};
98 : : static _PyArg_Parser _parser = {"s#|O:setdefault", _keywords, 0};
99 : : const char *key;
100 : : Py_ssize_t key_length;
101 : 4 : PyObject *default_value = NULL;
102 : :
103 [ - + ]: 4 : if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
104 : : &key, &key_length, &default_value)) {
105 : 0 : goto exit;
106 : : }
107 : 4 : return_value = _dbm_dbm_setdefault_impl(self, cls, key, key_length, default_value);
108 : :
109 : 4 : exit:
110 : 4 : return return_value;
111 : : }
112 : :
113 : : PyDoc_STRVAR(dbmopen__doc__,
114 : : "open($module, filename, flags=\'r\', mode=0o666, /)\n"
115 : : "--\n"
116 : : "\n"
117 : : "Return a database object.\n"
118 : : "\n"
119 : : " filename\n"
120 : : " The filename to open.\n"
121 : : " flags\n"
122 : : " How to open the file. \"r\" for reading, \"w\" for writing, etc.\n"
123 : : " mode\n"
124 : : " If creating a new file, the mode bits for the new file\n"
125 : : " (e.g. os.O_RDWR).");
126 : :
127 : : #define DBMOPEN_METHODDEF \
128 : : {"open", _PyCFunction_CAST(dbmopen), METH_FASTCALL, dbmopen__doc__},
129 : :
130 : : static PyObject *
131 : : dbmopen_impl(PyObject *module, PyObject *filename, const char *flags,
132 : : int mode);
133 : :
134 : : static PyObject *
135 : 209 : dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
136 : : {
137 : 209 : PyObject *return_value = NULL;
138 : : PyObject *filename;
139 : 209 : const char *flags = "r";
140 : 209 : int mode = 438;
141 : :
142 [ + - - + : 209 : if (!_PyArg_CheckPositional("open", nargs, 1, 3)) {
- - ]
143 : 0 : goto exit;
144 : : }
145 : 209 : filename = args[0];
146 [ + + ]: 209 : if (nargs < 2) {
147 : 5 : goto skip_optional;
148 : : }
149 [ - + ]: 204 : if (!PyUnicode_Check(args[1])) {
150 : 0 : _PyArg_BadArgument("open", "argument 2", "str", args[1]);
151 : 0 : goto exit;
152 : : }
153 : : Py_ssize_t flags_length;
154 : 204 : flags = PyUnicode_AsUTF8AndSize(args[1], &flags_length);
155 [ - + ]: 204 : if (flags == NULL) {
156 : 0 : goto exit;
157 : : }
158 [ - + ]: 204 : if (strlen(flags) != (size_t)flags_length) {
159 : 0 : PyErr_SetString(PyExc_ValueError, "embedded null character");
160 : 0 : goto exit;
161 : : }
162 [ + + ]: 204 : if (nargs < 3) {
163 : 33 : goto skip_optional;
164 : : }
165 : 171 : mode = _PyLong_AsInt(args[2]);
166 [ - + - - ]: 171 : if (mode == -1 && PyErr_Occurred()) {
167 : 0 : goto exit;
168 : : }
169 : 171 : skip_optional:
170 : 209 : return_value = dbmopen_impl(module, filename, flags, mode);
171 : :
172 : 209 : exit:
173 : 209 : return return_value;
174 : : }
175 : : /*[clinic end generated code: output=5798278a05032d0e input=a9049054013a1b77]*/
|