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 *
_dbm_dbm_close(dbmobject * self,PyObject * Py_UNUSED (ignored))18 _dbm_dbm_close(dbmobject *self, PyObject *Py_UNUSED(ignored))
19 {
20 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)_dbm_dbm_keys, METH_NOARGS, _dbm_dbm_keys__doc__},
31
32 static PyObject *
33 _dbm_dbm_keys_impl(dbmobject *self);
34
35 static PyObject *
_dbm_dbm_keys(dbmobject * self,PyObject * Py_UNUSED (ignored))36 _dbm_dbm_keys(dbmobject *self, PyObject *Py_UNUSED(ignored))
37 {
38 return _dbm_dbm_keys_impl(self);
39 }
40
41 PyDoc_STRVAR(_dbm_dbm_get__doc__,
42 "get($self, key, default=None, /)\n"
43 "--\n"
44 "\n"
45 "Return the value for key if present, otherwise default.");
46
47 #define _DBM_DBM_GET_METHODDEF \
48 {"get", (PyCFunction)(void(*)(void))_dbm_dbm_get, METH_FASTCALL, _dbm_dbm_get__doc__},
49
50 static PyObject *
51 _dbm_dbm_get_impl(dbmobject *self, const char *key,
52 Py_ssize_clean_t key_length, PyObject *default_value);
53
54 static PyObject *
_dbm_dbm_get(dbmobject * self,PyObject * const * args,Py_ssize_t nargs)55 _dbm_dbm_get(dbmobject *self, PyObject *const *args, Py_ssize_t nargs)
56 {
57 PyObject *return_value = NULL;
58 const char *key;
59 Py_ssize_clean_t key_length;
60 PyObject *default_value = Py_None;
61
62 if (!_PyArg_ParseStack(args, nargs, "s#|O:get",
63 &key, &key_length, &default_value)) {
64 goto exit;
65 }
66 return_value = _dbm_dbm_get_impl(self, key, key_length, default_value);
67
68 exit:
69 return return_value;
70 }
71
72 PyDoc_STRVAR(_dbm_dbm_setdefault__doc__,
73 "setdefault($self, key, default=b\'\', /)\n"
74 "--\n"
75 "\n"
76 "Return the value for key if present, otherwise default.\n"
77 "\n"
78 "If key is not in the database, it is inserted with default as the value.");
79
80 #define _DBM_DBM_SETDEFAULT_METHODDEF \
81 {"setdefault", (PyCFunction)(void(*)(void))_dbm_dbm_setdefault, METH_FASTCALL, _dbm_dbm_setdefault__doc__},
82
83 static PyObject *
84 _dbm_dbm_setdefault_impl(dbmobject *self, const char *key,
85 Py_ssize_clean_t key_length,
86 PyObject *default_value);
87
88 static PyObject *
_dbm_dbm_setdefault(dbmobject * self,PyObject * const * args,Py_ssize_t nargs)89 _dbm_dbm_setdefault(dbmobject *self, PyObject *const *args, Py_ssize_t nargs)
90 {
91 PyObject *return_value = NULL;
92 const char *key;
93 Py_ssize_clean_t key_length;
94 PyObject *default_value = NULL;
95
96 if (!_PyArg_ParseStack(args, nargs, "s#|O:setdefault",
97 &key, &key_length, &default_value)) {
98 goto exit;
99 }
100 return_value = _dbm_dbm_setdefault_impl(self, key, key_length, default_value);
101
102 exit:
103 return return_value;
104 }
105
106 PyDoc_STRVAR(dbmopen__doc__,
107 "open($module, filename, flags=\'r\', mode=0o666, /)\n"
108 "--\n"
109 "\n"
110 "Return a database object.\n"
111 "\n"
112 " filename\n"
113 " The filename to open.\n"
114 " flags\n"
115 " How to open the file. \"r\" for reading, \"w\" for writing, etc.\n"
116 " mode\n"
117 " If creating a new file, the mode bits for the new file\n"
118 " (e.g. os.O_RDWR).");
119
120 #define DBMOPEN_METHODDEF \
121 {"open", (PyCFunction)(void(*)(void))dbmopen, METH_FASTCALL, dbmopen__doc__},
122
123 static PyObject *
124 dbmopen_impl(PyObject *module, PyObject *filename, const char *flags,
125 int mode);
126
127 static PyObject *
dbmopen(PyObject * module,PyObject * const * args,Py_ssize_t nargs)128 dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
129 {
130 PyObject *return_value = NULL;
131 PyObject *filename;
132 const char *flags = "r";
133 int mode = 438;
134
135 if (!_PyArg_CheckPositional("open", nargs, 1, 3)) {
136 goto exit;
137 }
138 if (!PyUnicode_Check(args[0])) {
139 _PyArg_BadArgument("open", "argument 1", "str", args[0]);
140 goto exit;
141 }
142 if (PyUnicode_READY(args[0]) == -1) {
143 goto exit;
144 }
145 filename = args[0];
146 if (nargs < 2) {
147 goto skip_optional;
148 }
149 if (!PyUnicode_Check(args[1])) {
150 _PyArg_BadArgument("open", "argument 2", "str", args[1]);
151 goto exit;
152 }
153 Py_ssize_t flags_length;
154 flags = PyUnicode_AsUTF8AndSize(args[1], &flags_length);
155 if (flags == NULL) {
156 goto exit;
157 }
158 if (strlen(flags) != (size_t)flags_length) {
159 PyErr_SetString(PyExc_ValueError, "embedded null character");
160 goto exit;
161 }
162 if (nargs < 3) {
163 goto skip_optional;
164 }
165 if (PyFloat_Check(args[2])) {
166 PyErr_SetString(PyExc_TypeError,
167 "integer argument expected, got float" );
168 goto exit;
169 }
170 mode = _PyLong_AsInt(args[2]);
171 if (mode == -1 && PyErr_Occurred()) {
172 goto exit;
173 }
174 skip_optional:
175 return_value = dbmopen_impl(module, filename, flags, mode);
176
177 exit:
178 return return_value;
179 }
180 /*[clinic end generated code: output=7ced103488cbca7a input=a9049054013a1b77]*/
181