Mercurial > cpython-lru_cache-weakref
annotate Modules/bsddbmodule.c @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | b864b414c457 |
| children | 9fa2bd8a2b78 |
| rev | line source |
|---|---|
| 3034 | 1 /*********************************************************** |
| 2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, | |
| 3 The Netherlands. | |
| 4 | |
| 5 All Rights Reserved | |
| 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 | 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 | 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 | 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 | 29 |
| 30 ******************************************************************/ | |
| 31 | |
| 32 /* Berkeley DB interface. | |
| 33 Author: Michael McLay | |
| 34 Hacked: Guido van Rossum | |
| 35 Btree and Recno additions plus sequence methods: David Ely | |
| 36 | |
| 37 XXX To do: | |
| 38 - provide interface to the B-tree and record libraries too | |
| 39 - provide a way to access the various hash functions | |
| 40 - support more open flags | |
| 41 */ | |
| 42 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
43 #include "Python.h" |
| 3034 | 44 |
| 45 #include <sys/types.h> | |
| 46 #include <sys/stat.h> | |
| 47 #include <fcntl.h> | |
| 48 #include <db.h> | |
| 49 /* Please don't include internal header files of the Berkeley db package | |
| 50 (it messes up the info required in the Setup file) */ | |
| 51 | |
| 52 typedef struct { | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
53 PyObject_HEAD |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
54 DB *di_bsddb; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
55 int di_size; /* -1 means recompute */ |
| 3034 | 56 } bsddbobject; |
| 57 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
58 staticforward PyTypeObject Bsddbtype; |
| 3034 | 59 |
| 60 #define is_bsddbobject(v) ((v)->ob_type == &Bsddbtype) | |
| 61 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
62 static PyObject *BsddbError; |
| 3034 | 63 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
64 static PyObject * |
| 3034 | 65 newdbhashobject(file, flags, mode, |
| 66 bsize, ffactor, nelem, cachesize, hash, lorder) | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
67 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
68 int flags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
69 int mode; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
70 int bsize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
71 int ffactor; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
72 int nelem; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
73 int cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
74 int hash; /* XXX ignored */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
75 int lorder; |
| 3034 | 76 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
77 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
78 HASHINFO info; |
| 3034 | 79 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
80 if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
81 return NULL; |
| 3034 | 82 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
83 info.bsize = bsize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
84 info.ffactor = ffactor; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
85 info.nelem = nelem; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
86 info.cachesize = cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
87 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
|
88 info.lorder = lorder; |
| 3034 | 89 |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
90 #ifdef O_BINARY |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
91 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
|
92 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
93 if ((dp->di_bsddb = dbopen(file, flags, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
94 mode, DB_HASH, &info)) == NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
95 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
96 Py_DECREF(dp); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
97 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
98 } |
| 3034 | 99 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
100 dp->di_size = -1; |
| 3034 | 101 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
102 return (PyObject *)dp; |
| 3034 | 103 } |
| 104 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
105 static PyObject * |
| 3034 | 106 newdbbtobject(file, flags, mode, |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
107 btflags, cachesize, maxkeypage, minkeypage, psize, lorder) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
108 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
109 int flags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
110 int mode; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
111 int btflags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
112 int cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
113 int maxkeypage; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
114 int minkeypage; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
115 int psize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
116 int lorder; |
| 3034 | 117 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
118 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
119 BTREEINFO info; |
| 3034 | 120 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
121 if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
122 return NULL; |
| 3034 | 123 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
124 info.flags = btflags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
125 info.cachesize = cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
126 info.maxkeypage = maxkeypage; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
127 info.minkeypage = minkeypage; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
128 info.psize = psize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
129 info.lorder = lorder; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
130 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
|
131 info.prefix = 0; |
| 3034 | 132 |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
133 #ifdef O_BINARY |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
134 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
|
135 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
136 if ((dp->di_bsddb = dbopen(file, flags, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
137 mode, DB_BTREE, &info)) == NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
138 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
139 Py_DECREF(dp); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
140 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
141 } |
| 3034 | 142 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
143 dp->di_size = -1; |
| 3034 | 144 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
145 return (PyObject *)dp; |
| 3034 | 146 } |
| 147 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
148 static PyObject * |
| 3034 | 149 newdbrnobject(file, flags, mode, |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
150 rnflags, cachesize, psize, lorder, reclen, bval, bfname) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
151 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
152 int flags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
153 int mode; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
154 int rnflags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
155 int cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
156 int psize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
157 int lorder; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
158 size_t reclen; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
159 u_char bval; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
160 char *bfname; |
| 3034 | 161 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
162 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
163 RECNOINFO info; |
| 3034 | 164 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
165 if ((dp = PyObject_NEW(bsddbobject, &Bsddbtype)) == NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
166 return NULL; |
| 3034 | 167 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
168 info.flags = rnflags; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
169 info.cachesize = cachesize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
170 info.psize = psize; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
171 info.lorder = lorder; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
172 info.reclen = reclen; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
173 info.bval = bval; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
174 info.bfname = bfname; |
| 3034 | 175 |
|
4295
008b9fc565bf
Force O_BINARY in flags if defined, for e.g. Microsoft platforms.
Guido van Rossum <guido@python.org>
parents:
4294
diff
changeset
|
176 #ifdef O_BINARY |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
177 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
|
178 #endif |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
179 if ((dp->di_bsddb = dbopen(file, flags, mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
180 DB_RECNO, &info)) == NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
181 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
182 Py_DECREF(dp); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
183 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
184 } |
| 3034 | 185 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
186 dp->di_size = -1; |
| 3034 | 187 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
188 return (PyObject *)dp; |
| 3034 | 189 } |
| 190 | |
| 191 | |
| 192 static void | |
| 193 bsddb_dealloc(dp) | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
194 bsddbobject *dp; |
| 3034 | 195 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
196 if (dp->di_bsddb != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
197 if ((dp->di_bsddb->close)(dp->di_bsddb) != 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
198 fprintf(stderr, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
199 "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
|
200 errno); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
201 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
202 PyMem_DEL(dp); |
| 3034 | 203 } |
| 204 | |
| 205 static int | |
| 206 bsddb_length(dp) | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
207 bsddbobject *dp; |
| 3034 | 208 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
209 if (dp->di_size < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
210 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
211 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
212 int size = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
213 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
|
214 &krec, &drec,R_FIRST); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
215 status == 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
216 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
|
217 &krec, &drec, R_NEXT)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
218 size++; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
219 if (status < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
220 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
221 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
222 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
223 dp->di_size = size; |
| 3034 | 224 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
225 return dp->di_size; |
| 3034 | 226 } |
| 227 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
228 static PyObject * |
| 3034 | 229 bsddb_subscript(dp, key) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
230 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
231 PyObject *key; |
| 3034 | 232 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
233 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
234 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
235 char *data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
236 int size; |
| 3034 | 237 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
238 if (!PyArg_Parse(key, "s#", &data, &size)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
239 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
240 krec.data = data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
241 krec.size = size; |
| 3034 | 242 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
243 status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
244 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
245 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
246 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
247 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
248 PyErr_SetObject(PyExc_KeyError, key); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
249 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
250 } |
| 3034 | 251 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
252 return PyString_FromStringAndSize((char *)drec.data, (int)drec.size); |
| 3034 | 253 } |
| 254 | |
| 255 static int | |
| 256 bsddb_ass_sub(dp, key, value) | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
257 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
258 PyObject *key, *value; |
| 3034 | 259 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
260 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
261 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
262 char *data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
263 int size; |
| 3034 | 264 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
265 if (!PyArg_Parse(key, "s#", &data, &size)) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
266 PyErr_SetString(PyExc_TypeError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
267 "bsddb key type must be string"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
268 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
269 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
270 krec.data = data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
271 krec.size = size; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
272 dp->di_size = -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
273 if (value == NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
274 status = (dp->di_bsddb->del)(dp->di_bsddb, &krec, 0); |
| 3034 | 275 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
276 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
277 if (!PyArg_Parse(value, "s#", &data, &size)) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
278 PyErr_SetString(PyExc_TypeError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
279 "bsddb value type must be string"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
280 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
281 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
282 drec.data = data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
283 drec.size = size; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
284 #if 0 |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
285 /* 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
|
286 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
|
287 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
|
288 Roger E. Masse 1/16/97 |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
289 */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
290 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
|
291 drec.data, drec.size); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
292 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
|
293 krec.data, krec.size); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
294 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
295 status = (dp->di_bsddb->put)(dp->di_bsddb, &krec, &drec, 0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
296 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
297 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
298 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
299 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
300 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
301 PyErr_SetObject(PyExc_KeyError, key); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
302 return -1; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
303 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
304 return 0; |
| 3034 | 305 } |
| 306 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
307 static PyMappingMethods bsddb_as_mapping = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
308 (inquiry)bsddb_length, /*mp_length*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
309 (binaryfunc)bsddb_subscript, /*mp_subscript*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
310 (objobjargproc)bsddb_ass_sub, /*mp_ass_subscript*/ |
| 3034 | 311 }; |
| 312 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
313 static PyObject * |
| 3034 | 314 bsddb_close(dp, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
315 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
316 PyObject *args; |
| 3034 | 317 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
318 if (!PyArg_NoArgs(args)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
319 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
320 if (dp->di_bsddb != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
321 if ((dp->di_bsddb->close)(dp->di_bsddb) != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
322 dp->di_bsddb = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
323 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
324 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
325 } |
| 3034 | 326 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
327 dp->di_bsddb = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
328 Py_INCREF(Py_None); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
329 return Py_None; |
| 3034 | 330 } |
| 331 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
332 static PyObject * |
| 3034 | 333 bsddb_keys(dp, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
334 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
335 PyObject *args; |
| 3034 | 336 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
337 PyObject *list, *item; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
338 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
339 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
340 int err; |
| 3034 | 341 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
342 if (!PyArg_NoArgs(args)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
343 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
344 list = PyList_New(0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
345 if (list == NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
346 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
347 for (status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_FIRST); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
348 status == 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
349 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
|
350 &krec, &drec, R_NEXT)) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
351 item = PyString_FromStringAndSize((char *)krec.data, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
352 (int)krec.size); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
353 if (item == NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
354 Py_DECREF(list); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
355 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
356 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
357 err = PyList_Append(list, item); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
358 Py_DECREF(item); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
359 if (err != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
360 Py_DECREF(list); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
361 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
362 } |
| 3034 | 363 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
364 if (status < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
365 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
366 Py_DECREF(list); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
367 return NULL; |
| 3034 | 368 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
369 if (dp->di_size < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
370 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
|
371 return list; |
| 3034 | 372 } |
| 373 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
374 static PyObject * |
| 3034 | 375 bsddb_has_key(dp, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
376 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
377 PyObject *args; |
| 3034 | 378 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
379 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
380 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
381 char *data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
382 int size; |
| 3034 | 383 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
384 if (!PyArg_Parse(args, "s#", &data, &size)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
385 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
386 krec.data = data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
387 krec.size = size; |
| 3034 | 388 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
389 status = (dp->di_bsddb->get)(dp->di_bsddb, &krec, &drec, 0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
390 if (status < 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
391 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
392 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
393 } |
| 3034 | 394 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
395 return PyInt_FromLong(status == 0); |
| 3034 | 396 } |
| 397 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
398 static PyObject * |
| 3034 | 399 bsddb_set_location(dp, key) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
400 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
401 PyObject *key; |
| 3034 | 402 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
403 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
404 DBT krec, drec; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
405 char *data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
406 int size; |
| 3034 | 407 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
408 if (!PyArg_Parse(key, "s#", &data, &size)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
409 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
410 krec.data = data; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
411 krec.size = size; |
| 3034 | 412 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
413 status = (dp->di_bsddb->seq)(dp->di_bsddb, &krec, &drec, R_CURSOR); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
414 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
415 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
416 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
417 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
418 PyErr_SetObject(PyExc_KeyError, key); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
419 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
420 } |
| 3034 | 421 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
422 return Py_BuildValue("s#s#", krec.data, krec.size, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
423 drec.data, drec.size); |
| 3034 | 424 } |
| 425 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
426 static PyObject * |
| 3034 | 427 bsddb_seq(dp, args, sequence_request) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
428 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
429 PyObject *args; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
430 int sequence_request; |
| 3034 | 431 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
432 int status; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
433 DBT krec, drec; |
| 3034 | 434 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
435 if (!PyArg_NoArgs(args)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
436 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
437 |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
438 krec.data = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
439 krec.size = 0; |
| 3034 | 440 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
441 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
|
442 &drec, sequence_request); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
443 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
444 if (status < 0) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
445 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
446 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
447 PyErr_SetObject(PyExc_KeyError, args); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
448 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
449 } |
| 3034 | 450 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
451 return Py_BuildValue("s#s#", krec.data, krec.size, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
452 drec.data, drec.size); |
| 3034 | 453 } |
| 454 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
455 static PyObject * |
| 3034 | 456 bsddb_next(dp, key) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
457 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
458 PyObject *key; |
| 3034 | 459 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
460 return bsddb_seq(dp, key, R_NEXT); |
| 3034 | 461 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
462 static PyObject * |
| 3034 | 463 bsddb_previous(dp, key) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
464 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
465 PyObject *key; |
| 3034 | 466 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
467 return bsddb_seq(dp, key, R_PREV); |
| 3034 | 468 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
469 static PyObject * |
| 3034 | 470 bsddb_first(dp, key) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
471 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
472 PyObject *key; |
| 3034 | 473 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
474 return bsddb_seq(dp, key, R_FIRST); |
| 3034 | 475 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
476 static PyObject * |
| 3034 | 477 bsddb_last(dp, key) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
478 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
479 PyObject *key; |
| 3034 | 480 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
481 return bsddb_seq(dp, key, R_LAST); |
| 3034 | 482 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
483 static PyObject * |
| 3034 | 484 bsddb_sync(dp, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
485 bsddbobject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
486 PyObject *args; |
| 3034 | 487 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
488 int status; |
| 3034 | 489 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
490 status = (dp->di_bsddb->sync)(dp->di_bsddb, 0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
491 if (status != 0) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
492 PyErr_SetFromErrno(BsddbError); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
493 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
494 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
495 return PyInt_FromLong(status = 0); |
| 3034 | 496 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
497 static PyMethodDef bsddb_methods[] = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
498 {"close", (PyCFunction)bsddb_close}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
499 {"keys", (PyCFunction)bsddb_keys}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
500 {"has_key", (PyCFunction)bsddb_has_key}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
501 {"set_location", (PyCFunction)bsddb_set_location}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
502 {"next", (PyCFunction)bsddb_next}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
503 {"previous", (PyCFunction)bsddb_previous}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
504 {"first", (PyCFunction)bsddb_first}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
505 {"last", (PyCFunction)bsddb_last}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
506 {"sync", (PyCFunction)bsddb_sync}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
507 {NULL, NULL} /* sentinel */ |
| 3034 | 508 }; |
| 509 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
510 static PyObject * |
| 3034 | 511 bsddb_getattr(dp, name) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
512 PyObject *dp; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
513 char *name; |
| 3034 | 514 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
515 return Py_FindMethod(bsddb_methods, dp, name); |
| 3034 | 516 } |
| 517 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
518 static PyTypeObject Bsddbtype = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
519 PyObject_HEAD_INIT(NULL) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
520 0, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
521 "bsddb", |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
522 sizeof(bsddbobject), |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
523 0, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
524 (destructor)bsddb_dealloc, /*tp_dealloc*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
525 0, /*tp_print*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
526 (getattrfunc)bsddb_getattr, /*tp_getattr*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
527 0, /*tp_setattr*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
528 0, /*tp_compare*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
529 0, /*tp_repr*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
530 0, /*tp_as_number*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
531 0, /*tp_as_sequence*/ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
532 &bsddb_as_mapping, /*tp_as_mapping*/ |
| 3034 | 533 }; |
| 534 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
535 static PyObject * |
| 3034 | 536 bsdhashopen(self, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
537 PyObject *self; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
538 PyObject *args; |
| 3034 | 539 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
540 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
541 char *flag = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
542 int flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
543 int mode = 0666; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
544 int bsize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
545 int ffactor = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
546 int nelem = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
547 int cachesize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
548 int hash = 0; /* XXX currently ignored */ |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
549 int lorder = 0; |
| 3034 | 550 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
551 if (!PyArg_ParseTuple(args, "s|siiiiiii", |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
552 &file, &flag, &mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
553 &bsize, &ffactor, &nelem, &cachesize, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
554 &hash, &lorder)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
555 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
556 if (flag != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
557 /* 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
|
558 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
559 flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
560 else if (flag[0] == 'w') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
561 flags = O_RDWR; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
562 else if (flag[0] == 'c') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
563 flags = O_RDWR|O_CREAT; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
564 else if (flag[0] == 'n') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
565 flags = O_RDWR|O_CREAT|O_TRUNC; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
566 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
567 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
568 "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
|
569 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
570 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
571 if (flag[1] == 'l') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
572 #if defined(O_EXLOCK) && defined(O_SHLOCK) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
573 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
574 flags |= O_SHLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
575 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
576 flags |= O_EXLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
577 #else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
578 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
579 "locking not supported on this platform"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
580 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
581 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
582 } |
| 3034 | 583 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
584 return newdbhashobject(file, flags, mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
585 bsize, ffactor, nelem, cachesize, hash, lorder); |
| 3034 | 586 } |
| 587 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
588 static PyObject * |
| 3034 | 589 bsdbtopen(self, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
590 PyObject *self; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
591 PyObject *args; |
| 3034 | 592 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
593 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
594 char *flag = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
595 int flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
596 int mode = 0666; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
597 int cachesize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
598 int maxkeypage = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
599 int minkeypage = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
600 int btflags = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
601 unsigned int psize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
602 int lorder = 0; |
| 3034 | 603 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
604 if (!PyArg_ParseTuple(args, "s|siiiiiii", |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
605 &file, &flag, &mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
606 &btflags, &cachesize, &maxkeypage, &minkeypage, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
607 &psize, &lorder)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
608 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
609 if (flag != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
610 /* 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
|
611 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
612 flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
613 else if (flag[0] == 'w') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
614 flags = O_RDWR; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
615 else if (flag[0] == 'c') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
616 flags = O_RDWR|O_CREAT; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
617 else if (flag[0] == 'n') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
618 flags = O_RDWR|O_CREAT|O_TRUNC; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
619 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
620 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
621 "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
|
622 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
623 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
624 if (flag[1] == 'l') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
625 #if defined(O_EXLOCK) && defined(O_SHLOCK) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
626 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
627 flags |= O_SHLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
628 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
629 flags |= O_EXLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
630 #else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
631 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
632 "locking not supported on this platform"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
633 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
634 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
635 } |
| 3034 | 636 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
637 return newdbbtobject(file, flags, mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
638 btflags, cachesize, maxkeypage, minkeypage, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
639 psize, lorder); |
| 3034 | 640 } |
|
3600
7c5711a6a475
Be more careful about default args.
Guido van Rossum <guido@python.org>
parents:
3034
diff
changeset
|
641 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
642 static PyObject * |
| 3034 | 643 bsdrnopen(self, args) |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
644 PyObject *self; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
645 PyObject *args; |
| 3034 | 646 { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
647 char *file; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
648 char *flag = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
649 int flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
650 int mode = 0666; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
651 int cachesize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
652 int rnflags = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
653 unsigned int psize = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
654 int lorder = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
655 size_t reclen = 0; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
656 char *bval = ""; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
657 char *bfname = NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
658 |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
659 if (!PyArg_ParseTuple(args, "s|siiiiiiss", |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
660 &file, &flag, &mode, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
661 &rnflags, &cachesize, &psize, &lorder, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
662 &reclen, &bval, &bfname)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
663 return NULL; |
| 3034 | 664 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
665 # if 0 |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
666 printf("file: %s\n", file); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
667 printf("flag: %s\n", flag); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
668 printf("mode: %d\n", mode); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
669 printf("rnflags: 0x%x\n", rnflags); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
670 printf("cachesize: %d\n", cachesize); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
671 printf("psize: %d\n", psize); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
672 printf("lorder: %d\n", 0); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
673 printf("reclen: %d\n", reclen); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
674 printf("bval: %c\n", bval[0]); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
675 printf("bfname %s\n", bfname); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
676 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
677 |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
678 if (flag != NULL) { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
679 /* 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
|
680 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
681 flags = O_RDONLY; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
682 else if (flag[0] == 'w') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
683 flags = O_RDWR; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
684 else if (flag[0] == 'c') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
685 flags = O_RDWR|O_CREAT; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
686 else if (flag[0] == 'n') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
687 flags = O_RDWR|O_CREAT|O_TRUNC; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
688 else { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
689 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
690 "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
|
691 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
692 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
693 if (flag[1] == 'l') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
694 #if defined(O_EXLOCK) && defined(O_SHLOCK) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
695 if (flag[0] == 'r') |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
696 flags |= O_SHLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
697 else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
698 flags |= O_EXLOCK; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
699 #else |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
700 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
701 "locking not supported on this platform"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
702 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
703 #endif |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
704 } |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
705 else if (flag[1] != '\0') { |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
706 PyErr_SetString(BsddbError, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
707 "Flag char 2 should be 'l' or absent"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
708 return NULL; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
709 } |
| 3034 | 710 } |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
711 return newdbrnobject(file, flags, mode, rnflags, cachesize, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
712 psize, lorder, reclen, bval[0], bfname); |
| 3034 | 713 } |
| 714 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3600
diff
changeset
|
715 static PyMethodDef bsddbmodule_methods[] = { |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
716 {"hashopen", (PyCFunction)bsdhashopen, 1}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
717 {"btopen", (PyCFunction)bsdbtopen, 1}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
718 {"rnopen", (PyCFunction)bsdrnopen, 1}, |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
719 {0, 0}, |
| 3034 | 720 }; |
| 721 | |
| 722 void | |
| 723 initbsddb() { | |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
724 PyObject *m, *d; |
| 3034 | 725 |
|
4979
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
726 Bsddbtype.ob_type = &PyType_Type; |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
727 m = Py_InitModule("bsddb", bsddbmodule_methods); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
728 d = PyModule_GetDict(m); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
729 BsddbError = PyString_FromString("bsddb.error"); |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
730 if (BsddbError == NULL || PyDict_SetItemString(d, "error", BsddbError)) |
|
b864b414c457
Already renamed. Indented.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4597
diff
changeset
|
731 Py_FatalError("can't define bsddb.error"); |
| 3034 | 732 } |
