source: gsdl/tags/gsdl-2_26-distribution/gsdl/packages/wingdbm/gdbmclose.c@ 14121

Last change on this file since 14121 was 522, checked in by rjmcnab, 25 years ago

changes for need_filelock option

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.3 KB
Line 
1/* gdbmclose.c - Close a previously opened dbm file. */
2
3/* This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
4 Copyright (C) 1990, 1991, 1993 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 author by:
21 e-mail: [email protected]
22 us-mail: Philip A. Nelson
23 Computer Science Department
24 Western Washington University
25 Bellingham, WA 98226
26
27*************************************************************************/
28
29
30/* AIX demands this be the very first thing in the file. */
31#if !defined(__GNUC__) && defined(_AIX)
32 #pragma alloca
33#endif
34
35/* include system configuration before all else. */
36#include "autoconf.h"
37
38#include "gdbmdefs.h"
39
40/* Close the dbm file and free all memory associated with the file DBF.
41 Before freeing members of DBF, check and make sure that they were
42 allocated. */
43
44void
45gdbm_close (dbf)
46 gdbm_file_info *dbf;
47{
48 register int index; /* For freeing the bucket cache. */
49
50 /* Make sure the database is all on disk. */
51 if (dbf->read_write == GDBM_WRITER)
52 fsync (dbf->desc);
53
54 /* Close the file and free all malloced memory. */
55 if (dbf->need_filelock) {
56 UNLOCK_FILE(dbf);
57 }
58 close (dbf->desc);
59 free (dbf->name);
60 if (dbf->dir != NULL) free (dbf->dir);
61
62 if (dbf->bucket_cache != NULL) {
63 for (index = 0; index < dbf->cache_size; index++) {
64 if (dbf->bucket_cache[index].ca_bucket != NULL)
65 free (dbf->bucket_cache[index].ca_bucket);
66 if (dbf->bucket_cache[index].ca_data.dptr != NULL)
67 free (dbf->bucket_cache[index].ca_data.dptr);
68 }
69 free (dbf->bucket_cache);
70 }
71 if ( dbf->header != NULL ) free (dbf->header);
72 free (dbf);
73}
Note: See TracBrowser for help on using the repository browser.