annotate Modules/bsddbmodule.c @ 25838:8540887bcec6 2.2

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