annotate Modules/bsddbmodule.c @ 16798:258dcafe2d0b legacy-trunk

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