Mercurial > cpython-lru_cache-weakref
annotate Modules/bsddbmodule.c @ 16798:258dcafe2d0b legacy-trunk
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fixed recno support (keys are integers rather than strings).
Work around DB bug that cause stdin to be closed by rnopen() when the
DB file needed to exist but did not (no longer segfaults).
This closes SF tracker patch #403445.
Also wrapped some long lines and added whitespace around operators -- FLD.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Tue, 27 Feb 2001 18:56:46 +0000 |
| parents | 564927c55742 |
| children | 848f08559916 |
| rev | line source |
|---|---|
| 3034 | 1 /* Berkeley DB interface. |
| 2 Author: Michael McLay | |
| 3 Hacked: Guido van Rossum | |
| 4 Btree and Recno additions plus sequence methods: David Ely | |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
5 Hacked by Gustavo Niemeyer <niemeyer@conectiva.com> fixing recno |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
6 support. |
| 3034 | 7 |
| 8 XXX To do: | |
| 9 - provide a way to access the various hash functions | |
| 10 - support more open flags | |
|
11296
0094bf18e688
Added comment with web location of bsddb windows port.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
11 |
|
0094bf18e688
Added comment with web location of bsddb windows port.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
12 The windows port of the Berkeley DB code is hard to find on the web: |
|
0094bf18e688
Added comment with web location of bsddb windows port.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
13 www.nightmare.com/software.html |
|
0094bf18e688
Added comment with web location of bsddb windows port.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
14 */ |
| 3034 | 15 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
16 #include "Python.h" |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
17 #ifdef WITH_THREAD |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
7982
diff
changeset
|
18 #include "pythread.h" |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
19 #endif |
| 3034 | 20 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
21 #ifdef HAVE_UNISTD_H |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
22 #include <unistd.h> |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
23 #endif |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
24 |
| 3034 | 25 #include <sys/types.h> |
| 26 #include <sys/stat.h> | |
| 27 #include <fcntl.h> | |
|
14298
1205b180ba90
Skip Montanaro <skip@mojam.com>:
Fred Drake <fdrake@acm.org>
parents:
13690
diff
changeset
|
28 #ifdef HAVE_DB_185_H |
|
1205b180ba90
Skip Montanaro <skip@mojam.com>:
Fred Drake <fdrake@acm.org>
parents:
13690
diff
changeset
|
29 #include <db_185.h> |
|
1205b180ba90
Skip Montanaro <skip@mojam.com>:
Fred Drake <fdrake@acm.org>
parents:
13690
diff
changeset
|
30 #else |
| 3034 | 31 #include <db.h> |
|
14298
1205b180ba90
Skip Montanaro <skip@mojam.com>:
Fred Drake <fdrake@acm.org>
parents:
13690
diff
changeset
|
32 #endif |
| 3034 | 33 /* Please don't include internal header files of the Berkeley db package |
| 34 (it messes up the info required in the Setup file) */ | |
| 35 | |
| 36 typedef struct { | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
37 PyObject_HEAD |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
38 DB *di_bsddb; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
39 int di_size; /* -1 means recompute */ |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
40 int di_type; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
41 #ifdef WITH_THREAD |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
42 PyThread_type_lock di_lock; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
43 #endif |
| 3034 | 44 } bsddbobject; |
| 45 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
46 staticforward PyTypeObject Bsddbtype; |
| 3034 | 47 |
| 48 #define is_bsddbobject(v) ((v)->ob_type == &Bsddbtype) | |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
49 #define check_bsddbobject_open(v, r) if ((v)->di_bsddb == NULL) \ |
| 16696 | 50 { PyErr_SetString(BsddbError, \ |
| 51 "BSDDB object has already been closed"); \ | |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
52 return r; } |
| 3034 | 53 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
54 static PyObject *BsddbError; |
| 3034 | 55 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
56 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
57 newdbhashobject(char *file, int flags, int mode, |
| 16696 | 58 int bsize, int ffactor, int nelem, int cachesize, |
| 59 int hash, int lorder) | |
| 3034 | 60 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
61 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
62 HASHINFO info; |
| 3034 | 63 |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
64 if ((dp = PyObject_New(bsddbobject, &Bsddbtype)) == NULL) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
65 return NULL; |
| 3034 | 66 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
67 info.bsize = bsize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
68 info.ffactor = ffactor; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
69 info.nelem = nelem; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
70 info.cachesize = cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
71 info.hash = NULL; /* XXX should derive from hash argument */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
72 info.lorder = lorder; |
| 3034 | 73 |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
74 #ifdef O_BINARY |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
75 flags |= O_BINARY; |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
76 #endif |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
77 Py_BEGIN_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
78 dp->di_bsddb = dbopen(file, flags, mode, DB_HASH, &info); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
79 Py_END_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
80 if (dp->di_bsddb == NULL) { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
81 PyErr_SetFromErrno(BsddbError); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
82 #ifdef WITH_THREAD |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
83 dp->di_lock = NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
84 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
85 Py_DECREF(dp); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
86 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
87 } |
| 3034 | 88 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
89 dp->di_size = -1; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
90 dp->di_type = DB_HASH; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
91 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
92 #ifdef WITH_THREAD |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
93 dp->di_lock = PyThread_allocate_lock(); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
94 if (dp->di_lock == NULL) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
95 PyErr_SetString(BsddbError, "can't allocate lock"); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
96 Py_DECREF(dp); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
97 return NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
98 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
99 #endif |
| 3034 | 100 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
101 return (PyObject *)dp; |
| 3034 | 102 } |
| 103 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
104 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
105 newdbbtobject(char *file, int flags, int mode, |
| 16696 | 106 int btflags, int cachesize, int maxkeypage, |
| 107 int minkeypage, int psize, int lorder) | |
| 3034 | 108 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
109 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
110 BTREEINFO info; |
| 3034 | 111 |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
112 if ((dp = PyObject_New(bsddbobject, &Bsddbtype)) == NULL) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
113 return NULL; |
| 3034 | 114 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
115 info.flags = btflags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
116 info.cachesize = cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
117 info.maxkeypage = maxkeypage; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
118 info.minkeypage = minkeypage; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
119 info.psize = psize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
120 info.lorder = lorder; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
121 info.compare = 0; /* Use default comparison functions, for now..*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
122 info.prefix = 0; |
| 3034 | 123 |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
124 #ifdef O_BINARY |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
125 flags |= O_BINARY; |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
126 #endif |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
127 Py_BEGIN_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
128 dp->di_bsddb = dbopen(file, flags, mode, DB_BTREE, &info); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
129 Py_END_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
130 if (dp->di_bsddb == NULL) { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
131 PyErr_SetFromErrno(BsddbError); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
132 #ifdef WITH_THREAD |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
133 dp->di_lock = NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
134 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
135 Py_DECREF(dp); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
136 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
137 } |
| 3034 | 138 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
139 dp->di_size = -1; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
140 dp->di_type = DB_BTREE; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
141 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
142 #ifdef WITH_THREAD |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
143 dp->di_lock = PyThread_allocate_lock(); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
144 if (dp->di_lock == NULL) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
145 PyErr_SetString(BsddbError, "can't allocate lock"); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
146 Py_DECREF(dp); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
147 return NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
148 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
149 #endif |
| 3034 | 150 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
151 return (PyObject *)dp; |
| 3034 | 152 } |
| 153 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
154 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
155 newdbrnobject(char *file, int flags, int mode, |
| 16696 | 156 int rnflags, int cachesize, int psize, int lorder, |
| 157 size_t reclen, u_char bval, char *bfname) | |
| 3034 | 158 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
159 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
160 RECNOINFO info; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
161 int fd; |
| 3034 | 162 |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
163 if ((dp = PyObject_New(bsddbobject, &Bsddbtype)) == NULL) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
164 return NULL; |
| 3034 | 165 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
166 info.flags = rnflags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
167 info.cachesize = cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
168 info.psize = psize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
169 info.lorder = lorder; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
170 info.reclen = reclen; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
171 info.bval = bval; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
172 info.bfname = bfname; |
| 3034 | 173 |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
174 #ifdef O_BINARY |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
175 flags |= O_BINARY; |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
176 #endif |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
177 /* This is a hack to avoid a dbopen() bug that happens when |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
178 * it fails. */ |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
179 fd = open(file, flags); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
180 if (fd == -1) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
181 dp->di_bsddb = NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
182 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
183 else { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
184 close(fd); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
185 Py_BEGIN_ALLOW_THREADS |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
186 dp->di_bsddb = dbopen(file, flags, mode, DB_RECNO, &info); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
187 Py_END_ALLOW_THREADS |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
188 } |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
189 if (dp->di_bsddb == NULL) { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
190 PyErr_SetFromErrno(BsddbError); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
191 #ifdef WITH_THREAD |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
192 dp->di_lock = NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
193 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
194 Py_DECREF(dp); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
195 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
196 } |
| 3034 | 197 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
198 dp->di_size = -1; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
199 dp->di_type = DB_RECNO; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
200 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
201 #ifdef WITH_THREAD |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
202 dp->di_lock = PyThread_allocate_lock(); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
203 if (dp->di_lock == NULL) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
204 PyErr_SetString(BsddbError, "can't allocate lock"); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
205 Py_DECREF(dp); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
206 return NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
207 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
208 #endif |
| 3034 | 209 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
210 return (PyObject *)dp; |
| 3034 | 211 } |
| 212 | |
| 213 static void | |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
214 bsddb_dealloc(bsddbobject *dp) |
| 3034 | 215 { |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
216 #ifdef WITH_THREAD |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
217 if (dp->di_lock) { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
218 PyThread_acquire_lock(dp->di_lock, 0); |
|
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
219 PyThread_release_lock(dp->di_lock); |
|
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
220 PyThread_free_lock(dp->di_lock); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
221 dp->di_lock = NULL; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
222 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
223 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
224 if (dp->di_bsddb != NULL) { |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
225 int status; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
226 Py_BEGIN_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
227 status = (dp->di_bsddb->close)(dp->di_bsddb); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
228 Py_END_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
229 if (status != 0) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
230 fprintf(stderr, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
231 "Python bsddb: close errno %d in dealloc\n", |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
232 errno); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
233 } |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
234 PyObject_Del(dp); |
| 3034 | 235 } |
| 236 | |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
237 #ifdef WITH_THREAD |
| 16696 | 238 #define BSDDB_BGN_SAVE(_dp) \ |
| 239 Py_BEGIN_ALLOW_THREADS PyThread_acquire_lock(_dp->di_lock,1); | |
| 240 #define BSDDB_END_SAVE(_dp) \ | |
| 241 PyThread_release_lock(_dp->di_lock); Py_END_ALLOW_THREADS | |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
242 #else |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
243 #define BSDDB_BGN_SAVE(_dp) Py_BEGIN_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
244 #define BSDDB_END_SAVE(_dp) Py_END_ALLOW_THREADS |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
245 #endif |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
246 |
| 3034 | 247 static int |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
248 bsddb_length(bsddbobject *dp) |
| 3034 | 249 { |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
250 check_bsddbobject_open(dp, -1); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
251 if (dp->di_size < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
252 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
253 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
254 int size = 0; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
255 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
256 for (status = (dp->di_bsddb->seq)(dp->di_bsddb, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
257 &krec, &drec,R_FIRST); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
258 status == 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
259 status = (dp->di_bsddb->seq)(dp->di_bsddb, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
260 &krec, &drec, R_NEXT)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
261 size++; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
262 BSDDB_END_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
263 if (status < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
264 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
265 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
266 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
267 dp->di_size = size; |
| 3034 | 268 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
269 return dp->di_size; |
| 3034 | 270 } |
| 271 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
272 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
273 bsddb_subscript(bsddbobject *dp, PyObject *key) |
| 3034 | 274 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
275 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
276 DBT krec, drec; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
277 char *data,buf[4096]; |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
278 int size; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
279 PyObject *result; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
280 recno_t recno; |
|
5828
9fa2bd8a2b78
Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents:
4979
diff
changeset
|
281 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
282 if (dp->di_type == DB_RECNO) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
283 if (!PyArg_Parse(key, "i", &recno)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
284 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
285 "key type must be integer"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
286 return NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
287 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
288 krec.data = &recno; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
289 krec.size = sizeof(recno); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
290 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
291 else { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
292 if (!PyArg_Parse(key, "s#", &data, &size)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
293 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
294 "key type must be string"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
295 return NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
296 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
297 krec.data = data; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
298 krec.size = size; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
299 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
300 check_bsddbobject_open(dp, NULL); |
| 3034 | 301 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
302 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
303 status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
304 if (status == 0) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
305 if (drec.size > sizeof(buf)) data = malloc(drec.size); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
306 else data = buf; |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
307 if (data!=NULL) memcpy(data,drec.data,drec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
308 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
309 BSDDB_END_SAVE(dp) |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
310 if (data==NULL) return PyErr_NoMemory(); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
311 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
312 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
313 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
314 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
315 PyErr_SetObject(PyExc_KeyError, key); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
316 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
317 } |
| 3034 | 318 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
319 result = PyString_FromStringAndSize(data, (int)drec.size); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
320 if (data != buf) free(data); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
321 return result; |
| 3034 | 322 } |
| 323 | |
| 324 static int | |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
325 bsddb_ass_sub(bsddbobject *dp, PyObject *key, PyObject *value) |
| 3034 | 326 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
327 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
328 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
329 char *data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
330 int size; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
331 recno_t recno; |
| 3034 | 332 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
333 if (dp->di_type == DB_RECNO) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
334 if (!PyArg_Parse(key, "i", &recno)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
335 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
336 "bsddb key type must be integer"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
337 return -1; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
338 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
339 krec.data = &recno; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
340 krec.size = sizeof(recno); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
341 } |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
342 else { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
343 if (!PyArg_Parse(key, "s#", &data, &size)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
344 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
345 "bsddb key type must be string"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
346 return -1; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
347 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
348 krec.data = data; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
349 krec.size = size; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
350 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
351 check_bsddbobject_open(dp, -1); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
352 dp->di_size = -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
353 if (value == NULL) { |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
354 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
355 status = (dp->di_bsddb->del)(dp->di_bsddb, &krec, 0); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
356 BSDDB_END_SAVE(dp) |
| 3034 | 357 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
358 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
359 if (!PyArg_Parse(value, "s#", &data, &size)) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
360 PyErr_SetString(PyExc_TypeError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
361 "bsddb value type must be string"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
362 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
363 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
364 drec.data = data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
365 drec.size = size; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
366 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
367 status = (dp->di_bsddb->put)(dp->di_bsddb, &krec, &drec, 0); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
368 BSDDB_END_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
369 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
370 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
371 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
372 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
373 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
374 PyErr_SetObject(PyExc_KeyError, key); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
375 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
376 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
377 return 0; |
| 3034 | 378 } |
| 379 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
380 static PyMappingMethods bsddb_as_mapping = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
381 (inquiry)bsddb_length, /*mp_length*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
382 (binaryfunc)bsddb_subscript, /*mp_subscript*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
383 (objobjargproc)bsddb_ass_sub, /*mp_ass_subscript*/ |
| 3034 | 384 }; |
| 385 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
386 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
387 bsddb_close(bsddbobject *dp, PyObject *args) |
| 3034 | 388 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
389 if (!PyArg_NoArgs(args)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
390 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
391 if (dp->di_bsddb != NULL) { |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
392 int status; |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
393 BSDDB_BGN_SAVE(dp) |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
394 status = (dp->di_bsddb->close)(dp->di_bsddb); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
395 BSDDB_END_SAVE(dp) |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
396 if (status != 0) { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
397 dp->di_bsddb = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
398 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
399 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
400 } |
| 3034 | 401 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
402 dp->di_bsddb = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
403 Py_INCREF(Py_None); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
404 return Py_None; |
| 3034 | 405 } |
| 406 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
407 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
408 bsddb_keys(bsddbobject *dp, PyObject *args) |
| 3034 | 409 { |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
410 PyObject *list, *item=NULL; |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
411 DBT krec, drec; |
|
7982
a909a2869ac5
Make new gcc -Wall happy
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
412 char *data=NULL,buf[4096]; |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
413 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
414 int err; |
| 3034 | 415 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
416 if (!PyArg_NoArgs(args)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
417 return NULL; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
418 check_bsddbobject_open(dp, NULL); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
419 list = PyList_New(0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
420 if (list == NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
421 return NULL; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
422 BSDDB_BGN_SAVE(dp) |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
423 status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_FIRST); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
424 if (status == 0) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
425 if (krec.size > sizeof(buf)) data = malloc(krec.size); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
426 else data = buf; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
427 if (data != NULL) memcpy(data,krec.data,krec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
428 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
429 BSDDB_END_SAVE(dp) |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
430 if (data==NULL) return PyErr_NoMemory(); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
431 while (status == 0) { |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
432 if (dp->di_type == DB_RECNO) |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
433 item = PyInt_FromLong(*((int*)data)); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
434 else |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
435 item = PyString_FromStringAndSize(data, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
436 (int)krec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
437 if (data != buf) free(data); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
438 if (item == NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
439 Py_DECREF(list); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
440 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
441 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
442 err = PyList_Append(list, item); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
443 Py_DECREF(item); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
444 if (err != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
445 Py_DECREF(list); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
446 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
447 } |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
448 BSDDB_BGN_SAVE(dp) |
| 16696 | 449 status = (dp->di_bsddb->seq) |
| 450 (dp->di_bsddb, &krec, &drec, R_NEXT); | |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
451 if (status == 0) { |
| 16696 | 452 if (krec.size > sizeof(buf)) |
| 453 data = malloc(krec.size); | |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
454 else data = buf; |
| 16696 | 455 if (data != NULL) |
| 456 memcpy(data,krec.data,krec.size); | |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
457 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
458 BSDDB_END_SAVE(dp) |
| 16696 | 459 if (data == NULL) return PyErr_NoMemory(); |
| 3034 | 460 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
461 if (status < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
462 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
463 Py_DECREF(list); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
464 return NULL; |
| 3034 | 465 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
466 if (dp->di_size < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
467 dp->di_size = PyList_Size(list); /* We just did the work */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
468 return list; |
| 3034 | 469 } |
| 470 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
471 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
472 bsddb_has_key(bsddbobject *dp, PyObject *args) |
| 3034 | 473 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
474 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
475 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
476 char *data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
477 int size; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
478 recno_t recno; |
| 3034 | 479 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
480 if (dp->di_type == DB_RECNO) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
481 if (!PyArg_Parse(args, "i", &recno)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
482 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
483 "key type must be integer"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
484 return NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
485 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
486 krec.data = &recno; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
487 krec.size = sizeof(recno); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
488 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
489 else { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
490 if (!PyArg_Parse(args, "s#", &data, &size)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
491 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
492 "key type must be string"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
493 return NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
494 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
495 krec.data = data; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
496 krec.size = size; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
497 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
498 check_bsddbobject_open(dp, NULL); |
| 3034 | 499 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
500 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
501 status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
502 BSDDB_END_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
503 if (status < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
504 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
505 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
506 } |
| 3034 | 507 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
508 return PyInt_FromLong(status == 0); |
| 3034 | 509 } |
| 510 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
511 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
512 bsddb_set_location(bsddbobject *dp, PyObject *key) |
| 3034 | 513 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
514 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
515 DBT krec, drec; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
516 char *data,buf[4096]; |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
517 int size; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
518 PyObject *result; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
519 recno_t recno; |
| 3034 | 520 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
521 if (dp->di_type == DB_RECNO) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
522 if (!PyArg_Parse(key, "i", &recno)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
523 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
524 "key type must be integer"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
525 return NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
526 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
527 krec.data = &recno; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
528 krec.size = sizeof(recno); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
529 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
530 else { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
531 if (!PyArg_Parse(key, "s#", &data, &size)) { |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
532 PyErr_SetString(PyExc_TypeError, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
533 "key type must be string"); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
534 return NULL; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
535 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
536 krec.data = data; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
537 krec.size = size; |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
538 } |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
539 check_bsddbobject_open(dp, NULL); |
| 3034 | 540 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
541 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
542 status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_CURSOR); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
543 if (status == 0) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
544 if (drec.size > sizeof(buf)) data = malloc(drec.size); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
545 else data = buf; |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
546 if (data!=NULL) memcpy(data,drec.data,drec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
547 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
548 BSDDB_END_SAVE(dp) |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
549 if (data==NULL) return PyErr_NoMemory(); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
550 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
551 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
552 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
553 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
554 PyErr_SetObject(PyExc_KeyError, key); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
555 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
556 } |
| 3034 | 557 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
558 if (dp->di_type == DB_RECNO) |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
559 result = Py_BuildValue("is#", *((int*)krec.data), |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
560 data, drec.size); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
561 else |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
562 result = Py_BuildValue("s#s#", krec.data, krec.size, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
563 data, drec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
564 if (data != buf) free(data); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
565 return result; |
| 3034 | 566 } |
| 567 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
568 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
569 bsddb_seq(bsddbobject *dp, PyObject *args, int sequence_request) |
| 3034 | 570 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
571 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
572 DBT krec, drec; |
|
7982
a909a2869ac5
Make new gcc -Wall happy
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
573 char *kdata=NULL,kbuf[4096]; |
|
a909a2869ac5
Make new gcc -Wall happy
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
574 char *ddata=NULL,dbuf[4096]; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
575 PyObject *result; |
| 3034 | 576 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
577 if (!PyArg_NoArgs(args)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
578 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
579 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
580 check_bsddbobject_open(dp, NULL); |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
581 krec.data = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
582 krec.size = 0; |
| 3034 | 583 |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
584 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
585 status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
586 &drec, sequence_request); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
587 if (status == 0) { |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
588 if (krec.size > sizeof(kbuf)) kdata = malloc(krec.size); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
589 else kdata = kbuf; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
590 if (kdata != NULL) memcpy(kdata,krec.data,krec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
591 if (drec.size > sizeof(dbuf)) ddata = malloc(drec.size); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
592 else ddata = dbuf; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
593 if (ddata != NULL) memcpy(ddata,drec.data,drec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
594 } |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
595 BSDDB_END_SAVE(dp) |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
596 if (status == 0) { |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
597 if ((kdata == NULL) || (ddata == NULL)) |
|
15575
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
598 return PyErr_NoMemory(); |
|
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
599 } |
|
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
600 else { |
|
03c32faa1a49
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
Andrew M. Kuchling <amk@amk.ca>
parents:
14375
diff
changeset
|
601 /* (status != 0) */ |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
602 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
603 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
604 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
605 PyErr_SetObject(PyExc_KeyError, args); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
606 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
607 } |
| 3034 | 608 |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
609 |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
610 if (dp->di_type == DB_RECNO) |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
611 result = Py_BuildValue("is#", *((int*)kdata), |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
612 ddata, drec.size); |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
613 else |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
614 result = Py_BuildValue("s#s#", kdata, krec.size, |
|
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
615 ddata, drec.size); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
616 if (kdata != kbuf) free(kdata); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
617 if (ddata != dbuf) free(ddata); |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
618 return result; |
| 3034 | 619 } |
| 620 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
621 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
622 bsddb_next(bsddbobject *dp, PyObject *key) |
| 3034 | 623 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
624 return bsddb_seq(dp, key, R_NEXT); |
| 3034 | 625 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
626 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
627 bsddb_previous(bsddbobject *dp, PyObject *key) |
| 3034 | 628 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
629 return bsddb_seq(dp, key, R_PREV); |
| 3034 | 630 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
631 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
632 bsddb_first(bsddbobject *dp, PyObject *key) |
| 3034 | 633 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
634 return bsddb_seq(dp, key, R_FIRST); |
| 3034 | 635 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
636 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
637 bsddb_last(bsddbobject *dp, PyObject *key) |
| 3034 | 638 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
639 return bsddb_seq(dp, key, R_LAST); |
| 3034 | 640 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
641 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
642 bsddb_sync(bsddbobject *dp, PyObject *args) |
| 3034 | 643 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
644 int status; |
| 3034 | 645 |
|
5828
9fa2bd8a2b78
Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents:
4979
diff
changeset
|
646 if (!PyArg_NoArgs(args)) |
|
9fa2bd8a2b78
Patches by AMK to check that the db is still open.
Guido van Rossum <guido@python.org>
parents:
4979
diff
changeset
|
647 return NULL; |
|
16798
258dcafe2d0b
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fred Drake <fdrake@acm.org>
parents:
16696
diff
changeset
|
648 check_bsddbobject_open(dp, NULL); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
649 BSDDB_BGN_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
650 status = (dp->di_bsddb->sync)(dp->di_bsddb, 0); |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
651 BSDDB_END_SAVE(dp) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
652 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
653 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
654 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
655 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
656 return PyInt_FromLong(status = 0); |
| 3034 | 657 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
658 static PyMethodDef bsddb_methods[] = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
659 {"close", (PyCFunction)bsddb_close}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
660 {"keys", (PyCFunction)bsddb_keys}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
661 {"has_key", (PyCFunction)bsddb_has_key}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
662 {"set_location", (PyCFunction)bsddb_set_location}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
663 {"next", (PyCFunction)bsddb_next}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
664 {"previous", (PyCFunction)bsddb_previous}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
665 {"first", (PyCFunction)bsddb_first}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
666 {"last", (PyCFunction)bsddb_last}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
667 {"sync", (PyCFunction)bsddb_sync}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
668 {NULL, NULL} /* sentinel */ |
| 3034 | 669 }; |
| 670 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
671 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
672 bsddb_getattr(PyObject *dp, char *name) |
| 3034 | 673 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
674 return Py_FindMethod(bsddb_methods, dp, name); |
| 3034 | 675 } |
| 676 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
677 static PyTypeObject Bsddbtype = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
678 PyObject_HEAD_INIT(NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
679 0, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
680 "bsddb", |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
681 sizeof(bsddbobject), |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
682 0, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
683 (destructor)bsddb_dealloc, /*tp_dealloc*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
684 0, /*tp_print*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
685 (getattrfunc)bsddb_getattr, /*tp_getattr*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
686 0, /*tp_setattr*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
687 0, /*tp_compare*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
688 0, /*tp_repr*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
689 0, /*tp_as_number*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
690 0, /*tp_as_sequence*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
691 &bsddb_as_mapping, /*tp_as_mapping*/ |
| 3034 | 692 }; |
| 693 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
694 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
695 bsdhashopen(PyObject *self, PyObject *args) |
| 3034 | 696 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
697 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
698 char *flag = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
699 int flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
700 int mode = 0666; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
701 int bsize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
702 int ffactor = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
703 int nelem = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
704 int cachesize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
705 int hash = 0; /* XXX currently ignored */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
706 int lorder = 0; |
| 3034 | 707 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11296
diff
changeset
|
708 if (!PyArg_ParseTuple(args, "s|siiiiiii:hashopen", |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
709 &file, &flag, &mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
710 &bsize, &ffactor, &nelem, &cachesize, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
711 &hash, &lorder)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
712 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
713 if (flag != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
714 /* XXX need to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
715 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
716 flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
717 else if (flag[0] == 'w') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
718 flags = O_RDWR; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
719 else if (flag[0] == 'c') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
720 flags = O_RDWR|O_CREAT; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
721 else if (flag[0] == 'n') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
722 flags = O_RDWR|O_CREAT|O_TRUNC; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
723 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
724 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
725 "Flag should begin with 'r', 'w', 'c' or 'n'"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
726 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
727 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
728 if (flag[1] == 'l') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
729 #if defined(O_EXLOCK) && defined(O_SHLOCK) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
730 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
731 flags |= O_SHLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
732 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
733 flags |= O_EXLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
734 #else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
735 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
736 "locking not supported on this platform"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
737 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
738 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
739 } |
| 3034 | 740 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
741 return newdbhashobject(file, flags, mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
742 bsize, ffactor, nelem, cachesize, hash, lorder); |
| 3034 | 743 } |
| 744 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
745 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
746 bsdbtopen(PyObject *self, PyObject *args) |
| 3034 | 747 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
748 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
749 char *flag = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
750 int flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
751 int mode = 0666; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
752 int cachesize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
753 int maxkeypage = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
754 int minkeypage = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
755 int btflags = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
756 unsigned int psize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
757 int lorder = 0; |
| 3034 | 758 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11296
diff
changeset
|
759 if (!PyArg_ParseTuple(args, "s|siiiiiii:btopen", |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
760 &file, &flag, &mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
761 &btflags, &cachesize, &maxkeypage, &minkeypage, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
762 &psize, &lorder)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
763 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
764 if (flag != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
765 /* XXX need to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
766 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
767 flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
768 else if (flag[0] == 'w') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
769 flags = O_RDWR; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
770 else if (flag[0] == 'c') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
771 flags = O_RDWR|O_CREAT; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
772 else if (flag[0] == 'n') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
773 flags = O_RDWR|O_CREAT|O_TRUNC; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
774 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
775 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
776 "Flag should begin with 'r', 'w', 'c' or 'n'"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
777 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
778 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
779 if (flag[1] == 'l') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
780 #if defined(O_EXLOCK) && defined(O_SHLOCK) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
781 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
782 flags |= O_SHLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
783 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
784 flags |= O_EXLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
785 #else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
786 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
787 "locking not supported on this platform"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
788 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
789 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
790 } |
| 3034 | 791 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
792 return newdbbtobject(file, flags, mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
793 btflags, cachesize, maxkeypage, minkeypage, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
794 psize, lorder); |
| 3034 | 795 } |
|
3600
7c5711a6a475
Be more careful about default args.
Guido van Rossum <guido@python.org>
parents:
3034
diff
changeset
|
796 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
797 static PyObject * |
|
13515
cd7abb4feb1b
ANSI-fication, not really tested, but should (hopefully) compile
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
798 bsdrnopen(PyObject *self, PyObject *args) |
| 3034 | 799 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
800 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
801 char *flag = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
802 int flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
803 int mode = 0666; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
804 int cachesize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
805 int rnflags = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
806 unsigned int psize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
807 int lorder = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
808 size_t reclen = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
809 char *bval = ""; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
810 char *bfname = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
811 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11296
diff
changeset
|
812 if (!PyArg_ParseTuple(args, "s|siiiiiiss:rnopen", |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
813 &file, &flag, &mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
814 &rnflags, &cachesize, &psize, &lorder, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
815 &reclen, &bval, &bfname)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
816 return NULL; |
| 3034 | 817 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
818 if (flag != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
819 /* XXX need to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
820 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
821 flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
822 else if (flag[0] == 'w') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
823 flags = O_RDWR; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
824 else if (flag[0] == 'c') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
825 flags = O_RDWR|O_CREAT; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
826 else if (flag[0] == 'n') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
827 flags = O_RDWR|O_CREAT|O_TRUNC; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
828 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
829 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
830 "Flag should begin with 'r', 'w', 'c' or 'n'"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
831 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
832 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
833 if (flag[1] == 'l') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
834 #if defined(O_EXLOCK) && defined(O_SHLOCK) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
835 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
836 flags |= O_SHLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
837 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
838 flags |= O_EXLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
839 #else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
840 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
841 "locking not supported on this platform"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
842 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
843 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
844 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
845 else if (flag[1] != '\0') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
846 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
847 "Flag char 2 should be 'l' or absent"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
848 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
849 } |
| 3034 | 850 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
851 return newdbrnobject(file, flags, mode, rnflags, cachesize, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
852 psize, lorder, reclen, bval[0], bfname); |
| 3034 | 853 } |
| 854 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
855 static PyMethodDef bsddbmodule_methods[] = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
856 {"hashopen", (PyCFunction)bsdhashopen, 1}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
857 {"btopen", (PyCFunction)bsdbtopen, 1}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
858 {"rnopen", (PyCFunction)bsdrnopen, 1}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
859 {0, 0}, |
| 3034 | 860 }; |
| 861 | |
|
9588
38023a425e48
Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
862 DL_EXPORT(void) |
|
13690
c09c0171474f
ANSIfy some more forward declarations.
Thomas Wouters <thomas@python.org>
parents:
13515
diff
changeset
|
863 initbsddb(void) { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
864 PyObject *m, *d; |
| 3034 | 865 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
866 Bsddbtype.ob_type = &PyType_Type; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
867 m = Py_InitModule("bsddb", bsddbmodule_methods); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
868 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5828
diff
changeset
|
869 BsddbError = PyErr_NewException("bsddb.error", NULL, NULL); |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5828
diff
changeset
|
870 if (BsddbError != NULL) |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5828
diff
changeset
|
871 PyDict_SetItemString(d, "error", BsddbError); |
| 3034 | 872 } |
