1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* proto.h - The prototypes for the dbm routines. */
/* This file is part of GDBM, the GNU data base manager.
Copyright (C) 1990-1991, 1993, 2007, 2011, 2013, 2017-2018 Free
Software Foundation, Inc.
GDBM 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.
GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */
/* From bucket.c */
void _gdbm_new_bucket (GDBM_FILE, hash_bucket *, int);
int _gdbm_get_bucket (GDBM_FILE, int);
int _gdbm_read_bucket_at (GDBM_FILE dbf, off_t off, hash_bucket *bucket,
size_t size);
int _gdbm_split_bucket (GDBM_FILE, int);
int _gdbm_write_bucket (GDBM_FILE, cache_elem *);
/* From falloc.c */
off_t _gdbm_alloc (GDBM_FILE, int);
int _gdbm_free (GDBM_FILE, off_t, int);
int _gdbm_put_av_elem (avail_elem, avail_elem [], int *, int);
/* From findkey.c */
char *_gdbm_read_entry (GDBM_FILE, int);
int _gdbm_findkey (GDBM_FILE, datum, char **, int *);
/* From hash.c */
int _gdbm_hash (datum);
void _gdbm_hash_key (GDBM_FILE dbf, datum key, int *hash, int *bucket,
int *offset);
int _gdbm_bucket_dir (GDBM_FILE dbf, int hash);
/* From update.c */
int _gdbm_end_update (GDBM_FILE);
void _gdbm_fatal (GDBM_FILE, const char *);
/* From gdbmopen.c */
int _gdbm_init_cache (GDBM_FILE, size_t);
void _gdbm_cache_entry_invalidate (GDBM_FILE, int);
int gdbm_avail_block_validate (GDBM_FILE dbf, avail_block *avblk);
int gdbm_bucket_avail_table_validate (GDBM_FILE dbf, hash_bucket *bucket);
/* From mmap.c */
int _gdbm_mapped_init (GDBM_FILE);
void _gdbm_mapped_unmap (GDBM_FILE);
ssize_t _gdbm_mapped_read (GDBM_FILE, void *, size_t);
ssize_t _gdbm_mapped_write (GDBM_FILE, void *, size_t);
off_t _gdbm_mapped_lseek (GDBM_FILE, off_t, int);
int _gdbm_mapped_sync (GDBM_FILE);
/* From lock.c */
void _gdbm_unlock_file (GDBM_FILE);
int _gdbm_lock_file (GDBM_FILE);
/* From fullio.c */
int _gdbm_full_read (GDBM_FILE, void *, size_t);
int _gdbm_full_write (GDBM_FILE, void *, size_t);
/* From base64.c */
int _gdbm_base64_encode (const unsigned char *input, size_t input_len,
unsigned char **output, size_t *output_size,
size_t *outbytes);
int _gdbm_base64_decode (const unsigned char *input, size_t input_len,
unsigned char **output, size_t *output_size,
size_t *inbytes, size_t *outbytes);
int _gdbm_load (FILE *fp, GDBM_FILE *pdbf, unsigned long *line);
int _gdbm_dump (GDBM_FILE dbf, FILE *fp);
/* From recover.c */
int _gdbm_next_bucket_dir (GDBM_FILE dbf, int bucket_dir);
/* I/O macros. */
#if HAVE_MMAP
# define gdbm_file_read(_dbf, _buf, _size) \
_gdbm_mapped_read(_dbf, _buf, _size)
# define gdbm_file_write(_dbf, _buf, _size) \
_gdbm_mapped_write(_dbf, _buf, _size)
# define gdbm_file_seek(_dbf, _off, _whn) \
_gdbm_mapped_lseek(_dbf, _off, _whn)
# define gdbm_file_sync(_dbf) \
_gdbm_mapped_sync(_dbf)
#else
# define gdbm_file_read(_dbf, _buf, _size) read(_dbf->desc, _buf, _size)
# define gdbm_file_write(_dbf, _buf, _size) write(_dbf->desc, _buf, _size)
# define gdbm_file_seek(_dbf, _off, _whn) lseek(_dbf->desc, _off, _whn)
# if HAVE_FSYNC
# define gdbm_file_sync(_dbf) fsync(_dbf->desc)
# else
# define gdbm_file_sync(_dbf) { sync(); sync(); }
# endif
#endif
|