Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 807b7be

Browse files
committed
normalized flag arg and made flag, mode default args; minor cosmetics
1 parent 55ea8a7 commit 807b7be

2 files changed

Lines changed: 62 additions & 29 deletions

File tree

Modules/dbmmodule.c

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ newdbmobject(file, flags, mode)
6060
if ( (dp->di_dbm = dbm_open(file, flags, mode)) == 0 ) {
6161
err_errno(DbmError);
6262
DECREF(dp);
63-
return 0;
63+
return NULL;
6464
}
6565
return (object *)dp;
6666
}
@@ -107,12 +107,12 @@ dbm_subscript(dp, key)
107107
drec = dbm_fetch(dp->di_dbm, krec);
108108
if ( drec.dptr == 0 ) {
109109
err_setstr(KeyError, GETSTRINGVALUE((stringobject *)key));
110-
return 0;
110+
return NULL;
111111
}
112112
if ( dbm_error(dp->di_dbm) ) {
113113
dbm_clearerr(dp->di_dbm);
114114
err_setstr(DbmError, "");
115-
return 0;
115+
return NULL;
116116
}
117117
return newsizedstringobject(drec.dptr, drec.dsize);
118118
}
@@ -161,6 +161,21 @@ static mapping_methods dbm_as_mapping = {
161161
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
162162
};
163163

164+
static object *
165+
dbm__close(dp, args)
166+
register dbmobject *dp;
167+
object *args;
168+
{
169+
if ( !getnoarg(args) )
170+
return NULL;
171+
if ( dp->di_dbm )
172+
dbm_close(dp->di_dbm);
173+
dp->di_dbm = NULL;
174+
DEL(dp);
175+
INCREF(None);
176+
return None;
177+
}
178+
164179
static object *
165180
dbm_keys(dp, args)
166181
register dbmobject *dp;
@@ -170,10 +185,6 @@ dbm_keys(dp, args)
170185
datum key;
171186
int err;
172187

173-
if (dp == NULL || !is_dbmobject(dp)) {
174-
err_badcall();
175-
return NULL;
176-
}
177188
if (!getnoarg(args))
178189
return NULL;
179190
v = newlistobject(0);
@@ -196,7 +207,6 @@ dbm_keys(dp, args)
196207
return v;
197208
}
198209

199-
200210
static object *
201211
dbm_has_key(dp, args)
202212
register dbmobject *dp;
@@ -211,6 +221,7 @@ dbm_has_key(dp, args)
211221
}
212222

213223
static struct methodlist dbm_methods[] = {
224+
{"close", (method)dbm__close},
214225
{"keys", (method)dbm_keys},
215226
{"has_key", (method)dbm_has_key},
216227
{NULL, NULL} /* sentinel */
@@ -227,7 +238,7 @@ dbm_getattr(dp, name)
227238
static typeobject Dbmtype = {
228239
OB_HEAD_INIT(&Typetype)
229240
0,
230-
"Dbm_dictionary",
241+
"dbm",
231242
sizeof(dbmobject),
232243
0,
233244
(destructor)dbm_dealloc, /*tp_dealloc*/
@@ -248,27 +259,33 @@ dbmopen(self, args)
248259
object *self;
249260
object *args;
250261
{
251-
char *name, *flags;
252-
int iflags, mode;
262+
char *name;
263+
char *flags = "r";
264+
int iflags;
265+
int mode = 0666;
253266

254-
if ( !getargs(args, "(ssi)", &name, &flags, &mode) )
255-
return 0;
267+
if ( !newgetargs(args, "s|si", &name, &flags, &mode) )
268+
return NULL;
256269
if ( strcmp(flags, "r") == 0 )
257270
iflags = O_RDONLY;
258271
else if ( strcmp(flags, "w") == 0 )
259-
iflags = O_WRONLY|O_CREAT;
260-
else if ( strcmp(flags, "rw") == 0 )
272+
iflags = O_RDWR;
273+
else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */
274+
iflags = O_RDWR|O_CREAT;
275+
else if ( strcmp(flags, "c") == 0 )
261276
iflags = O_RDWR|O_CREAT;
277+
else if ( strcmp(flags, "n") == 0 )
278+
iflags = O_RDWR|O_CREAT|O_TRUNC;
262279
else {
263280
err_setstr(DbmError,
264-
"Flags should be one of 'r', 'w' or 'rw'");
265-
return 0;
281+
"Flags should be one of 'r', 'w', 'c' or 'n'");
282+
return NULL;
266283
}
267284
return newdbmobject(name, iflags, mode);
268285
}
269286

270287
static struct methodlist dbmmodule_methods[] = {
271-
{ "open", (method)dbmopen },
288+
{ "open", (method)dbmopen, 1 },
272289
{ 0, 0 },
273290
};
274291

@@ -282,5 +299,3 @@ initdbm() {
282299
if ( DbmError == NULL || dictinsert(d, "error", DbmError) )
283300
fatal("can't define dbm.error");
284301
}
285-
286-

Modules/gdbmmodule.c

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ newdbmobject(file, flags, mode)
6868
else
6969
err_setstr(DbmError, (char *) gdbm_strerror(gdbm_errno));
7070
DECREF(dp);
71-
return 0;
71+
return NULL;
7272
}
7373
return (object *)dp;
7474
}
@@ -119,7 +119,7 @@ dbm_subscript(dp, key)
119119
drec = gdbm_fetch(dp->di_dbm, krec);
120120
if ( drec.dptr == 0 ) {
121121
err_setstr(KeyError, GETSTRINGVALUE((stringobject *)key));
122-
return 0;
122+
return NULL;
123123
}
124124
v = newsizedstringobject(drec.dptr, drec.dsize);
125125
free(drec.dptr);
@@ -167,6 +167,21 @@ static mapping_methods dbm_as_mapping = {
167167
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
168168
};
169169

170+
static object *
171+
dbm_close(dp, args)
172+
register dbmobject *dp;
173+
object *args;
174+
{
175+
if ( !getnoarg(args) )
176+
return NULL;
177+
if ( dp->di_dbm )
178+
gdbm_close(dp->di_dbm);
179+
dp->di_dbm = NULL;
180+
DEL(dp);
181+
INCREF(None);
182+
return None;
183+
}
184+
170185
static object *
171186
dbm_keys(dp, args)
172187
register dbmobject *dp;
@@ -271,6 +286,7 @@ dbm_reorganize(dp, args)
271286
}
272287

273288
static struct methodlist dbm_methods[] = {
289+
{"close", (method)dbm_close},
274290
{"keys", (method)dbm_keys},
275291
{"has_key", (method)dbm_has_key},
276292
{"firstkey", (method)dbm_firstkey},
@@ -290,7 +306,7 @@ dbm_getattr(dp, name)
290306
static typeobject Dbmtype = {
291307
OB_HEAD_INIT(&Typetype)
292308
0,
293-
"Gdbm_dictionary",
309+
"gdbm",
294310
sizeof(dbmobject),
295311
0,
296312
(destructor)dbm_dealloc, /*tp_dealloc*/
@@ -311,12 +327,14 @@ dbmopen(self, args)
311327
object *self;
312328
object *args;
313329
{
314-
char *name, *flags;
315-
int iflags, mode;
330+
char *name;
331+
char *flags = "r";
332+
int iflags;
333+
int mode = 0666;
316334

317335
/* XXXX add other flags */
318-
if ( !getargs(args, "(ssi)", &name, &flags, &mode) )
319-
return 0;
336+
if ( !newgetargs(args, "s|si", &name, &flags, &mode) )
337+
return NULL;
320338
if ( strcmp(flags, "r") == 0 )
321339
iflags = GDBM_READER;
322340
else if ( strcmp(flags, "w") == 0 )
@@ -328,13 +346,13 @@ dbmopen(self, args)
328346
else {
329347
err_setstr(DbmError,
330348
"Flags should be one of 'r', 'w', 'c' or 'n'");
331-
return 0;
349+
return NULL;
332350
}
333351
return newdbmobject(name, iflags, mode);
334352
}
335353

336354
static struct methodlist dbmmodule_methods[] = {
337-
{ "open", (method)dbmopen },
355+
{ "open", (method)dbmopen, 1 },
338356
{ 0, 0 },
339357
};
340358

0 commit comments

Comments
 (0)