Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 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 | 233 key.dptr = PyUnicode_AsUTF8AndSize(arg, &size); |
| 234 key.dsize = size; | |
| 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 | 244 else { |
| 245 key.dptr = PyBytes_AS_STRING(arg); | |
| 246 key.dsize = PyBytes_GET_SIZE(arg); | |
| 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 } |
