• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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