Mercurial > cpython-lru_cache-weakref
annotate Modules/dbmmodule.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 | d36250aefb82 |
| rev | line source |
|---|---|
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /*********************************************************** |
|
2061
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
3 The Netherlands. |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 All Rights Reserved |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3014
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:
3014
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
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:
3014
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
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:
3014
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:
3014
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:
3014
diff
changeset
|
14 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3014
diff
changeset
|
15 permission. |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3014
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:
3014
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:
3014
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:
3014
diff
changeset
|
20 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3014
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:
3014
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:
3014
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:
3014
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:
3014
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:
3014
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:
3014
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:
3014
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 ******************************************************************/ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 /* DBM module using dictionary interface */ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 #include "allobjects.h" |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 #include "modsupport.h" |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 #include <sys/types.h> |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 #include <sys/stat.h> |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 #include <fcntl.h> |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 #include <ndbm.h> |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 typedef struct { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 OB_HEAD |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 int di_size; /* -1 means recompute */ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 DBM *di_dbm; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 } dbmobject; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
49 staticforward typeobject Dbmtype; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 #define is_dbmobject(v) ((v)->ob_type == &Dbmtype) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 static object *DbmError; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 static object * |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 newdbmobject(file, flags, mode) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 char *file; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 int flags; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 int mode; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 dp = NEWOBJ(dbmobject, &Dbmtype); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 if (dp == NULL) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 return NULL; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 dp->di_size = -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 if ( (dp->di_dbm = dbm_open(file, flags, mode)) == 0 ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 err_errno(DbmError); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 DECREF(dp); |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
70 return NULL; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 return (object *)dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 /* Methods */ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 static void |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 dbm_dealloc(dp) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 register dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 if ( dp->di_dbm ) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 dbm_close(dp->di_dbm); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 DEL(dp); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 static int |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 dbm_length(dp) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 if ( dp->di_size < 0 ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 datum key; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 int size; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 size = 0; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 for ( key=dbm_firstkey(dp->di_dbm); key.dptr; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 key = dbm_nextkey(dp->di_dbm)) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 size++; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 dp->di_size = size; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 return dp->di_size; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 static object * |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 dbm_subscript(dp, key) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 register object *key; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 object *v; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 datum drec, krec; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 if (!getargs(key, "s#", &krec.dptr, &krec.dsize) ) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 return NULL; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 drec = dbm_fetch(dp->di_dbm, krec); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 if ( drec.dptr == 0 ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 err_setstr(KeyError, GETSTRINGVALUE((stringobject *)key)); |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
117 return NULL; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 if ( dbm_error(dp->di_dbm) ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 dbm_clearerr(dp->di_dbm); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 err_setstr(DbmError, ""); |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
122 return NULL; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 return newsizedstringobject(drec.dptr, drec.dsize); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 static int |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 dbm_ass_sub(dp, v, w) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 object *v, *w; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 datum krec, drec; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
133 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 if ( !getargs(v, "s#", &krec.dptr, &krec.dsize) ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 err_setstr(TypeError, "dbm mappings have string indices only"); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
136 return -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
137 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
138 dp->di_size = -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
139 if (w == NULL) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 if ( dbm_delete(dp->di_dbm, krec) < 0 ) { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
141 dbm_clearerr(dp->di_dbm); |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
142 err_setstr(KeyError, GETSTRINGVALUE((stringobject *)v)); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
143 return -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 } else { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 if ( !getargs(w, "s#", &drec.dptr, &drec.dsize) ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 err_setstr(TypeError, |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 "dbm mappings have string elements only"); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 return -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 if ( dbm_store(dp->di_dbm, krec, drec, DBM_REPLACE) < 0 ) { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
152 dbm_clearerr(dp->di_dbm); |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 err_setstr(DbmError, "Cannot add item to database"); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 return -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
157 if ( dbm_error(dp->di_dbm) ) { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 dbm_clearerr(dp->di_dbm); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 err_setstr(DbmError, ""); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 return -1; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 return 0; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 static mapping_methods dbm_as_mapping = { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
166 (inquiry)dbm_length, /*mp_length*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
167 (binaryfunc)dbm_subscript, /*mp_subscript*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
168 (objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/ |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 }; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 static object * |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
172 dbm__close(dp, args) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
173 register dbmobject *dp; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
174 object *args; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
175 { |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
176 if ( !getnoarg(args) ) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
177 return NULL; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
178 if ( dp->di_dbm ) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
179 dbm_close(dp->di_dbm); |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
180 dp->di_dbm = NULL; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
181 INCREF(None); |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
182 return None; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
183 } |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
184 |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
185 static object * |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 dbm_keys(dp, args) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 register dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 object *args; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 register object *v, *item; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 datum key; |
|
2268
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
192 int err; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 if (!getnoarg(args)) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 return NULL; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 v = newlistobject(0); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 if (v == NULL) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 return NULL; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 for (key = dbm_firstkey(dp->di_dbm); key.dptr; |
|
2268
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
200 key = dbm_nextkey(dp->di_dbm)) { |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
201 item = newsizedstringobject(key.dptr, key.dsize); |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
202 if (item == NULL) { |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
203 DECREF(v); |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
204 return NULL; |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
205 } |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
206 err = addlistitem(v, item); |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
207 DECREF(item); |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
208 if (err != 0) { |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
209 DECREF(v); |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
210 return NULL; |
|
ac6f69b1e993
plug leak and improve error handling in dbm_keys()
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
211 } |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 return v; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
216 static object * |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
217 dbm_has_key(dp, args) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 register dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 object *args; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
220 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 datum key, val; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 if (!getargs(args, "s#", &key.dptr, &key.dsize)) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 return NULL; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 val = dbm_fetch(dp->di_dbm, key); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
226 return newintobject(val.dptr != NULL); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
227 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
229 static struct methodlist dbm_methods[] = { |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
230 {"close", (method)dbm__close}, |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
231 {"keys", (method)dbm_keys}, |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
232 {"has_key", (method)dbm_has_key}, |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
233 {NULL, NULL} /* sentinel */ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
234 }; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
235 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
236 static object * |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
237 dbm_getattr(dp, name) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
238 dbmobject *dp; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 char *name; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 return findmethod(dbm_methods, (object *)dp, name); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
244 static typeobject Dbmtype = { |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 OB_HEAD_INIT(&Typetype) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 0, |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
247 "dbm", |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 sizeof(dbmobject), |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
249 0, |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
250 (destructor)dbm_dealloc, /*tp_dealloc*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
251 0, /*tp_print*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
252 (getattrfunc)dbm_getattr, /*tp_getattr*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
253 0, /*tp_setattr*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
254 0, /*tp_compare*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
255 0, /*tp_repr*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
256 0, /*tp_as_number*/ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
257 0, /*tp_as_sequence*/ |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 &dbm_as_mapping, /*tp_as_mapping*/ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 }; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 /* ----------------------------------------------------------------- */ |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
263 static object * |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 dbmopen(self, args) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 object *self; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 object *args; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 { |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
268 char *name; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
269 char *flags = "r"; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
270 int iflags; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
271 int mode = 0666; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
273 if ( !newgetargs(args, "s|si", &name, &flags, &mode) ) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
274 return NULL; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
275 if ( strcmp(flags, "r") == 0 ) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 iflags = O_RDONLY; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
277 else if ( strcmp(flags, "w") == 0 ) |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
278 iflags = O_RDWR; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
279 else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */ |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
280 iflags = O_RDWR|O_CREAT; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
281 else if ( strcmp(flags, "c") == 0 ) |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 iflags = O_RDWR|O_CREAT; |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
283 else if ( strcmp(flags, "n") == 0 ) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
284 iflags = O_RDWR|O_CREAT|O_TRUNC; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 else { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 err_setstr(DbmError, |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
287 "Flags should be one of 'r', 'w', 'c' or 'n'"); |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
288 return NULL; |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 return newdbmobject(name, iflags, mode); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 } |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
293 static struct methodlist dbmmodule_methods[] = { |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2268
diff
changeset
|
294 { "open", (method)dbmopen, 1 }, |
|
906
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 { 0, 0 }, |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 }; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 void |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 initdbm() { |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
300 object *m, *d; |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
301 |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 m = initmodule("dbm", dbmmodule_methods); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
303 d = getmoduledict(m); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 DbmError = newstringobject("dbm.error"); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 if ( DbmError == NULL || dictinsert(d, "error", DbmError) ) |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 fatal("can't define dbm.error"); |
|
63798cde582c
Added qgetfd() to cstubs for GL.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 } |
