1/* gdbmsetopt.c - set options pertaining to a GDBM descriptor. */ 2 3/* This file is part of GDBM, the GNU data base manager, by Philip A. Nelson. 4 Copyright (C) 1993, 1994 Free Software Foundation, Inc. 5 6 GDBM is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GDBM is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GDBM; see the file COPYING. If not, write to 18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 20 You may contact the original author by: 21 e-mail: phil@cs.wwu.edu 22 us-mail: Philip A. Nelson 23 Computer Science Department 24 Western Washington University 25 Bellingham, WA 98226 26 27 The author of this file is: 28 e-mail: downsj@downsj.com 29 30*************************************************************************/ 31 32 33/* include system configuration before all else. */ 34#include "autoconf.h" 35 36#include "gdbmdefs.h" 37#include "gdbmerrno.h" 38 39/* operate on an already open descriptor. */ 40 41/* ARGSUSED */ 42int 43gdbm_setopt(dbf, optflag, optval, optlen) 44 gdbm_file_info *dbf; /* descriptor to operate on. */ 45 int optflag; /* option to set. */ 46 int *optval; /* pointer to option value. */ 47 int optlen; /* size of optval. */ 48{ 49 switch(optflag) 50 { 51 case GDBM_CACHESIZE: 52 /* Optval will point to the new size of the cache. */ 53 if (dbf->bucket_cache != NULL) 54 { 55 gdbm_errno = GDBM_OPT_ALREADY_SET; 56 return(-1); 57 } 58 59 return(_gdbm_init_cache(dbf, ((*optval) > 9) ? (*optval) : 10)); 60 61 case GDBM_FASTMODE: 62 /* Obsolete form of SYNCMODE. */ 63 if ((*optval != TRUE) && (*optval != FALSE)) 64 { 65 gdbm_errno = GDBM_OPT_ILLEGAL; 66 return(-1); 67 } 68 69 dbf->fast_write = *optval; 70 break; 71 72 case GDBM_SYNCMODE: 73 /* Optval will point to either true or false. */ 74 if ((*optval != TRUE) && (*optval != FALSE)) 75 { 76 gdbm_errno = GDBM_OPT_ILLEGAL; 77 return(-1); 78 } 79 80 dbf->fast_write = !(*optval); 81 break; 82 83 case GDBM_CENTFREE: 84 /* Optval will point to either true or false. */ 85 if ((*optval != TRUE) && (*optval != FALSE)) 86 { 87 gdbm_errno = GDBM_OPT_ILLEGAL; 88 return(-1); 89 } 90 91 dbf->fast_write = *optval; 92 break; 93 94 case GDBM_COALESCEBLKS: 95 /* Optval will point to either true or false. */ 96 if ((*optval != TRUE) && (*optval != FALSE)) 97 { 98 gdbm_errno = GDBM_OPT_ILLEGAL; 99 return(-1); 100 } 101 102 dbf->fast_write = *optval; 103 break; 104 105 default: 106 gdbm_errno = GDBM_OPT_ILLEGAL; 107 return(-1); 108 } 109 110 return(0); 111} 112