diff options
author | Jason Downs <downsj@downsj.com> | 2008-11-21 21:33:39 +0000 |
---|---|---|
committer | Jason Downs <downsj@downsj.com> | 2008-11-21 21:33:39 +0000 |
commit | 10fe387708ddfba6449b9abd74cfbdf67d495465 (patch) | |
tree | 50115c0708c762940f580d081c73495bf148101a /src/gdbmsetopt.c | |
download | gdbm-10fe387708ddfba6449b9abd74cfbdf67d495465.tar.gz gdbm-10fe387708ddfba6449b9abd74cfbdf67d495465.tar.bz2 |
Initial revision
Diffstat (limited to 'src/gdbmsetopt.c')
-rw-r--r-- | src/gdbmsetopt.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/gdbmsetopt.c b/src/gdbmsetopt.c new file mode 100644 index 0000000..cbc2df3 --- /dev/null +++ b/src/gdbmsetopt.c @@ -0,0 +1,94 @@ +/* gdbmsetopt.c - set options pertaining to a GDBM descriptor. */ + +/* This file is part of GDBM, the GNU data base manager. + Copyright (C) 1993, 1994, 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Include system configuration before all else. */ +#include "autoconf.h" + +#include "gdbmdefs.h" +#include "gdbmerrno.h" + +/* operate on an already open descriptor. */ + +/* ARGSUSED */ +int +gdbm_setopt(gdbm_file_info *dbf, int optflag, int *optval, int optlen) +{ + switch(optflag) + { + case GDBM_CACHESIZE: + /* Optval will point to the new size of the cache. */ + if (dbf->bucket_cache != NULL) + { + gdbm_errno = GDBM_OPT_ALREADY_SET; + return -1; + } + + return _gdbm_init_cache(dbf, ((*optval) > 9) ? (*optval) : 10); + + case GDBM_FASTMODE: + /* Obsolete form of SYNCMODE. */ + if ((*optval != TRUE) && (*optval != FALSE)) + { + gdbm_errno = GDBM_OPT_ILLEGAL; + return -1; + } + + dbf->fast_write = *optval; + break; + + case GDBM_SYNCMODE: + /* Optval will point to either true or false. */ + if ((*optval != TRUE) && (*optval != FALSE)) + { + gdbm_errno = GDBM_OPT_ILLEGAL; + return -1; + } + + dbf->fast_write = !(*optval); + break; + + case GDBM_CENTFREE: + /* Optval will point to either true or false. */ + if ((*optval != TRUE) && (*optval != FALSE)) + { + gdbm_errno = GDBM_OPT_ILLEGAL; + return -1; + } + + dbf->fast_write = *optval; + break; + + case GDBM_COALESCEBLKS: + /* Optval will point to either true or false. */ + if ((*optval != TRUE) && (*optval != FALSE)) + { + gdbm_errno = GDBM_OPT_ILLEGAL; + return -1; + } + + dbf->fast_write = *optval; + break; + + default: + gdbm_errno = GDBM_OPT_ILLEGAL; + return -1; + } + + return 0; +} |