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

Skip to content

Commit e36e1fe

Browse files
committed
support fast mode for gdmb
1 parent 15ad9a6 commit e36e1fe

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

Modules/gdbmmodule.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -335,27 +335,34 @@ dbmopen(self, args)
335335
object *args;
336336
{
337337
char *name;
338-
char *flags = "r";
338+
char *flags = "r ";
339339
int iflags;
340340
int mode = 0666;
341341

342-
/* XXXX add other flags */
343-
if ( !newgetargs(args, "s|si", &name, &flags, &mode) )
342+
/* XXXX add other flags. 2nd character can be "f" meaning open in fast mode. */
343+
if ( !newgetargs(args, "s|si", &name, &flags, &mode) )
344344
return NULL;
345-
if ( strcmp(flags, "r") == 0 )
345+
switch (flags[0]) {
346+
case 'r':
346347
iflags = GDBM_READER;
347-
else if ( strcmp(flags, "w") == 0 )
348+
break;
349+
case 'w':
348350
iflags = GDBM_WRITER;
349-
else if ( strcmp(flags, "c") == 0 )
351+
break;
352+
case 'c':
350353
iflags = GDBM_WRCREAT;
351-
else if ( strcmp(flags, "n") == 0 )
354+
break;
355+
case 'n':
352356
iflags = GDBM_NEWDB;
353-
else {
357+
break;
358+
default:
354359
err_setstr(DbmError,
355360
"Flags should be one of 'r', 'w', 'c' or 'n'");
356361
return NULL;
357362
}
358-
return newdbmobject(name, iflags, mode);
363+
if (flags[1] == 'f')
364+
iflags |= GDBM_FAST;
365+
return newdbmobject(name, iflags, mode);
359366
}
360367

361368
static struct methodlist dbmmodule_methods[] = {

0 commit comments

Comments
 (0)