annotate Modules/bsddbmodule.c @ 12357:5b59ea41db4e legacy-trunk

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