17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_get__doc__,
67db96d56Sopenharmony_ci"get($self, key, default=None, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Get the value for key, or default if not present.");
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci#define _GDBM_GDBM_GET_METHODDEF    \
127db96d56Sopenharmony_ci    {"get", _PyCFunction_CAST(_gdbm_gdbm_get), METH_FASTCALL, _gdbm_gdbm_get__doc__},
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_cistatic PyObject *
157db96d56Sopenharmony_ci_gdbm_gdbm_get_impl(gdbmobject *self, PyObject *key, PyObject *default_value);
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cistatic PyObject *
187db96d56Sopenharmony_ci_gdbm_gdbm_get(gdbmobject *self, PyObject *const *args, Py_ssize_t nargs)
197db96d56Sopenharmony_ci{
207db96d56Sopenharmony_ci    PyObject *return_value = NULL;
217db96d56Sopenharmony_ci    PyObject *key;
227db96d56Sopenharmony_ci    PyObject *default_value = Py_None;
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("get", nargs, 1, 2)) {
257db96d56Sopenharmony_ci        goto exit;
267db96d56Sopenharmony_ci    }
277db96d56Sopenharmony_ci    key = args[0];
287db96d56Sopenharmony_ci    if (nargs < 2) {
297db96d56Sopenharmony_ci        goto skip_optional;
307db96d56Sopenharmony_ci    }
317db96d56Sopenharmony_ci    default_value = args[1];
327db96d56Sopenharmony_ciskip_optional:
337db96d56Sopenharmony_ci    return_value = _gdbm_gdbm_get_impl(self, key, default_value);
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ciexit:
367db96d56Sopenharmony_ci    return return_value;
377db96d56Sopenharmony_ci}
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_setdefault__doc__,
407db96d56Sopenharmony_ci"setdefault($self, key, default=None, /)\n"
417db96d56Sopenharmony_ci"--\n"
427db96d56Sopenharmony_ci"\n"
437db96d56Sopenharmony_ci"Get value for key, or set it to default and return default if not present.");
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci#define _GDBM_GDBM_SETDEFAULT_METHODDEF    \
467db96d56Sopenharmony_ci    {"setdefault", _PyCFunction_CAST(_gdbm_gdbm_setdefault), METH_FASTCALL, _gdbm_gdbm_setdefault__doc__},
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_cistatic PyObject *
497db96d56Sopenharmony_ci_gdbm_gdbm_setdefault_impl(gdbmobject *self, PyObject *key,
507db96d56Sopenharmony_ci                           PyObject *default_value);
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_cistatic PyObject *
537db96d56Sopenharmony_ci_gdbm_gdbm_setdefault(gdbmobject *self, PyObject *const *args, Py_ssize_t nargs)
547db96d56Sopenharmony_ci{
557db96d56Sopenharmony_ci    PyObject *return_value = NULL;
567db96d56Sopenharmony_ci    PyObject *key;
577db96d56Sopenharmony_ci    PyObject *default_value = Py_None;
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("setdefault", nargs, 1, 2)) {
607db96d56Sopenharmony_ci        goto exit;
617db96d56Sopenharmony_ci    }
627db96d56Sopenharmony_ci    key = args[0];
637db96d56Sopenharmony_ci    if (nargs < 2) {
647db96d56Sopenharmony_ci        goto skip_optional;
657db96d56Sopenharmony_ci    }
667db96d56Sopenharmony_ci    default_value = args[1];
677db96d56Sopenharmony_ciskip_optional:
687db96d56Sopenharmony_ci    return_value = _gdbm_gdbm_setdefault_impl(self, key, default_value);
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ciexit:
717db96d56Sopenharmony_ci    return return_value;
727db96d56Sopenharmony_ci}
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_close__doc__,
757db96d56Sopenharmony_ci"close($self, /)\n"
767db96d56Sopenharmony_ci"--\n"
777db96d56Sopenharmony_ci"\n"
787db96d56Sopenharmony_ci"Close the database.");
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci#define _GDBM_GDBM_CLOSE_METHODDEF    \
817db96d56Sopenharmony_ci    {"close", (PyCFunction)_gdbm_gdbm_close, METH_NOARGS, _gdbm_gdbm_close__doc__},
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_cistatic PyObject *
847db96d56Sopenharmony_ci_gdbm_gdbm_close_impl(gdbmobject *self);
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_cistatic PyObject *
877db96d56Sopenharmony_ci_gdbm_gdbm_close(gdbmobject *self, PyObject *Py_UNUSED(ignored))
887db96d56Sopenharmony_ci{
897db96d56Sopenharmony_ci    return _gdbm_gdbm_close_impl(self);
907db96d56Sopenharmony_ci}
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_keys__doc__,
937db96d56Sopenharmony_ci"keys($self, /)\n"
947db96d56Sopenharmony_ci"--\n"
957db96d56Sopenharmony_ci"\n"
967db96d56Sopenharmony_ci"Get a list of all keys in the database.");
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci#define _GDBM_GDBM_KEYS_METHODDEF    \
997db96d56Sopenharmony_ci    {"keys", _PyCFunction_CAST(_gdbm_gdbm_keys), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_keys__doc__},
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_cistatic PyObject *
1027db96d56Sopenharmony_ci_gdbm_gdbm_keys_impl(gdbmobject *self, PyTypeObject *cls);
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_cistatic PyObject *
1057db96d56Sopenharmony_ci_gdbm_gdbm_keys(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1067db96d56Sopenharmony_ci{
1077db96d56Sopenharmony_ci    if (nargs) {
1087db96d56Sopenharmony_ci        PyErr_SetString(PyExc_TypeError, "keys() takes no arguments");
1097db96d56Sopenharmony_ci        return NULL;
1107db96d56Sopenharmony_ci    }
1117db96d56Sopenharmony_ci    return _gdbm_gdbm_keys_impl(self, cls);
1127db96d56Sopenharmony_ci}
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_firstkey__doc__,
1157db96d56Sopenharmony_ci"firstkey($self, /)\n"
1167db96d56Sopenharmony_ci"--\n"
1177db96d56Sopenharmony_ci"\n"
1187db96d56Sopenharmony_ci"Return the starting key for the traversal.\n"
1197db96d56Sopenharmony_ci"\n"
1207db96d56Sopenharmony_ci"It\'s possible to loop over every key in the database using this method\n"
1217db96d56Sopenharmony_ci"and the nextkey() method.  The traversal is ordered by GDBM\'s internal\n"
1227db96d56Sopenharmony_ci"hash values, and won\'t be sorted by the key values.");
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci#define _GDBM_GDBM_FIRSTKEY_METHODDEF    \
1257db96d56Sopenharmony_ci    {"firstkey", _PyCFunction_CAST(_gdbm_gdbm_firstkey), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_firstkey__doc__},
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_cistatic PyObject *
1287db96d56Sopenharmony_ci_gdbm_gdbm_firstkey_impl(gdbmobject *self, PyTypeObject *cls);
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_cistatic PyObject *
1317db96d56Sopenharmony_ci_gdbm_gdbm_firstkey(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1327db96d56Sopenharmony_ci{
1337db96d56Sopenharmony_ci    if (nargs) {
1347db96d56Sopenharmony_ci        PyErr_SetString(PyExc_TypeError, "firstkey() takes no arguments");
1357db96d56Sopenharmony_ci        return NULL;
1367db96d56Sopenharmony_ci    }
1377db96d56Sopenharmony_ci    return _gdbm_gdbm_firstkey_impl(self, cls);
1387db96d56Sopenharmony_ci}
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_nextkey__doc__,
1417db96d56Sopenharmony_ci"nextkey($self, key, /)\n"
1427db96d56Sopenharmony_ci"--\n"
1437db96d56Sopenharmony_ci"\n"
1447db96d56Sopenharmony_ci"Returns the key that follows key in the traversal.\n"
1457db96d56Sopenharmony_ci"\n"
1467db96d56Sopenharmony_ci"The following code prints every key in the database db, without having\n"
1477db96d56Sopenharmony_ci"to create a list in memory that contains them all:\n"
1487db96d56Sopenharmony_ci"\n"
1497db96d56Sopenharmony_ci"      k = db.firstkey()\n"
1507db96d56Sopenharmony_ci"      while k is not None:\n"
1517db96d56Sopenharmony_ci"          print(k)\n"
1527db96d56Sopenharmony_ci"          k = db.nextkey(k)");
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci#define _GDBM_GDBM_NEXTKEY_METHODDEF    \
1557db96d56Sopenharmony_ci    {"nextkey", _PyCFunction_CAST(_gdbm_gdbm_nextkey), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_nextkey__doc__},
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_cistatic PyObject *
1587db96d56Sopenharmony_ci_gdbm_gdbm_nextkey_impl(gdbmobject *self, PyTypeObject *cls, const char *key,
1597db96d56Sopenharmony_ci                        Py_ssize_t key_length);
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_cistatic PyObject *
1627db96d56Sopenharmony_ci_gdbm_gdbm_nextkey(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1637db96d56Sopenharmony_ci{
1647db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1657db96d56Sopenharmony_ci    static const char * const _keywords[] = {"", NULL};
1667db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"s#:nextkey", _keywords, 0};
1677db96d56Sopenharmony_ci    const char *key;
1687db96d56Sopenharmony_ci    Py_ssize_t key_length;
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
1717db96d56Sopenharmony_ci        &key, &key_length)) {
1727db96d56Sopenharmony_ci        goto exit;
1737db96d56Sopenharmony_ci    }
1747db96d56Sopenharmony_ci    return_value = _gdbm_gdbm_nextkey_impl(self, cls, key, key_length);
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ciexit:
1777db96d56Sopenharmony_ci    return return_value;
1787db96d56Sopenharmony_ci}
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_reorganize__doc__,
1817db96d56Sopenharmony_ci"reorganize($self, /)\n"
1827db96d56Sopenharmony_ci"--\n"
1837db96d56Sopenharmony_ci"\n"
1847db96d56Sopenharmony_ci"Reorganize the database.\n"
1857db96d56Sopenharmony_ci"\n"
1867db96d56Sopenharmony_ci"If you have carried out a lot of deletions and would like to shrink\n"
1877db96d56Sopenharmony_ci"the space used by the GDBM file, this routine will reorganize the\n"
1887db96d56Sopenharmony_ci"database.  GDBM will not shorten the length of a database file except\n"
1897db96d56Sopenharmony_ci"by using this reorganization; otherwise, deleted file space will be\n"
1907db96d56Sopenharmony_ci"kept and reused as new (key,value) pairs are added.");
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci#define _GDBM_GDBM_REORGANIZE_METHODDEF    \
1937db96d56Sopenharmony_ci    {"reorganize", _PyCFunction_CAST(_gdbm_gdbm_reorganize), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_reorganize__doc__},
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_cistatic PyObject *
1967db96d56Sopenharmony_ci_gdbm_gdbm_reorganize_impl(gdbmobject *self, PyTypeObject *cls);
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_cistatic PyObject *
1997db96d56Sopenharmony_ci_gdbm_gdbm_reorganize(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
2007db96d56Sopenharmony_ci{
2017db96d56Sopenharmony_ci    if (nargs) {
2027db96d56Sopenharmony_ci        PyErr_SetString(PyExc_TypeError, "reorganize() takes no arguments");
2037db96d56Sopenharmony_ci        return NULL;
2047db96d56Sopenharmony_ci    }
2057db96d56Sopenharmony_ci    return _gdbm_gdbm_reorganize_impl(self, cls);
2067db96d56Sopenharmony_ci}
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ciPyDoc_STRVAR(_gdbm_gdbm_sync__doc__,
2097db96d56Sopenharmony_ci"sync($self, /)\n"
2107db96d56Sopenharmony_ci"--\n"
2117db96d56Sopenharmony_ci"\n"
2127db96d56Sopenharmony_ci"Flush the database to the disk file.\n"
2137db96d56Sopenharmony_ci"\n"
2147db96d56Sopenharmony_ci"When the database has been opened in fast mode, this method forces\n"
2157db96d56Sopenharmony_ci"any unwritten data to be written to the disk.");
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci#define _GDBM_GDBM_SYNC_METHODDEF    \
2187db96d56Sopenharmony_ci    {"sync", _PyCFunction_CAST(_gdbm_gdbm_sync), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_sync__doc__},
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_cistatic PyObject *
2217db96d56Sopenharmony_ci_gdbm_gdbm_sync_impl(gdbmobject *self, PyTypeObject *cls);
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_cistatic PyObject *
2247db96d56Sopenharmony_ci_gdbm_gdbm_sync(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
2257db96d56Sopenharmony_ci{
2267db96d56Sopenharmony_ci    if (nargs) {
2277db96d56Sopenharmony_ci        PyErr_SetString(PyExc_TypeError, "sync() takes no arguments");
2287db96d56Sopenharmony_ci        return NULL;
2297db96d56Sopenharmony_ci    }
2307db96d56Sopenharmony_ci    return _gdbm_gdbm_sync_impl(self, cls);
2317db96d56Sopenharmony_ci}
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ciPyDoc_STRVAR(dbmopen__doc__,
2347db96d56Sopenharmony_ci"open($module, filename, flags=\'r\', mode=0o666, /)\n"
2357db96d56Sopenharmony_ci"--\n"
2367db96d56Sopenharmony_ci"\n"
2377db96d56Sopenharmony_ci"Open a dbm database and return a dbm object.\n"
2387db96d56Sopenharmony_ci"\n"
2397db96d56Sopenharmony_ci"The filename argument is the name of the database file.\n"
2407db96d56Sopenharmony_ci"\n"
2417db96d56Sopenharmony_ci"The optional flags argument can be \'r\' (to open an existing database\n"
2427db96d56Sopenharmony_ci"for reading only -- default), \'w\' (to open an existing database for\n"
2437db96d56Sopenharmony_ci"reading and writing), \'c\' (which creates the database if it doesn\'t\n"
2447db96d56Sopenharmony_ci"exist), or \'n\' (which always creates a new empty database).\n"
2457db96d56Sopenharmony_ci"\n"
2467db96d56Sopenharmony_ci"Some versions of gdbm support additional flags which must be\n"
2477db96d56Sopenharmony_ci"appended to one of the flags described above.  The module constant\n"
2487db96d56Sopenharmony_ci"\'open_flags\' is a string of valid additional flags.  The \'f\' flag\n"
2497db96d56Sopenharmony_ci"opens the database in fast mode; altered data will not automatically\n"
2507db96d56Sopenharmony_ci"be written to the disk after every change.  This results in faster\n"
2517db96d56Sopenharmony_ci"writes to the database, but may result in an inconsistent database\n"
2527db96d56Sopenharmony_ci"if the program crashes while the database is still open.  Use the\n"
2537db96d56Sopenharmony_ci"sync() method to force any unwritten data to be written to the disk.\n"
2547db96d56Sopenharmony_ci"The \'s\' flag causes all database operations to be synchronized to\n"
2557db96d56Sopenharmony_ci"disk.  The \'u\' flag disables locking of the database file.\n"
2567db96d56Sopenharmony_ci"\n"
2577db96d56Sopenharmony_ci"The optional mode argument is the Unix mode of the file, used only\n"
2587db96d56Sopenharmony_ci"when the database has to be created.  It defaults to octal 0o666.");
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci#define DBMOPEN_METHODDEF    \
2617db96d56Sopenharmony_ci    {"open", _PyCFunction_CAST(dbmopen), METH_FASTCALL, dbmopen__doc__},
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_cistatic PyObject *
2647db96d56Sopenharmony_cidbmopen_impl(PyObject *module, PyObject *filename, const char *flags,
2657db96d56Sopenharmony_ci             int mode);
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_cistatic PyObject *
2687db96d56Sopenharmony_cidbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
2697db96d56Sopenharmony_ci{
2707db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2717db96d56Sopenharmony_ci    PyObject *filename;
2727db96d56Sopenharmony_ci    const char *flags = "r";
2737db96d56Sopenharmony_ci    int mode = 438;
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("open", nargs, 1, 3)) {
2767db96d56Sopenharmony_ci        goto exit;
2777db96d56Sopenharmony_ci    }
2787db96d56Sopenharmony_ci    filename = args[0];
2797db96d56Sopenharmony_ci    if (nargs < 2) {
2807db96d56Sopenharmony_ci        goto skip_optional;
2817db96d56Sopenharmony_ci    }
2827db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[1])) {
2837db96d56Sopenharmony_ci        _PyArg_BadArgument("open", "argument 2", "str", args[1]);
2847db96d56Sopenharmony_ci        goto exit;
2857db96d56Sopenharmony_ci    }
2867db96d56Sopenharmony_ci    Py_ssize_t flags_length;
2877db96d56Sopenharmony_ci    flags = PyUnicode_AsUTF8AndSize(args[1], &flags_length);
2887db96d56Sopenharmony_ci    if (flags == NULL) {
2897db96d56Sopenharmony_ci        goto exit;
2907db96d56Sopenharmony_ci    }
2917db96d56Sopenharmony_ci    if (strlen(flags) != (size_t)flags_length) {
2927db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
2937db96d56Sopenharmony_ci        goto exit;
2947db96d56Sopenharmony_ci    }
2957db96d56Sopenharmony_ci    if (nargs < 3) {
2967db96d56Sopenharmony_ci        goto skip_optional;
2977db96d56Sopenharmony_ci    }
2987db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[2]);
2997db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
3007db96d56Sopenharmony_ci        goto exit;
3017db96d56Sopenharmony_ci    }
3027db96d56Sopenharmony_ciskip_optional:
3037db96d56Sopenharmony_ci    return_value = dbmopen_impl(module, filename, flags, mode);
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ciexit:
3067db96d56Sopenharmony_ci    return return_value;
3077db96d56Sopenharmony_ci}
3087db96d56Sopenharmony_ci/*[clinic end generated code: output=617117d16956ac4d input=a9049054013a1b77]*/
309