19260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka/*[clinic input]
29260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakapreserve
39260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka[clinic start generated code]*/
49260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
59260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_get__doc__,
69260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"get($self, key, default=None, /)\n"
79260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
89260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
99260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Get the value for key, or default if not present.");
109260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
119260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_GET_METHODDEF    \
129260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"get", (PyCFunction)_gdbm_gdbm_get, METH_VARARGS, _gdbm_gdbm_get__doc__},
139260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
149260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
159260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_get_impl(dbmobject *self, PyObject *key, PyObject *default_value);
169260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
179260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
189260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_get(dbmobject *self, PyObject *args)
199260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
209260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *return_value = NULL;
219260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *key;
229260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *default_value = Py_None;
239260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
249260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    if (!PyArg_UnpackTuple(args, "get",
259260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka        1, 2,
265dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka        &key, &default_value)) {
279260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka        goto exit;
285dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka    }
299260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return_value = _gdbm_gdbm_get_impl(self, key, default_value);
309260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
319260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakaexit:
329260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return return_value;
339260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
349260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
359260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_setdefault__doc__,
369260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"setdefault($self, key, default=None, /)\n"
379260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
389260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
399260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Get value for key, or set it to default and return default if not present.");
409260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
419260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_SETDEFAULT_METHODDEF    \
429260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"setdefault", (PyCFunction)_gdbm_gdbm_setdefault, METH_VARARGS, _gdbm_gdbm_setdefault__doc__},
439260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
449260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
459260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_setdefault_impl(dbmobject *self, PyObject *key,
469260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka                           PyObject *default_value);
479260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
489260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
499260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_setdefault(dbmobject *self, PyObject *args)
509260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
519260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *return_value = NULL;
529260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *key;
539260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *default_value = Py_None;
549260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
559260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    if (!PyArg_UnpackTuple(args, "setdefault",
569260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka        1, 2,
575dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka        &key, &default_value)) {
589260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka        goto exit;
595dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka    }
609260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return_value = _gdbm_gdbm_setdefault_impl(self, key, default_value);
619260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
629260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakaexit:
639260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return return_value;
649260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
659260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
669260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_close__doc__,
679260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"close($self, /)\n"
689260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
699260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
709260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Close the database.");
719260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
729260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_CLOSE_METHODDEF    \
739260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"close", (PyCFunction)_gdbm_gdbm_close, METH_NOARGS, _gdbm_gdbm_close__doc__},
749260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
759260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
769260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_close_impl(dbmobject *self);
779260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
789260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
799260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_close(dbmobject *self, PyObject *Py_UNUSED(ignored))
809260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
819260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return _gdbm_gdbm_close_impl(self);
829260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
839260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
849260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_keys__doc__,
859260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"keys($self, /)\n"
869260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
879260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
889260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Get a list of all keys in the database.");
899260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
909260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_KEYS_METHODDEF    \
919260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"keys", (PyCFunction)_gdbm_gdbm_keys, METH_NOARGS, _gdbm_gdbm_keys__doc__},
929260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
939260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
949260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_keys_impl(dbmobject *self);
959260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
969260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
979260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_keys(dbmobject *self, PyObject *Py_UNUSED(ignored))
989260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
999260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return _gdbm_gdbm_keys_impl(self);
1009260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
1019260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1029260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_firstkey__doc__,
1039260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"firstkey($self, /)\n"
1049260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
1059260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1069260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Return the starting key for the traversal.\n"
1079260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1089260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"It\'s possible to loop over every key in the database using this method\n"
1099260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"and the nextkey() method.  The traversal is ordered by GDBM\'s internal\n"
1109260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"hash values, and won\'t be sorted by the key values.");
1119260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1129260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_FIRSTKEY_METHODDEF    \
1139260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"firstkey", (PyCFunction)_gdbm_gdbm_firstkey, METH_NOARGS, _gdbm_gdbm_firstkey__doc__},
1149260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1159260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1169260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_firstkey_impl(dbmobject *self);
1179260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1189260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1199260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_firstkey(dbmobject *self, PyObject *Py_UNUSED(ignored))
1209260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
1219260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return _gdbm_gdbm_firstkey_impl(self);
1229260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
1239260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1249260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_nextkey__doc__,
1259260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"nextkey($self, key, /)\n"
1269260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
1279260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1289260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Returns the key that follows key in the traversal.\n"
1299260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1309260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"The following code prints every key in the database db, without having\n"
1319260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"to create a list in memory that contains them all:\n"
1329260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1339260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"      k = db.firstkey()\n"
1349260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"      while k != None:\n"
1359260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"          print(k)\n"
1369260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"          k = db.nextkey(k)");
1379260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1389260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_NEXTKEY_METHODDEF    \
1399260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"nextkey", (PyCFunction)_gdbm_gdbm_nextkey, METH_O, _gdbm_gdbm_nextkey__doc__},
1409260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1419260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1429260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_nextkey_impl(dbmobject *self, const char *key,
1439260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka                        Py_ssize_clean_t key_length);
1449260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1459260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1469260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_nextkey(dbmobject *self, PyObject *arg)
1479260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
1489260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *return_value = NULL;
1499260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    const char *key;
1509260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    Py_ssize_clean_t key_length;
1519260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1525dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka    if (!PyArg_Parse(arg, "s#:nextkey", &key, &key_length)) {
1539260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka        goto exit;
1545dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka    }
1559260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return_value = _gdbm_gdbm_nextkey_impl(self, key, key_length);
1569260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1579260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakaexit:
1589260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return return_value;
1599260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
1609260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1619260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_reorganize__doc__,
1629260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"reorganize($self, /)\n"
1639260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
1649260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1659260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Reorganize the database.\n"
1669260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1679260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"If you have carried out a lot of deletions and would like to shrink\n"
1689260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"the space used by the GDBM file, this routine will reorganize the\n"
1699260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"database.  GDBM will not shorten the length of a database file except\n"
1709260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"by using this reorganization; otherwise, deleted file space will be\n"
1719260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"kept and reused as new (key,value) pairs are added.");
1729260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1739260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_REORGANIZE_METHODDEF    \
1749260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"reorganize", (PyCFunction)_gdbm_gdbm_reorganize, METH_NOARGS, _gdbm_gdbm_reorganize__doc__},
1759260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1769260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1779260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_reorganize_impl(dbmobject *self);
1789260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1799260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1809260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_reorganize(dbmobject *self, PyObject *Py_UNUSED(ignored))
1819260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
1829260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return _gdbm_gdbm_reorganize_impl(self);
1839260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
1849260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1859260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(_gdbm_gdbm_sync__doc__,
1869260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"sync($self, /)\n"
1879260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
1889260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1899260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Flush the database to the disk file.\n"
1909260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
1919260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"When the database has been opened in fast mode, this method forces\n"
1929260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"any unwritten data to be written to the disk.");
1939260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1949260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define _GDBM_GDBM_SYNC_METHODDEF    \
1959260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"sync", (PyCFunction)_gdbm_gdbm_sync, METH_NOARGS, _gdbm_gdbm_sync__doc__},
1969260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
1979260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
1989260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_sync_impl(dbmobject *self);
1999260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
2009260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
2019260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka_gdbm_gdbm_sync(dbmobject *self, PyObject *Py_UNUSED(ignored))
2029260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
2039260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return _gdbm_gdbm_sync_impl(self);
2049260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
2059260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
2069260e77386184bb89c447aaea5616d51acfa5023Serhiy StorchakaPyDoc_STRVAR(dbmopen__doc__,
2079260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"open($module, filename, flags=\'r\', mode=0o666, /)\n"
2089260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"--\n"
2099260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
2109260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Open a dbm database and return a dbm object.\n"
2119260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
2129260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"The filename argument is the name of the database file.\n"
2139260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
2149260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"The optional flags argument can be \'r\' (to open an existing database\n"
2159260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"for reading only -- default), \'w\' (to open an existing database for\n"
2169260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"reading and writing), \'c\' (which creates the database if it doesn\'t\n"
2179260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"exist), or \'n\' (which always creates a new empty database).\n"
2189260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
2199260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"Some versions of gdbm support additional flags which must be\n"
2209260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"appended to one of the flags described above.  The module constant\n"
2219260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\'open_flags\' is a string of valid additional flags.  The \'f\' flag\n"
2229260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"opens the database in fast mode; altered data will not automatically\n"
2239260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"be written to the disk after every change.  This results in faster\n"
2249260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"writes to the database, but may result in an inconsistent database\n"
2259260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"if the program crashes while the database is still open.  Use the\n"
2269260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"sync() method to force any unwritten data to be written to the disk.\n"
2279260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"The \'s\' flag causes all database operations to be synchronized to\n"
2289260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"disk.  The \'u\' flag disables locking of the database file.\n"
2299260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"\n"
2309260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"The optional mode argument is the Unix mode of the file, used only\n"
2319260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka"when the database has to be created.  It defaults to octal 0o666.");
2329260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
2339260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka#define DBMOPEN_METHODDEF    \
2349260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__},
2359260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
2369260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
2371a2b24f02dfd4eb3383f6ae2b59e5a4eb66fd5bbSerhiy Storchakadbmopen_impl(PyObject *module, const char *name, const char *flags, int mode);
2389260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
2399260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakastatic PyObject *
2401a2b24f02dfd4eb3383f6ae2b59e5a4eb66fd5bbSerhiy Storchakadbmopen(PyObject *module, PyObject *args)
2419260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka{
2429260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    PyObject *return_value = NULL;
2439260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    const char *name;
2449260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    const char *flags = "r";
2459260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    int mode = 438;
2469260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
247247789cee99c8933c140110791d136cbe37a003bSerhiy Storchaka    if (!PyArg_ParseTuple(args, "s|si:open",
2485dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka        &name, &flags, &mode)) {
2499260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka        goto exit;
2505dee6551e2b98792bc6336206f763623483e7883Serhiy Storchaka    }
2519260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return_value = dbmopen_impl(module, name, flags, mode);
2529260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka
2539260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchakaexit:
2549260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka    return return_value;
2559260e77386184bb89c447aaea5616d51acfa5023Serhiy Storchaka}
2562954f8399914c77e048f9e3358abfadb7a3f76e9Serhiy Storchaka/*[clinic end generated code: output=ed0f5d4e3d79b80c input=a9049054013a1b77]*/
257