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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }