annotate Modules/dbhashmodule.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 65d2d8e67da3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 The Netherlands.
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
560acc25f896 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: 2861
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: 2861
diff changeset
8 documentation for any purpose and without fee is hereby granted,
2847
560acc25f896 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: 2861
diff changeset
10 both that copyright notice and this permission notice appear in
2847
560acc25f896 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: 2861
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: 2861
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: 2861
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2861
diff changeset
15 permission.
2847
560acc25f896 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: 2861
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: 2861
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: 2861
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: 2861
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2861
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: 2861
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: 2861
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: 2861
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: 2861
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: 2861
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: 2861
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: 2861
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 /* Berkeley DB hash interface.
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 Author: Michael McLay
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 Hacked: Guido van Rossum
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 XXX To do:
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 - provide interface to the B-tree and record libraries too
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 - provide a way to access the various hash functions
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 - support more open flags
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 #include "allobjects.h"
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 #include "modsupport.h"
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 #include <sys/types.h>
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 #include <sys/stat.h>
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 #include <fcntl.h>
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 #include <db.h>
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 /* Please don't include internal header files of the Berkeley db package
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 (it messes up the info required in the Setup file) */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 typedef struct {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 OB_HEAD
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 DB *di_dbhash;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 int di_size; /* -1 means recompute */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 } dbhashobject;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 staticforward typeobject Dbhashtype;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 #define is_dbhashobject(v) ((v)->ob_type == &Dbhashtype)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 static object *DbhashError;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 static object *
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 newdbhashobject(file, flags, mode,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 bsize, ffactor, nelem, cachesize, hash, lorder)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 char *file;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 int flags;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 int mode;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 int bsize;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 int ffactor;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 int nelem;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 int cachesize;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 int hash; /* XXX ignored */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 int lorder;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 HASHINFO info;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 if ((dp = NEWOBJ(dbhashobject, &Dbhashtype)) == NULL)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 info.bsize = bsize;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 info.ffactor = ffactor;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 info.nelem = nelem;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 info.cachesize = cachesize;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 info.hash = NULL; /* XXX should derive from hash argument */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 info.lorder = lorder;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 if ((dp->di_dbhash = dbopen(file, flags, mode, DB_HASH, &info)) == NULL) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 err_errno(DbhashError);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 DECREF(dp);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 dp->di_size = -1;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 return (object *)dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
100
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 static void
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 dbhash_dealloc(dp)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 if (dp->di_dbhash != NULL) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 if ((dp->di_dbhash->close)(dp->di_dbhash) != 0)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 fprintf(stderr,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 "Python dbhash: close errno %s in dealloc\n", errno);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 DEL(dp);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 static int
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 dbhash_length(dp)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 if (dp->di_size < 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 DBT krec, drec;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 int status;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 int size = 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 for (status = (dp->di_dbhash->seq)(dp->di_dbhash, &krec, &drec,R_FIRST);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 status == 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 status = (dp->di_dbhash->seq)(dp->di_dbhash, &krec, &drec, R_NEXT))
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 size++;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 if (status < 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 err_errno(DbhashError);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 return -1;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 dp->di_size = size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 return dp->di_size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 static object *
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 dbhash_subscript(dp, key)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 object *key;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 int status;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 object *v;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 DBT krec, drec;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 char *data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 int size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 if (!getargs(key, "s#", &data, &size))
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 krec.data = data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 krec.size = size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 status = (dp->di_dbhash->get)(dp->di_dbhash, &krec, &drec, 0);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 if (status != 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 if (status < 0)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 err_errno(DbhashError);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 else
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 err_setval(KeyError, key);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 return newsizedstringobject((char *)drec.data, (int)drec.size);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 static int
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 dbhash_ass_sub(dp, key, value)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 object *key, *value;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 int status;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 DBT krec, drec;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 char *data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 int size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 if (!getargs(key, "s#", &data, &size)) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 err_setstr(TypeError, "dbhash key type must be string");
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 return -1;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 krec.data = data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 krec.size = size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 dp->di_size = -1;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 if (value == NULL) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 status = (dp->di_dbhash->del)(dp->di_dbhash, &krec, 0);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 else {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 if (!getargs(value, "s#", &data, &size)) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 err_setstr(TypeError, "dbhash value type must be string");
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 return -1;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 drec.data = data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 drec.size = size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 status = (dp->di_dbhash->put)(dp->di_dbhash, &krec, &drec, 0);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 if (status != 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 if (status < 0)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 err_errno(DbhashError);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 else
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 err_setval(KeyError, key);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 return -1;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 return 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 static mapping_methods dbhash_as_mapping = {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 (inquiry)dbhash_length, /*mp_length*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 (binaryfunc)dbhash_subscript, /*mp_subscript*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 (objobjargproc)dbhash_ass_sub, /*mp_ass_subscript*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 };
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
206
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 static object *
2848
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
208 dbhash_close(dp, args)
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
209 dbhashobject *dp;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
210 object *args;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
211 {
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
212 if (!getnoarg(args))
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
213 return NULL;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
214 if (dp->di_dbhash != NULL) {
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
215 if ((dp->di_dbhash->close)(dp->di_dbhash) != 0) {
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
216 dp->di_dbhash = NULL;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
217 err_errno(DbhashError);
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
218 return NULL;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
219 }
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
220 }
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
221 dp->di_dbhash = NULL;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
222 INCREF(None);
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
223 return None;
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
224 }
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
225
4f6d5fe19812 fixed arg checking for keys() and close()
Guido van Rossum <guido@python.org>
parents: 2847
diff changeset
226 static object *
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 dbhash_keys(dp, args)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 object *args;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 object *list, *item;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 DBT krec, drec;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 int status;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 int err;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
235
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 if (!getnoarg(args))
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 list = newlistobject(0);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 if (list == NULL)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 for (status = (dp->di_dbhash->seq)(dp->di_dbhash, &krec, &drec, R_FIRST);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 status == 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 status = (dp->di_dbhash->seq)(dp->di_dbhash, &krec, &drec, R_NEXT)) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 item = newsizedstringobject((char *)krec.data, (int)krec.size);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 if (item == NULL) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 DECREF(list);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 err = addlistitem(list, item);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 DECREF(item);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 if (err != 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 DECREF(list);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 if (status < 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 err_errno(DbhashError);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 DECREF(list);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 if (dp->di_size < 0)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 dp->di_size = getlistsize(list); /* We just did the work for this... */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 return list;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
265
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 static object *
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 dbhash_has_key(dp, args)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 dbhashobject *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 object *args;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 DBT krec, drec;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 int status;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 char *data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 int size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
275
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 if (!getargs(args, "s#", &data, &size))
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 krec.data = data;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 krec.size = size;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
280
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 status = (dp->di_dbhash->get)(dp->di_dbhash, &krec, &drec, 0);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 if (status < 0) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 err_errno(DbhashError);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
286
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 return newintobject(status == 0);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
289
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 static struct methodlist dbhash_methods[] = {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 {"close", (method)dbhash_close},
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 {"keys", (method)dbhash_keys},
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 {"has_key", (method)dbhash_has_key},
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 {NULL, NULL} /* sentinel */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 };
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
296
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 static object *
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 dbhash_getattr(dp, name)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 object *dp;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 char *name;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 return findmethod(dbhash_methods, dp, name);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
304
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 static typeobject Dbhashtype = {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 OB_HEAD_INIT(&Typetype)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 0,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 "dbhash",
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 sizeof(dbhashobject),
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 0,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 (destructor)dbhash_dealloc, /*tp_dealloc*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 0, /*tp_print*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 (getattrfunc)dbhash_getattr, /*tp_getattr*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 0, /*tp_setattr*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 0, /*tp_compare*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 0, /*tp_repr*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 0, /*tp_as_number*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 0, /*tp_as_sequence*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 &dbhash_as_mapping, /*tp_as_mapping*/
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 };
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
321
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 static object *
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
323 dbhashopen(self, args)
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 object *self;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 object *args;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
327 char *file;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 char *flag = NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
329 int flags = O_RDONLY;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
330 int mode = 0666;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 int bsize = 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 int ffactor = 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 int nelem = 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
334 int cachesize = 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 int hash = 0; /* XXX currently ignored */
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
336 int lorder = 0;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
337
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
338 if (!newgetargs(args, "s|siiiiiii",
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 &file, &flag, &mode,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 &bsize, &ffactor, &nelem, &cachesize, &hash, &lorder))
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 if (flag != NULL) {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
343 /* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */
2861
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
344 if (flag[0] == 'r')
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
345 flags = O_RDONLY;
2861
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
346 else if (flag[0] == 'w')
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 flags = O_RDWR;
2861
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
348 else if (flag[0] == 'c')
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 flags = O_RDWR|O_CREAT;
2861
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
350 else if (flag[0] == 'n')
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 flags = O_RDWR|O_CREAT|O_TRUNC;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
352 else {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 err_setstr(DbhashError,
2861
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
354 "Flag should begin with 'r', 'w', 'c' or 'n'");
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 return NULL;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 }
2861
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
357 if (flag[1] == 'l') {
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
358 #if defined(O_EXLOCK) && defined(O_SHLOCK)
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
359 if (flag[0] == 'r')
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
360 flags |= O_SHLOCK;
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
361 else
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
362 flags |= O_EXLOCK;
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
363 #else
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
364 err_setstr(DbhashError, "locking not supported on this platform");
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
365 return NULL;
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
366 #endif
dc6b3e76cce6 add locking where it exists
Guido van Rossum <guido@python.org>
parents: 2848
diff changeset
367 }
2847
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
368 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
369 return newdbhashobject(file, flags, mode,
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 bsize, ffactor, nelem, cachesize, hash, lorder);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 }
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
372
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
373 static struct methodlist dbhashmodule_methods[] = {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 {"open", (method)dbhashopen, 1},
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
375 {0, 0},
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 };
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
377
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
378 void
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 initdbhash() {
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 object *m, *d;
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
381
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
382 m = initmodule("dbhash", dbhashmodule_methods);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 d = getmoduledict(m);
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
384 DbhashError = newstringobject("dbhash.error");
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 if (DbhashError == NULL || dictinsert(d, "error", DbhashError))
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 fatal("can't define dbhash.error");
560acc25f896 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 }