annotate Modules/bsddbmodule.c @ 16413:8819867f14ef legacy-trunk

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