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_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 *
_dbm_dbm_keys(dbmobject * self,PyTypeObject * cls,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)36 _dbm_dbm_keys(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
37 {
38     if (nargs) {
39         PyErr_SetString(PyExc_TypeError, "keys() takes no arguments");
40         return NULL;
41     }
42     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 *
_dbm_dbm_get(dbmobject * self,PyTypeObject * cls,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)59 _dbm_dbm_get(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
60 {
61     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     PyObject *default_value = Py_None;
67 
68     if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
69         &key, &key_length, &default_value)) {
70         goto exit;
71     }
72     return_value = _dbm_dbm_get_impl(self, cls, key, key_length, default_value);
73 
74 exit:
75     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 *
_dbm_dbm_setdefault(dbmobject * self,PyTypeObject * cls,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)94 _dbm_dbm_setdefault(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
95 {
96     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     PyObject *default_value = NULL;
102 
103     if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
104         &key, &key_length, &default_value)) {
105         goto exit;
106     }
107     return_value = _dbm_dbm_setdefault_impl(self, cls, key, key_length, default_value);
108 
109 exit:
110     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 *
dbmopen(PyObject * module,PyObject * const * args,Py_ssize_t nargs)135 dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
136 {
137     PyObject *return_value = NULL;
138     PyObject *filename;
139     const char *flags = "r";
140     int mode = 438;
141 
142     if (!_PyArg_CheckPositional("open", nargs, 1, 3)) {
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     mode = _PyLong_AsInt(args[2]);
166     if (mode == -1 && PyErr_Occurred()) {
167         goto exit;
168     }
169 skip_optional:
170     return_value = dbmopen_impl(module, filename, flags, mode);
171 
172 exit:
173     return return_value;
174 }
175 /*[clinic end generated code: output=5798278a05032d0e input=a9049054013a1b77]*/
176