annotate Modules/_dbmmodule.c @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 78ec18f5cb45
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* DBM module using dictionary interface */
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
50815
c10f6f116af0 Merged revisions 68638 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 50049
diff changeset
5 #define PY_SSIZE_T_CLEAN
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
6 #include "Python.h"
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #include <sys/types.h>
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 #include <sys/stat.h>
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #include <fcntl.h>
14550
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
11
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
12 /* Some Linux systems install gdbm/ndbm.h, but not ndbm.h. This supports
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
13 * whichever configure was able to locate.
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
14 */
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
15 #if defined(HAVE_NDBM_H)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 #include <ndbm.h>
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21313
diff changeset
17 static char *which_dbm = "GNU gdbm"; /* EMX port of GDBM */
14550
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
18 #elif defined(HAVE_GDBM_NDBM_H)
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
19 #include <gdbm/ndbm.h>
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
20 static char *which_dbm = "GNU gdbm";
50049
0be10391347b issue4483: _dbm build failures on systems with gdbm_compat lib.
Skip Montanaro <skip@pobox.com>
parents: 49848
diff changeset
21 #elif defined(HAVE_GDBM_DASH_NDBM_H)
0be10391347b issue4483: _dbm build failures on systems with gdbm_compat lib.
Skip Montanaro <skip@pobox.com>
parents: 49848
diff changeset
22 #include <gdbm-ndbm.h>
0be10391347b issue4483: _dbm build failures on systems with gdbm_compat lib.
Skip Montanaro <skip@pobox.com>
parents: 49848
diff changeset
23 static char *which_dbm = "GNU gdbm";
24490
0854524ece00 add #include branch for compilation with Berkeley DB
Skip Montanaro <skip@pobox.com>
parents: 24471
diff changeset
24 #elif defined(HAVE_BERKDB_H)
0854524ece00 add #include branch for compilation with Berkeley DB
Skip Montanaro <skip@pobox.com>
parents: 24471
diff changeset
25 #include <db.h>
0854524ece00 add #include branch for compilation with Berkeley DB
Skip Montanaro <skip@pobox.com>
parents: 24471
diff changeset
26 static char *which_dbm = "Berkeley DB";
14550
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
27 #else
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
28 #error "No ndbm.h available!"
7fa4302a5a08 Use the configure support to determine which ndbm.h header to include.
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
29 #endif
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
31 /*[clinic]
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
32 module dbm
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
33 class dbm.dbm
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
34 [clinic]*/
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
35 /*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
36
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 typedef struct {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
38 PyObject_HEAD
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
39 int di_size; /* -1 means recompute */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
40 DBM *di_dbm;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 } dbmobject;
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
24280
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 23867
diff changeset
43 static PyTypeObject Dbmtype;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
44351
86a2679dca46 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents: 43777
diff changeset
45 #define is_dbmobject(v) (Py_TYPE(v) == &Dbmtype)
5828
9fa2bd8a2b78 Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents: 4718
diff changeset
46 #define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
9fa2bd8a2b78 Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents: 4718
diff changeset
47 { PyErr_SetString(DbmError, "DBM object has already been closed"); \
9fa2bd8a2b78 Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents: 4718
diff changeset
48 return NULL; }
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
50 static PyObject *DbmError;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
52 /*[python]
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
53 class dbmobject_converter(self_converter):
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
54 type = "dbmobject *"
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
55 def converter_init(self):
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
56 self.name = 'dp'
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
57 [python]*/
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
58 /*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
59
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
60 static PyObject *
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
61 newdbmobject(const char *file, int flags, int mode)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
63 dbmobject *dp;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
65 dp = PyObject_New(dbmobject, &Dbmtype);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
66 if (dp == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
67 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
68 dp->di_size = -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
69 if ( (dp->di_dbm = dbm_open(file, flags, mode)) == 0 ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
70 PyErr_SetFromErrno(DbmError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
71 Py_DECREF(dp);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
72 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
73 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
74 return (PyObject *)dp;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 /* Methods */
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 static void
85157
e7f6cef7a4cc Issue #18722: Remove uses of the "register" keyword in C code.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79475
diff changeset
80 dbm_dealloc(dbmobject *dp)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
82 if ( dp->di_dbm )
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
83 dbm_close(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
84 PyObject_Del(dp);
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36324
diff changeset
87 static Py_ssize_t
13515
cd7abb4feb1b ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
88 dbm_length(dbmobject *dp)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
90 if (dp->di_dbm == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
91 PyErr_SetString(DbmError, "DBM object has already been closed");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
92 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
93 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
94 if ( dp->di_size < 0 ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
95 datum key;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
96 int size;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
98 size = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
99 for ( key=dbm_firstkey(dp->di_dbm); key.dptr;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
100 key = dbm_nextkey(dp->di_dbm))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
101 size++;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
102 dp->di_size = size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
103 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
104 return dp->di_size;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
106
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
107 static PyObject *
85157
e7f6cef7a4cc Issue #18722: Remove uses of the "register" keyword in C code.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79475
diff changeset
108 dbm_subscript(dbmobject *dp, PyObject *key)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
110 datum drec, krec;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
111 Py_ssize_t tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
112
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
113 if (!PyArg_Parse(key, "s#", &krec.dptr, &tmp_size) )
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
114 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
115
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
116 krec.dsize = tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
117 check_dbmobject_open(dp);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
118 drec = dbm_fetch(dp->di_dbm, krec);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
119 if ( drec.dptr == 0 ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
120 PyErr_SetObject(PyExc_KeyError, key);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
121 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
122 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
123 if ( dbm_error(dp->di_dbm) ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
124 dbm_clearerr(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
125 PyErr_SetString(DbmError, "");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
126 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
127 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
128 return PyBytes_FromStringAndSize(drec.dptr, drec.dsize);
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
130
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 static int
13515
cd7abb4feb1b ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
132 dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
134 datum krec, drec;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
135 Py_ssize_t tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
136
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
137 if ( !PyArg_Parse(v, "s#", &krec.dptr, &tmp_size) ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
138 PyErr_SetString(PyExc_TypeError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
139 "dbm mappings have bytes or string keys only");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
140 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
141 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
142 krec.dsize = tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
143 if (dp->di_dbm == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
144 PyErr_SetString(DbmError, "DBM object has already been closed");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
145 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
146 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
147 dp->di_size = -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
148 if (w == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
149 if ( dbm_delete(dp->di_dbm, krec) < 0 ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
150 dbm_clearerr(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
151 PyErr_SetObject(PyExc_KeyError, v);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
152 return -1;
5828
9fa2bd8a2b78 Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents: 4718
diff changeset
153 }
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
154 } else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
155 if ( !PyArg_Parse(w, "s#", &drec.dptr, &tmp_size) ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
156 PyErr_SetString(PyExc_TypeError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
157 "dbm mappings have byte or string elements only");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
158 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
159 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
160 drec.dsize = tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
161 if ( dbm_store(dp->di_dbm, krec, drec, DBM_REPLACE) < 0 ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
162 dbm_clearerr(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
163 PyErr_SetString(DbmError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
164 "cannot add item to database");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
165 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
166 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
167 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
168 if ( dbm_error(dp->di_dbm) ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
169 dbm_clearerr(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
170 PyErr_SetString(DbmError, "");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
171 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
172 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
173 return 0;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
175
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
176 static PyMappingMethods dbm_as_mapping = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
177 (lenfunc)dbm_length, /*mp_length*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
178 (binaryfunc)dbm_subscript, /*mp_subscript*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
179 (objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 };
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
181
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
182 static PyObject *
85157
e7f6cef7a4cc Issue #18722: Remove uses of the "register" keyword in C code.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79475
diff changeset
183 dbm__close(dbmobject *dp, PyObject *unused)
2805
b7a06db85caf normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents: 2268
diff changeset
184 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
185 if (dp->di_dbm)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
186 dbm_close(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
187 dp->di_dbm = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
188 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
189 return Py_None;
2805
b7a06db85caf normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents: 2268
diff changeset
190 }
b7a06db85caf normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents: 2268
diff changeset
191
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
192 static PyObject *
85157
e7f6cef7a4cc Issue #18722: Remove uses of the "register" keyword in C code.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79475
diff changeset
193 dbm_keys(dbmobject *dp, PyObject *unused)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 {
85157
e7f6cef7a4cc Issue #18722: Remove uses of the "register" keyword in C code.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79475
diff changeset
195 PyObject *v, *item;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
196 datum key;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
197 int err;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
198
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
199 check_dbmobject_open(dp);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
200 v = PyList_New(0);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
201 if (v == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
202 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
203 for (key = dbm_firstkey(dp->di_dbm); key.dptr;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
204 key = dbm_nextkey(dp->di_dbm)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
205 item = PyBytes_FromStringAndSize(key.dptr, key.dsize);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
206 if (item == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
207 Py_DECREF(v);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
208 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
209 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
210 err = PyList_Append(v, item);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
211 Py_DECREF(item);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
212 if (err != 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
213 Py_DECREF(v);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
214 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
215 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
216 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
217 return v;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
219
39593
599abc31f770 Fix this right for has_key(). This required adding tp_as_sequence.
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
220 static int
599abc31f770 Fix this right for has_key(). This required adding tp_as_sequence.
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
221 dbm_contains(PyObject *self, PyObject *arg)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
223 dbmobject *dp = (dbmobject *)self;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
224 datum key, val;
72475
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
225 Py_ssize_t size;
39593
599abc31f770 Fix this right for has_key(). This required adding tp_as_sequence.
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
226
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
227 if ((dp)->di_dbm == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
228 PyErr_SetString(DbmError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
229 "DBM object has already been closed");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
230 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
231 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
232 if (PyUnicode_Check(arg)) {
72475
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
233 key.dptr = PyUnicode_AsUTF8AndSize(arg, &size);
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
234 key.dsize = size;
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
235 if (key.dptr == NULL)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
236 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
237 }
86604
61ab0c6907f9 Issue #19287: Fixed the "in" operator of dbm.ndbm databases for string
Serhiy Storchaka <storchaka@gmail.com>
parents: 72475
diff changeset
238 else if (!PyBytes_Check(arg)) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
239 PyErr_Format(PyExc_TypeError,
86604
61ab0c6907f9 Issue #19287: Fixed the "in" operator of dbm.ndbm databases for string
Serhiy Storchaka <storchaka@gmail.com>
parents: 72475
diff changeset
240 "dbm key must be bytes or string, not %.100s",
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
241 arg->ob_type->tp_name);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
242 return -1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
243 }
72475
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
244 else {
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
245 key.dptr = PyBytes_AS_STRING(arg);
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
246 key.dsize = PyBytes_GET_SIZE(arg);
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 68207
diff changeset
247 }
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
248 val = dbm_fetch(dp->di_dbm, key);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
249 return val.dptr != NULL;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
251
39593
599abc31f770 Fix this right for has_key(). This required adding tp_as_sequence.
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
252 static PySequenceMethods dbm_as_sequence = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
253 0, /* sq_length */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
254 0, /* sq_concat */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
255 0, /* sq_repeat */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
256 0, /* sq_item */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
257 0, /* sq_slice */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
258 0, /* sq_ass_item */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
259 0, /* sq_ass_slice */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
260 dbm_contains, /* sq_contains */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
261 0, /* sq_inplace_concat */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
262 0, /* sq_inplace_repeat */
39593
599abc31f770 Fix this right for has_key(). This required adding tp_as_sequence.
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
263 };
599abc31f770 Fix this right for has_key(). This required adding tp_as_sequence.
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
264
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
265 /*[clinic]
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
266
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
267 dbm.dbm.get
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
268
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
269 self: dbmobject
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
270
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
271 key: str(length=True)
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
272 [
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
273 default: object
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
274 ]
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
275 /
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
276
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
277 Return the value for key if present, otherwise default.
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
278 [clinic]*/
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
279
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
280 PyDoc_STRVAR(dbm_dbm_get__doc__,
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
281 "get(key, [default])\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
282 "Return the value for key if present, otherwise default.");
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
283
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
284 #define DBM_DBM_GET_METHODDEF \
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
285 {"get", (PyCFunction)dbm_dbm_get, METH_VARARGS, dbm_dbm_get__doc__},
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
286
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
287 static PyObject *
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
288 dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, int group_right_1, PyObject *default_value);
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
289
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
290 static PyObject *
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
291 dbm_dbm_get(PyObject *self, PyObject *args)
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
292 {
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
293 PyObject *return_value = NULL;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
294 const char *key;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
295 Py_ssize_clean_t key_length;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
296 int group_right_1 = 0;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
297 PyObject *default_value = NULL;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
298
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
299 switch (PyTuple_Size(args)) {
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
300 case 1:
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
301 if (!PyArg_ParseTuple(args, "s#:get", &key, &key_length))
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
302 return NULL;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
303 break;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
304 case 2:
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
305 if (!PyArg_ParseTuple(args, "s#O:get", &key, &key_length, &default_value))
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
306 return NULL;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
307 group_right_1 = 1;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
308 break;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
309 default:
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
310 PyErr_SetString(PyExc_TypeError, "dbm.dbm.get requires 1 to 2 arguments");
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
311 return NULL;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
312 }
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
313 return_value = dbm_dbm_get_impl((dbmobject *)self, key, key_length, group_right_1, default_value);
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
314
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
315 return return_value;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
316 }
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
317
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
318 static PyObject *
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
319 dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, int group_right_1, PyObject *default_value)
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
320 /*[clinic checksum: 28cf8928811bde51e535d67ae98ea039d79df717]*/
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
321 {
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
322 datum dbm_key, val;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
323
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
324 if (!group_right_1)
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
325 default_value = Py_None;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
326 dbm_key.dptr = (char *)key;
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
327 dbm_key.dsize = key_length;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
328 check_dbmobject_open(dp);
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
329 val = dbm_fetch(dp->di_dbm, dbm_key);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
330 if (val.dptr != NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
331 return PyBytes_FromStringAndSize(val.dptr, val.dsize);
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
332
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
333 Py_INCREF(default_value);
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
334 return default_value;
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
335 }
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
336
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
337 static PyObject *
85157
e7f6cef7a4cc Issue #18722: Remove uses of the "register" keyword in C code.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79475
diff changeset
338 dbm_setdefault(dbmobject *dp, PyObject *args)
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
339 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
340 datum key, val;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
341 PyObject *defvalue = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
342 char *tmp_ptr;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
343 Py_ssize_t tmp_size;
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
344
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
345 if (!PyArg_ParseTuple(args, "s#|O:setdefault",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
346 &tmp_ptr, &tmp_size, &defvalue))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
347 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
348 key.dptr = tmp_ptr;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
349 key.dsize = tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
350 check_dbmobject_open(dp);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
351 val = dbm_fetch(dp->di_dbm, key);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
352 if (val.dptr != NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
353 return PyBytes_FromStringAndSize(val.dptr, val.dsize);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
354 if (defvalue == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
355 defvalue = PyBytes_FromStringAndSize(NULL, 0);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
356 if (defvalue == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
357 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
358 val.dptr = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
359 val.dsize = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
360 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
361 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
362 if ( !PyArg_Parse(defvalue, "s#", &val.dptr, &tmp_size) ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
363 PyErr_SetString(PyExc_TypeError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
364 "dbm mappings have byte string elements only");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
365 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
366 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
367 val.dsize = tmp_size;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
368 Py_INCREF(defvalue);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
369 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
370 if (dbm_store(dp->di_dbm, key, val, DBM_INSERT) < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
371 dbm_clearerr(dp->di_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
372 PyErr_SetString(DbmError, "cannot add item to database");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
373 Py_DECREF(defvalue);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
374 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
375 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
376 return defvalue;
14608
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
377 }
142a90eea8f4 Add a constant "library" to the module which names the library used,
Fred Drake <fdrake@acm.org>
parents: 14577
diff changeset
378
87166
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
379 static PyObject *
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
380 dbm__enter__(PyObject *self, PyObject *args)
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
381 {
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
382 Py_INCREF(self);
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
383 return self;
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
384 }
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
385
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
386 static PyObject *
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
387 dbm__exit__(PyObject *self, PyObject *args)
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
388 {
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
389 _Py_IDENTIFIER(close);
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
390 return _PyObject_CallMethodId(self, &PyId_close, NULL);
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
391 }
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
392
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
393
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
394 static PyMethodDef dbm_methods[] = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
395 {"close", (PyCFunction)dbm__close, METH_NOARGS,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
396 "close()\nClose the database."},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
397 {"keys", (PyCFunction)dbm_keys, METH_NOARGS,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
398 "keys() -> list\nReturn a list of all keys in the database."},
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
399 DBM_DBM_GET_METHODDEF
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
400 {"setdefault", (PyCFunction)dbm_setdefault, METH_VARARGS,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
401 "setdefault(key[, default]) -> value\n"
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
402 "Return the value for key if present, otherwise default. If key\n"
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
403 "is not in the database, it is inserted with default as the value."},
87166
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
404 {"__enter__", dbm__enter__, METH_NOARGS, NULL},
c2f1bb56760d Close #19282: Native context management in dbm
Nick Coghlan <ncoghlan@gmail.com>
parents: 86605
diff changeset
405 {"__exit__", dbm__exit__, METH_VARARGS, NULL},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
406 {NULL, NULL} /* sentinel */
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
407 };
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
408
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
409 static PyTypeObject Dbmtype = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
410 PyVarObject_HEAD_INIT(NULL, 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
411 "_dbm.dbm",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
412 sizeof(dbmobject),
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
413 0,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
414 (destructor)dbm_dealloc, /*tp_dealloc*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
415 0, /*tp_print*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
416 0, /*tp_getattr*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
417 0, /*tp_setattr*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
418 0, /*tp_reserved*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
419 0, /*tp_repr*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
420 0, /*tp_as_number*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
421 &dbm_as_sequence, /*tp_as_sequence*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
422 &dbm_as_mapping, /*tp_as_mapping*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
423 0, /*tp_hash*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
424 0, /*tp_call*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
425 0, /*tp_str*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
426 0, /*tp_getattro*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
427 0, /*tp_setattro*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
428 0, /*tp_as_buffer*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
429 Py_TPFLAGS_DEFAULT, /*tp_flags*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
430 0, /*tp_doc*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
431 0, /*tp_traverse*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
432 0, /*tp_clear*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
433 0, /*tp_richcompare*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
434 0, /*tp_weaklistoffset*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
435 0, /*tp_iter*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
436 0, /*tp_iternext*/
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
437 dbm_methods, /*tp_methods*/
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
438 };
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
439
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
440 /* ----------------------------------------------------------------- */
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
441
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
442 /*[clinic]
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
443
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
444 dbm.open as dbmopen
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
445
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
446 filename: str
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
447 The filename to open.
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
448
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
449 flags: str="r"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
450 How to open the file. "r" for reading, "w" for writing, etc.
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
451
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
452 mode: int(doc_default="0o666") = 0o666
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
453 If creating a new file, the mode bits for the new file
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
454 (e.g. os.O_RDWR).
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
455
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
456 /
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
457
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
458 Return a database object.
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
459
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
460 [clinic]*/
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
461
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
462 PyDoc_STRVAR(dbmopen__doc__,
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
463 "open(filename, flags=\'r\', mode=0o666)\n"
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
464 "Return a database object.\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
465 "\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
466 " filename\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
467 " The filename to open.\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
468 " flags\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
469 " How to open the file. \"r\" for reading, \"w\" for writing, etc.\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
470 " mode\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
471 " If creating a new file, the mode bits for the new file\n"
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
472 " (e.g. os.O_RDWR).");
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
473
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
474 #define DBMOPEN_METHODDEF \
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
475 {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__},
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
476
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
477 static PyObject *
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
478 dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode);
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
479
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
480 static PyObject *
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
481 dbmopen(PyModuleDef *module, PyObject *args)
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
482 {
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
483 PyObject *return_value = NULL;
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
484 const char *filename;
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
485 const char *flags = "r";
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
486 int mode = 438;
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
487
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
488 if (!PyArg_ParseTuple(args,
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
489 "s|si:open",
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
490 &filename, &flags, &mode))
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
491 goto exit;
87245
64c853a88a10 Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents: 87166
diff changeset
492 return_value = dbmopen_impl(module, filename, flags, mode);
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
493
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
494 exit:
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
495 return return_value;
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
496 }
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
497
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
498 static PyObject *
87466
760ccd78e874 Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents: 87245
diff changeset
499 dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode)
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 87466
diff changeset
500 /*[clinic checksum: fb265f75641553ccd963f84c143b35c11f9121fc]*/
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
501 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
502 int iflags;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
503
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
504 if ( strcmp(flags, "r") == 0 )
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
505 iflags = O_RDONLY;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
506 else if ( strcmp(flags, "w") == 0 )
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
507 iflags = O_RDWR;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
508 else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
509 iflags = O_RDWR|O_CREAT;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
510 else if ( strcmp(flags, "c") == 0 )
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
511 iflags = O_RDWR|O_CREAT;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
512 else if ( strcmp(flags, "n") == 0 )
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
513 iflags = O_RDWR|O_CREAT|O_TRUNC;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
514 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
515 PyErr_SetString(DbmError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
516 "arg 2 to open should be 'r', 'w', 'c', or 'n'");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
517 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
518 }
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
519 return newdbmobject(filename, iflags, mode);
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
520 }
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
521
4648
6dd851445c7d renamed in a grand fashion.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
522 static PyMethodDef dbmmodule_methods[] = {
86465
8fde1a2c94dc Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents: 85157
diff changeset
523 DBMOPEN_METHODDEF
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
524 { 0, 0 },
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
525 };
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
526
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47357
diff changeset
527
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47357
diff changeset
528 static struct PyModuleDef _dbmmodule = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
529 PyModuleDef_HEAD_INIT,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
530 "_dbm",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
531 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
532 -1,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
533 dbmmodule_methods,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
534 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
535 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
536 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
537 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47357
diff changeset
538 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47357
diff changeset
539
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
540 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47357
diff changeset
541 PyInit__dbm(void) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
542 PyObject *m, *d, *s;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
543
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
544 if (PyType_Ready(&Dbmtype) < 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
545 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
546 m = PyModule_Create(&_dbmmodule);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
547 if (m == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
548 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
549 d = PyModule_GetDict(m);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
550 if (DbmError == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
551 DbmError = PyErr_NewException("_dbm.error",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
552 PyExc_IOError, NULL);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
553 s = PyUnicode_FromString(which_dbm);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
554 if (s != NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
555 PyDict_SetItemString(d, "library", s);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
556 Py_DECREF(s);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
557 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
558 if (DbmError != NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
559 PyDict_SetItemString(d, "error", DbmError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
560 if (PyErr_Occurred()) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
561 Py_DECREF(m);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
562 m = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
563 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 51271
diff changeset
564 return m;
906
63798cde582c Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff changeset
565 }