Mercurial > cpython-lru_cache-weakref
annotate Modules/gdbmmodule.c @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | 9c16bdf160ff |
| children | 9fa2bd8a2b78 |
| rev | line source |
|---|---|
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /* GDBM module, hacked from the still-breathing corpse of the |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 DBM module by anthony.baxter@aaii.oz.au. Original copyright |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 follows: |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 */ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 /*********************************************************** |
|
2061
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1981
diff
changeset
|
6 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1981
diff
changeset
|
7 The Netherlands. |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 All Rights Reserved |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
11 Permission to use, copy, modify, and distribute this software and its |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
12 documentation for any purpose and without fee is hereby granted, |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 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:
3772
diff
changeset
|
14 both that copyright notice and this permission notice appear in |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 supporting documentation, and that the names of Stichting Mathematisch |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
16 Centrum or CWI or Corporation for National Research Initiatives or |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
17 CNRI not be used in advertising or publicity pertaining to |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
18 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
19 permission. |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
21 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:
3772
diff
changeset
|
22 is made available by the Corporation for National Research Initiatives |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
23 (CNRI) at the Internet address ftp://ftp.python.org. |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
24 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
25 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
26 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
27 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
28 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
29 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:
3772
diff
changeset
|
30 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3772
diff
changeset
|
31 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:
3772
diff
changeset
|
32 PERFORMANCE OF THIS SOFTWARE. |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 ******************************************************************/ |
|
5214
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
35 /***************************************************************** |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
36 Modification History: |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 |
|
5214
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
38 Added support for 'gdbm_sync' method. Roger E. Masse 3/25/97 |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
39 |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
40 *****************************************************************/ |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 /* DBM module using dictionary interface */ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
44 #include "Python.h" |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 #include <sys/types.h> |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 #include <sys/stat.h> |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 #include <fcntl.h> |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 #include "gdbm.h" |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 typedef struct { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
52 PyObject_HEAD |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 int di_size; /* -1 means recompute */ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 GDBM_FILE di_dbm; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 } dbmobject; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
57 staticforward PyTypeObject Dbmtype; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 #define is_dbmobject(v) ((v)->ob_type == &Dbmtype) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
61 static PyObject *DbmError; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
63 static PyObject * |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 newdbmobject(file, flags, mode) |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
65 char *file; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
66 int flags; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
67 int mode; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 { |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 dbmobject *dp; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
71 dp = PyObject_NEW(dbmobject, &Dbmtype); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 if (dp == NULL) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 return NULL; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 dp->di_size = -1; |
|
2531
e39bb240b1b3
plugged some memory leaks (Steve Clift)
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
75 errno = 0; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 if ( (dp->di_dbm = gdbm_open(file, 0, flags, mode, NULL)) == 0 ) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
77 if (errno != 0) |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
78 PyErr_SetFromErrno(DbmError); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
79 else |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
80 PyErr_SetString(DbmError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
81 (char *) gdbm_strerror(gdbm_errno)); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
82 Py_DECREF(dp); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
83 return NULL; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 } |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
85 return (PyObject *)dp; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 /* Methods */ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 static void |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 dbm_dealloc(dp) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 register dbmobject *dp; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 { |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 if ( dp->di_dbm ) |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
95 gdbm_close(dp->di_dbm); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
96 PyMem_DEL(dp); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 static int |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 dbm_length(dp) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 dbmobject *dp; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 { |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 if ( dp->di_size < 0 ) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
104 datum key,okey; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
105 int size; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
106 okey.dsize=0; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
108 size = 0; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
109 for ( key=gdbm_firstkey(dp->di_dbm); key.dptr; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
110 key = gdbm_nextkey(dp->di_dbm,okey)) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
111 size++; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
112 if(okey.dsize) free(okey.dptr); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
113 okey=key; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
114 } |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
115 dp->di_size = size; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 return dp->di_size; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
120 static PyObject * |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 dbm_subscript(dp, key) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
123 register PyObject *key; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
125 PyObject *v; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 datum drec, krec; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
128 if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) ) |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 return NULL; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 drec = gdbm_fetch(dp->di_dbm, krec); |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 if ( drec.dptr == 0 ) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
133 PyErr_SetString(PyExc_KeyError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
134 PyString_AS_STRING((PyStringObject *)key)); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
135 return NULL; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
136 } |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
137 v = PyString_FromStringAndSize(drec.dptr, drec.dsize); |
|
2531
e39bb240b1b3
plugged some memory leaks (Steve Clift)
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
138 free(drec.dptr); |
|
e39bb240b1b3
plugged some memory leaks (Steve Clift)
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
139 return v; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
142 static int |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
143 dbm_ass_sub(dp, v, w) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
145 PyObject *v, *w; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 { |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 datum krec, drec; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
149 if ( !PyArg_Parse(v, "s#", &krec.dptr, &krec.dsize) ) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
150 PyErr_SetString(PyExc_TypeError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
151 "gdbm mappings have string indices only"); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
152 return -1; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 dp->di_size = -1; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 if (w == NULL) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
156 if ( gdbm_delete(dp->di_dbm, krec) < 0 ) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
157 PyErr_SetString(PyExc_KeyError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
158 PyString_AS_STRING((PyStringObject *)v)); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
159 return -1; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
160 } |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 } else { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
162 if ( !PyArg_Parse(w, "s#", &drec.dptr, &drec.dsize) ) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
163 PyErr_SetString(PyExc_TypeError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
164 "gdbm mappings have string elements only"); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
165 return -1; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
166 } |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
167 errno = 0; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
168 if ( gdbm_store(dp->di_dbm, krec, drec, GDBM_REPLACE) < 0 ) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
169 if (errno != 0) |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
170 PyErr_SetFromErrno(DbmError); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
171 else |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
172 PyErr_SetString(DbmError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
173 (char *) gdbm_strerror(gdbm_errno)); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
174 return -1; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
175 } |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
176 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 return 0; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
180 static PyMappingMethods dbm_as_mapping = { |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 (inquiry)dbm_length, /*mp_length*/ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 (binaryfunc)dbm_subscript, /*mp_subscript*/ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 (objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
184 }; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
185 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
186 static PyObject * |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
187 dbm_close(dp, args) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
188 register dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
189 PyObject *args; |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
190 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
191 if ( !PyArg_NoArgs(args) ) |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
192 return NULL; |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
193 if ( dp->di_dbm ) |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
194 gdbm_close(dp->di_dbm); |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
195 dp->di_dbm = NULL; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
196 Py_INCREF(Py_None); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
197 return Py_None; |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
198 } |
|
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
199 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
200 static PyObject * |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
201 dbm_keys(dp, args) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
202 register dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
203 PyObject *args; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
205 register PyObject *v, *item; |
|
3772
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
206 datum key, nextkey; |
|
3013
210738866166
fix leaks in keys(); fix bug in close()
Guido van Rossum <guido@python.org>
parents:
2805
diff
changeset
|
207 int err; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 if (dp == NULL || !is_dbmobject(dp)) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
210 PyErr_BadInternalCall(); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 return NULL; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 } |
|
3772
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
213 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
214 if (!PyArg_NoArgs(args)) |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 return NULL; |
|
3772
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
216 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
217 v = PyList_New(0); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 if (v == NULL) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 return NULL; |
|
3772
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
220 |
|
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
221 key = gdbm_firstkey(dp->di_dbm); |
|
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
222 while (key.dptr) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
223 item = PyString_FromStringAndSize(key.dptr, key.dsize); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
224 if (item == NULL) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
225 free(key.dptr); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
226 Py_DECREF(v); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
227 return NULL; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
228 } |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
229 err = PyList_Append(v, item); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
230 Py_DECREF(item); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
231 if (err != 0) { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
232 free(key.dptr); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
233 Py_DECREF(v); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
234 return NULL; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
235 } |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
236 nextkey = gdbm_nextkey(dp->di_dbm, key); |
|
3772
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
237 free(key.dptr); |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
238 key = nextkey; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 } |
|
3772
c8d0f78221cc
Rewritten keys() and has_key() to avoid memory leaks.
Guido van Rossum <guido@python.org>
parents:
3367
diff
changeset
|
240 |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 return v; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
244 static PyObject * |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 dbm_has_key(dp, args) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 register dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
247 PyObject *args; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 { |
|
2531
e39bb240b1b3
plugged some memory leaks (Steve Clift)
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
249 datum key; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
250 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
251 if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize)) |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 return NULL; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
253 return PyInt_FromLong((long) gdbm_exists(dp->di_dbm, key)); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
256 static PyObject * |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
257 dbm_firstkey(dp, args) |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
258 register dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
259 PyObject *args; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
260 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
261 register PyObject *v; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
262 datum key; |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
263 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
264 if (!PyArg_NoArgs(args)) |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
265 return NULL; |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
266 key = gdbm_firstkey(dp->di_dbm); |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
267 if (key.dptr) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
268 v = PyString_FromStringAndSize(key.dptr, key.dsize); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
269 free(key.dptr); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
270 return v; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
271 } else { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
272 Py_INCREF(Py_None); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
273 return Py_None; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
274 } |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
275 } |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
276 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
277 static PyObject * |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
278 dbm_nextkey(dp, args) |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
279 register dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
280 PyObject *args; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
281 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
282 register PyObject *v; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
283 datum key, nextkey; |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
284 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
285 if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize)) |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
286 return NULL; |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
287 nextkey = gdbm_nextkey(dp->di_dbm, key); |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
288 if (nextkey.dptr) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
289 v = PyString_FromStringAndSize(nextkey.dptr, nextkey.dsize); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
290 free(nextkey.dptr); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
291 return v; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
292 } else { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
293 Py_INCREF(Py_None); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
294 return Py_None; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
295 } |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
296 } |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
297 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
298 static PyObject * |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
299 dbm_reorganize(dp, args) |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
300 register dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
301 PyObject *args; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
302 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
303 if (!PyArg_NoArgs(args)) |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
304 return NULL; |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
305 errno = 0; |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
306 if (gdbm_reorganize(dp->di_dbm) < 0) { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
307 if (errno != 0) |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
308 PyErr_SetFromErrno(DbmError); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
309 else |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
310 PyErr_SetString(DbmError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
311 (char *) gdbm_strerror(gdbm_errno)); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
312 return NULL; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
313 } |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
314 Py_INCREF(Py_None); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
315 return Py_None; |
|
2567
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
316 } |
|
b5963c4b639a
added firstkey(), nextkey(), reorganize() methods
Guido van Rossum <guido@python.org>
parents:
2531
diff
changeset
|
317 |
|
5214
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
318 static PyObject * |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
319 dbm_sync(dp, args) |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
320 register dbmobject *dp; |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
321 PyObject *args; |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
322 { |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
323 if (!PyArg_NoArgs(args)) |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
324 return NULL; |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
325 gdbm_sync(dp->di_dbm); |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
326 Py_INCREF(Py_None); |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
327 return Py_None; |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
328 } |
|
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
329 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
330 static PyMethodDef dbm_methods[] = { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
331 {"close", (PyCFunction)dbm_close}, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
332 {"keys", (PyCFunction)dbm_keys}, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
333 {"has_key", (PyCFunction)dbm_has_key}, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
334 {"firstkey", (PyCFunction)dbm_firstkey}, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
335 {"nextkey", (PyCFunction)dbm_nextkey}, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
336 {"reorganize", (PyCFunction)dbm_reorganize}, |
|
5214
9c16bdf160ff
As per GvR recomendation, added support for a 'sync' attribute for the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4761
diff
changeset
|
337 {"sync", (PyCFunction)dbm_sync}, |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
338 {NULL, NULL} /* sentinel */ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
339 }; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
341 static PyObject * |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
342 dbm_getattr(dp, name) |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 dbmobject *dp; |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
344 char *name; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
346 return Py_FindMethod(dbm_methods, (PyObject *)dp, name); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
347 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
349 static PyTypeObject Dbmtype = { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
350 PyObject_HEAD_INIT(&PyType_Type) |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
351 0, |
|
2805
b7a06db85caf
normalized flag arg and made flag, mode default args; minor cosmetics
Guido van Rossum <guido@python.org>
parents:
2567
diff
changeset
|
352 "gdbm", |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
353 sizeof(dbmobject), |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 0, |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
355 (destructor)dbm_dealloc, /*tp_dealloc*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
356 0, /*tp_print*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
357 (getattrfunc)dbm_getattr, /*tp_getattr*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
358 0, /*tp_setattr*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
359 0, /*tp_compare*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
360 0, /*tp_repr*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
361 0, /*tp_as_number*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
362 0, /*tp_as_sequence*/ |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
363 &dbm_as_mapping, /*tp_as_mapping*/ |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 }; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
366 /* ----------------------------------------------------------------- */ |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
368 static PyObject * |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 dbmopen(self, args) |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
370 PyObject *self; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
371 PyObject *args; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
373 char *name; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
374 char *flags = "r "; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
375 int iflags; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
376 int mode = 0666; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
377 |
|
3367
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
378 /* XXXX add other flags. 2nd character can be "f" meaning open in fast mode. */ |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
379 if ( !PyArg_ParseTuple(args, "s|si", &name, &flags, &mode) ) |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
380 return NULL; |
|
3367
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
381 switch (flags[0]) { |
|
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
382 case 'r': |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
383 iflags = GDBM_READER; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
384 break; |
|
3367
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
385 case 'w': |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
386 iflags = GDBM_WRITER; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
387 break; |
|
3367
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
388 case 'c': |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
389 iflags = GDBM_WRCREAT; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
390 break; |
|
3367
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
391 case 'n': |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
392 iflags = GDBM_NEWDB; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
393 break; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
394 default: |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
395 PyErr_SetString(DbmError, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
396 "Flags should be one of 'r', 'w', 'c' or 'n'"); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
397 return NULL; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
398 } |
|
3367
4e1ad24410a7
support fast mode for gdmb
Guido van Rossum <guido@python.org>
parents:
3013
diff
changeset
|
399 if (flags[1] == 'f') |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
400 iflags |= GDBM_FAST; |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
401 return newdbmobject(name, iflags, mode); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
402 } |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
403 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
404 static PyMethodDef dbmmodule_methods[] = { |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
405 { "open", (PyCFunction)dbmopen, 1 }, |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
406 { 0, 0 }, |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
407 }; |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
408 |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
409 void |
|
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
410 initgdbm() { |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
411 PyObject *m, *d; |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
412 |
|
4761
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
413 m = Py_InitModule("gdbm", dbmmodule_methods); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
414 d = PyModule_GetDict(m); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
415 DbmError = PyString_FromString("gdbm.error"); |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
416 if ( DbmError == NULL || PyDict_SetItemString(d, "error", DbmError) ) |
|
d7eea694cd3a
Renamed in a grand-ee-ous way!
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
417 Py_FatalError("can't define gdbm.error"); |
|
1766
6e9130460288
* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
418 } |
