annotate Modules/bsddbmodule.c @ 58765:2ba7677bfa95 legacy-trunk

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