annotate Modules/dbhashmodule.c @ 3044:7e7bb00a0a2e legacy-trunk

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