Mercurial > cpython-lru_cache-weakref
annotate Modules/bsddbmodule.c @ 17322:bd110eadc19a legacy-trunk
One-liner critical fix from Jim Fulton: Eric's string-method crusade
got the order backwards in a line (for .find()).
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Thu, 05 Apr 2001 22:26:23 +0000 |
| parents | 848f08559916 |
| children | 91dd223829c6 |
| 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) |
|
17120
848f08559916
Don't raise MemoryError in keys() when the database is empty.
Guido van Rossum <guido@python.org>
parents:
16798
diff
changeset
|
430 if (status == 0 && 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 } |
