add changelog
[platform/upstream/gdbm.git] / src / gdbm.h.in
1 /* gdbm.h  -  The include file for dbm users.  -*- c -*- */
2
3 /*  This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
4     Copyright (C) 1990, 1991, 1993, 2011 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. If not, see <http://www.gnu.org/licenses/>.  
18
19     You may contact the author by:
20        e-mail:  phil@cs.wwu.edu
21       us-mail:  Philip A. Nelson
22                 Computer Science Department
23                 Western Washington University
24                 Bellingham, WA 98226
25        
26 *************************************************************************/
27
28 /* Protection for multiple includes. */
29 #ifndef _GDBM_H_
30 # define _GDBM_H_
31
32 # include <stdio.h>
33
34 /* GDBM C++ support */
35 # if defined(__cplusplus) || defined(c_plusplus)
36 extern "C" {
37 # endif
38
39 /* Parameters to gdbm_open for READERS, WRITERS, and WRITERS who
40    can create the database. */
41 # define GDBM_READER    0       /* A reader. */
42 # define GDBM_WRITER    1       /* A writer. */
43 # define GDBM_WRCREAT   2       /* A writer.  Create the db if needed. */
44 # define GDBM_NEWDB     3       /* A writer.  Always create a new db. */
45 # define GDBM_OPENMASK  7       /* Mask for the above. */
46
47 # define GDBM_FAST      0x010   /* Write fast! => No fsyncs.  OBSOLETE. */
48 # define GDBM_SYNC      0x020   /* Sync operations to the disk. */
49 # define GDBM_NOLOCK    0x040   /* Don't do file locking operations. */
50 # define GDBM_NOMMAP    0x080   /* Don't use mmap(). */
51 # define GDBM_CLOEXEC   0x100   /* Close the underlying fd on exec(3) */
52   
53 /* Parameters to gdbm_store for simple insertion or replacement in the
54    case that the key is already in the database. */
55 # define GDBM_INSERT    0       /* Never replace old data with new. */
56 # define GDBM_REPLACE   1       /* Always replace old data with new. */
57
58 /* Parameters to gdbm_setopt, specifing the type of operation to perform. */
59 # define GDBM_SETCACHESIZE    1  /* Set the cache size. */
60 # define GDBM_FASTMODE        2 /* Toggle fast mode.  OBSOLETE. */
61 # define GDBM_SETSYNCMODE     3  /* Turn on or off sync operations. */
62 # define GDBM_SETCENTFREE     4  /* Keep all free blocks in the header. */
63 # define GDBM_SETCOALESCEBLKS 5  /* Attempt to coalesce free blocks. */
64 # define GDBM_SETMAXMAPSIZE   6  /* Set maximum mapped memory size */
65 # define GDBM_SETMMAP         7  /* Toggle mmap mode */
66
67 /* Compatibility defines: */
68 # define GDBM_CACHESIZE      GDBM_SETCACHESIZE
69 # define GDBM_SYNCMODE       GDBM_SETSYNCMODE
70 # define GDBM_CENTFREE       GDBM_SETCENTFREE
71 # define GDBM_COALESCEBLKS   GDBM_SETCOALESCEBLKS
72
73 # define GDBM_GETFLAGS        8  /* Get gdbm_open flags */
74 # define GDBM_GETMMAP         9  /* Get mmap status */
75 # define GDBM_GETCACHESIZE    10 /* Get current cache side */
76 # define GDBM_GETSYNCMODE     11 /* Get synch mode */
77 # define GDBM_GETCENTFREE     12 /* Get "centfree" status */
78 # define GDBM_GETCOALESCEBLKS 13 /* Get free block coalesce status */
79 # define GDBM_GETMAXMAPSIZE   14 /* Get maximum mapped memory size */
80 # define GDBM_GETDBNAME       15 /* Return database file name */
81
82 typedef @GDBM_COUNT_T@ gdbm_count_t;
83   
84 /* The data and key structure. */
85 typedef struct {
86         char *dptr;
87         int   dsize;
88       } datum;
89
90
91 /* A pointer to the GDBM file. */
92 typedef struct gdbm_file_info *GDBM_FILE;
93
94 /* External variable, the gdbm build release string. */
95 extern const char *gdbm_version;        
96
97 # define GDBM_VERSION_MAJOR @GDBM_VERSION_MAJOR@
98 # define GDBM_VERSION_MINOR @GDBM_VERSION_MINOR@
99 # define GDBM_VERSION_PATCH @GDBM_VERSION_PATCH@
100
101 extern int const gdbm_version_number[3];
102
103 /* GDBM external functions. */
104
105 extern GDBM_FILE gdbm_open (const char *, int, int, int,
106                             void (*)(const char *));
107 extern void gdbm_close (GDBM_FILE);
108 extern int gdbm_store (GDBM_FILE, datum, datum, int);
109 extern datum gdbm_fetch (GDBM_FILE, datum);
110 extern int gdbm_delete (GDBM_FILE, datum);
111 extern datum gdbm_firstkey (GDBM_FILE);
112 extern datum gdbm_nextkey (GDBM_FILE, datum);
113 extern int gdbm_reorganize (GDBM_FILE);
114 extern void gdbm_sync (GDBM_FILE);
115 extern int gdbm_exists (GDBM_FILE, datum);
116 extern int gdbm_setopt (GDBM_FILE, int, void *, int);
117 extern int gdbm_fdesc (GDBM_FILE);
118   
119 extern int gdbm_export (GDBM_FILE, const char *, int, int);
120 extern int gdbm_export_to_file (GDBM_FILE dbf, FILE *fp);
121   
122 extern int gdbm_import (GDBM_FILE, const char *, int);
123 extern int gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag);
124
125 extern int gdbm_count (GDBM_FILE dbf, gdbm_count_t *pcount);
126   
127 #define GDBM_DUMP_FMT_BINARY 0
128 #define GDBM_DUMP_FMT_ASCII  1
129
130 #define GDBM_META_MASK_MODE    0x01
131 #define GDBM_META_MASK_OWNER   0x02
132   
133 extern int gdbm_dump (GDBM_FILE, const char *, int fmt, int open_flags,
134                       int mode);
135 extern int gdbm_dump_to_file (GDBM_FILE, FILE *, int fmt);
136
137 extern int gdbm_load (GDBM_FILE *, const char *, int replace,
138                       int meta_flags,
139                       unsigned long *line);
140 extern int gdbm_load_from_file (GDBM_FILE *, FILE *, int replace,
141                                 int meta_flags,
142                                 unsigned long *line);
143
144 # define GDBM_NO_ERROR          0
145 # define GDBM_MALLOC_ERROR      1
146 # define GDBM_BLOCK_SIZE_ERROR  2
147 # define GDBM_FILE_OPEN_ERROR   3
148 # define GDBM_FILE_WRITE_ERROR  4
149 # define GDBM_FILE_SEEK_ERROR   5
150 # define GDBM_FILE_READ_ERROR   6
151 # define GDBM_BAD_MAGIC_NUMBER  7
152 # define GDBM_EMPTY_DATABASE    8
153 # define GDBM_CANT_BE_READER    9
154 # define GDBM_CANT_BE_WRITER    10
155 # define GDBM_READER_CANT_DELETE        11
156 # define GDBM_READER_CANT_STORE 12
157 # define GDBM_READER_CANT_REORGANIZE    13
158 # define GDBM_UNKNOWN_UPDATE    14
159 # define GDBM_ITEM_NOT_FOUND    15
160 # define GDBM_REORGANIZE_FAILED 16
161 # define GDBM_CANNOT_REPLACE    17
162 # define GDBM_ILLEGAL_DATA      18
163 # define GDBM_OPT_ALREADY_SET   19
164 # define GDBM_OPT_ILLEGAL       20
165 # define GDBM_BYTE_SWAPPED      21
166 # define GDBM_BAD_FILE_OFFSET   22
167 # define GDBM_BAD_OPEN_FLAGS    23
168 # define GDBM_FILE_STAT_ERROR   24
169 # define GDBM_FILE_EOF          25
170 # define GDBM_NO_DBNAME         26
171 # define GDBM_ERR_FILE_OWNER    27
172 # define GDBM_ERR_FILE_MODE     28
173   
174 # define _GDBM_MIN_ERRNO                0
175 # define _GDBM_MAX_ERRNO                GDBM_ERR_FILE_MODE
176 typedef int gdbm_error;         /* For compatibilities sake. */
177 extern gdbm_error gdbm_errno;
178 extern const char * const gdbm_errlist[];
179
180 /* extra prototypes */
181
182 extern const char *gdbm_strerror (gdbm_error);
183 extern int gdbm_version_cmp (int const a[], int const b[]);
184
185 # if defined(__cplusplus) || defined(c_plusplus)
186 }
187 # endif
188
189 #endif