Be more careful about default args.

This commit is contained in:
Guido van Rossum 1996-05-23 22:57:54 +00:00
parent 2c26cfe776
commit dd96ca77da
1 changed files with 25 additions and 16 deletions

View File

@ -556,15 +556,16 @@ bsdbtopen(self, args)
int flags = O_RDONLY; int flags = O_RDONLY;
int mode = 0666; int mode = 0666;
int cachesize = 0; int cachesize = 0;
int maxkeypage; int maxkeypage = 0;
int minkeypage; int minkeypage = 0;
int btflags; int btflags = 0;
unsigned int psize; unsigned int psize = 0;
int lorder; int lorder = 0;
if (!newgetargs(args, "s|siiiiiii", if (!newgetargs(args, "s|siiiiiii",
&file, &flag, &mode, &file, &flag, &mode,
&btflags, &cachesize, &maxkeypage, &minkeypage, &psize, &lorder)) &btflags, &cachesize, &maxkeypage, &minkeypage,
&psize, &lorder))
return NULL; return NULL;
if (flag != NULL) { if (flag != NULL) {
/* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ /* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */
@ -594,8 +595,10 @@ bsdbtopen(self, args)
} }
} }
return newdbbtobject(file, flags, mode, return newdbbtobject(file, flags, mode,
btflags, cachesize, maxkeypage, minkeypage, psize, lorder); btflags, cachesize, maxkeypage, minkeypage,
psize, lorder);
} }
static object * static object *
bsdrnopen(self, args) bsdrnopen(self, args)
object *self; object *self;
@ -606,16 +609,17 @@ bsdrnopen(self, args)
int flags = O_RDONLY; int flags = O_RDONLY;
int mode = 0666; int mode = 0666;
int cachesize = 0; int cachesize = 0;
int rnflags; int rnflags = 0;
unsigned int psize; unsigned int psize = 0;
int lorder; int lorder = 0;
size_t reclen; size_t reclen = 0;
char *bval; char *bval = "";
char *bfname; char *bfname = NULL;
if (!newgetargs(args, "s|siiiiiiss", if (!newgetargs(args, "s|siiiiiiss",
&file, &flag, &mode, &file, &flag, &mode,
&rnflags, &cachesize, &psize, &lorder, &reclen, &bval, &bfname)) &rnflags, &cachesize, &psize, &lorder,
&reclen, &bval, &bfname))
return NULL; return NULL;
if (flag != NULL) { if (flag != NULL) {
/* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */ /* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */
@ -643,6 +647,11 @@ bsdrnopen(self, args)
return NULL; return NULL;
#endif #endif
} }
else if (flag[1] != '\0') {
err_setstr(BsddbError,
"Flag char 2 should be 'l' or absent");
return NULL;
}
} }
return newdbrnobject(file, flags, mode, return newdbrnobject(file, flags, mode,
rnflags, cachesize, psize, lorder, bval[0], bfname); rnflags, cachesize, psize, lorder, bval[0], bfname);