diff options
-rw-r--r-- | NEWS | 17 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/bucket.c | 2 | ||||
-rw-r--r-- | src/falloc.c | 2 | ||||
-rw-r--r-- | src/gdbmopen.c | 2 | ||||
-rw-r--r-- | src/gdbmsetopt.c | 2 | ||||
-rw-r--r-- | src/gdbmtool.c | 2 |
8 files changed, 20 insertions, 13 deletions
@@ -1,14 +1,21 @@ | |||
1 | GNU dbm NEWS -- history of user-visible changes. 2018-05-25 | 1 | GNU dbm NEWS -- history of user-visible changes. 2018-06-16 |
2 | Copyright (C) 1990-2018 Free Software Foundation, Inc. | 2 | Copyright (C) 1990-2018 Free Software Foundation, Inc. |
3 | See the end of file for copying conditions. | 3 | See the end of file for copying conditions. |
4 | 4 | ||
5 | Please send gdbm bug reports to <bug-gdbm@gnu.org>. | 5 | Please send gdbm bug reports to <bug-gdbm@gnu.org>. |
6 | 6 | ||
7 | Version 1.14.90 | 7 | Version 1.15 - 2018-06-15 |
8 | 8 | ||
9 | FIXME: BUMP VI_MAJOR | 9 | * Extensive database consistency checking |
10 | 10 | ||
11 | * Implement database consistency checks | 11 | GDBM tries to detect inconsistencies in input database files as |
12 | early as possible. When an inconcistency is detected, a helpful | ||
13 | diagnostics is returned and the database is marked as needing | ||
14 | recovery. From this moment on, any GDBM function trying to access | ||
15 | the database will immediately return error code (instead of | ||
16 | eventually segfaulting as previous versions did). In order to | ||
17 | reconstruct the database and return it to healthy state, the | ||
18 | gdbm_recover function should be used. | ||
12 | 19 | ||
13 | Special thanks to Lionel Debroux and Craig Young for investing | 20 | Special thanks to Lionel Debroux and Craig Young for investing |
14 | their time and efforts in testing and providing valuable feedback. | 21 | their time and efforts in testing and providing valuable feedback. |
@@ -33,7 +40,7 @@ e.g.: | |||
33 | * New member in the gdbm_recovery structure: duplicate_keys. | 40 | * New member in the gdbm_recovery structure: duplicate_keys. |
34 | 41 | ||
35 | Upon return from gdbm_recover, this member holds the number of keys | 42 | Upon return from gdbm_recover, this member holds the number of keys |
36 | that were not recovered, because the same key has already been stored | 43 | that has not been recovered, because the same key had already been stored |
37 | in the database. The actual number of stored keys is thus | 44 | in the database. The actual number of stored keys is thus |
38 | recovered_keys - duplicate_keys. | 45 | recovered_keys - duplicate_keys. |
39 | 46 | ||
diff --git a/configure.ac b/configure.ac index 48ad675..505ba09 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -16,8 +16,8 @@ | |||
16 | # along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ | 16 | # along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ |
17 | 17 | ||
18 | m4_define([_GDBM_VERSION_MAJOR], 1) | 18 | m4_define([_GDBM_VERSION_MAJOR], 1) |
19 | m4_define([_GDBM_VERSION_MINOR], 14) | 19 | m4_define([_GDBM_VERSION_MINOR], 15) |
20 | m4_define([_GDBM_VERSION_PATCH], 90) | 20 | dnl m4_define([_GDBM_VERSION_PATCH], 0) |
21 | 21 | ||
22 | AC_INIT([gdbm], | 22 | AC_INIT([gdbm], |
23 | _GDBM_VERSION_MAJOR._GDBM_VERSION_MINOR[]m4_ifdef([_GDBM_VERSION_PATCH],._GDBM_VERSION_PATCH), | 23 | _GDBM_VERSION_MAJOR._GDBM_VERSION_MINOR[]m4_ifdef([_GDBM_VERSION_PATCH],._GDBM_VERSION_PATCH), |
diff --git a/src/Makefile.am b/src/Makefile.am index 0d2ca53..2710bf0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am | |||
@@ -33,7 +33,7 @@ BUILT_SOURCES = gdbm.h gram.h | |||
33 | gram.h: gram.c | 33 | gram.h: gram.c |
34 | 34 | ||
35 | # The libraries | 35 | # The libraries |
36 | VI_CURRENT = 5 | 36 | VI_CURRENT = 6 |
37 | VI_REVISION = 0 | 37 | VI_REVISION = 0 |
38 | VI_AGE = 0 | 38 | VI_AGE = 0 |
39 | 39 | ||
diff --git a/src/bucket.c b/src/bucket.c index a3e8f4e..4b69bbe 100644 --- a/src/bucket.c +++ b/src/bucket.c | |||
@@ -146,7 +146,7 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index) | |||
146 | if (!(bucket->count >= 0 | 146 | if (!(bucket->count >= 0 |
147 | && bucket->count <= dbf->header->bucket_elems | 147 | && bucket->count <= dbf->header->bucket_elems |
148 | && bucket->bucket_bits >= 0 | 148 | && bucket->bucket_bits >= 0 |
149 | && bucket->bucket_bits <= GDBM_HASH_BITS)) | 149 | && bucket->bucket_bits <= dbf->header->dir_bits)) |
150 | { | 150 | { |
151 | GDBM_SET_ERRNO (dbf, GDBM_BAD_BUCKET, TRUE); | 151 | GDBM_SET_ERRNO (dbf, GDBM_BAD_BUCKET, TRUE); |
152 | return -1; | 152 | return -1; |
diff --git a/src/falloc.c b/src/falloc.c index 2f21ebe..6571d9b 100644 --- a/src/falloc.c +++ b/src/falloc.c | |||
@@ -292,7 +292,7 @@ push_avail_block (GDBM_FILE dbf) | |||
292 | av_adr = new_loc.av_adr; | 292 | av_adr = new_loc.av_adr; |
293 | 293 | ||
294 | /* Split the header block. */ | 294 | /* Split the header block. */ |
295 | temp = malloc (av_size); | 295 | temp = calloc (1, av_size); |
296 | if (temp == NULL) | 296 | if (temp == NULL) |
297 | { | 297 | { |
298 | GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE); | 298 | GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE); |
diff --git a/src/gdbmopen.c b/src/gdbmopen.c index 03cc4f4..677f1cf 100644 --- a/src/gdbmopen.c +++ b/src/gdbmopen.c | |||
@@ -154,7 +154,7 @@ validate_header (gdbm_file_header const *hdr, struct stat const *st) | |||
154 | if (hdr->dir_bits != dir_bits) | 154 | if (hdr->dir_bits != dir_bits) |
155 | return GDBM_BAD_HEADER; | 155 | return GDBM_BAD_HEADER; |
156 | 156 | ||
157 | if (!(hdr->bucket_size > 0 && hdr->bucket_size > sizeof(hash_bucket))) | 157 | if (!(hdr->bucket_size > sizeof(hash_bucket))) |
158 | return GDBM_BAD_HEADER; | 158 | return GDBM_BAD_HEADER; |
159 | 159 | ||
160 | if (hdr->bucket_elems != bucket_element_count (hdr->bucket_size)) | 160 | if (hdr->bucket_elems != bucket_element_count (hdr->bucket_size)) |
diff --git a/src/gdbmsetopt.c b/src/gdbmsetopt.c index f9face0..865f5a5 100644 --- a/src/gdbmsetopt.c +++ b/src/gdbmsetopt.c | |||
@@ -54,13 +54,13 @@ setopt_gdbm_setcachesize (GDBM_FILE dbf, void *optval, int optlen) | |||
54 | { | 54 | { |
55 | size_t sz; | 55 | size_t sz; |
56 | 56 | ||
57 | /* Optval will point to the new size of the cache. */ | ||
58 | if (dbf->bucket_cache != NULL) | 57 | if (dbf->bucket_cache != NULL) |
59 | { | 58 | { |
60 | GDBM_SET_ERRNO (dbf, GDBM_OPT_ALREADY_SET, FALSE); | 59 | GDBM_SET_ERRNO (dbf, GDBM_OPT_ALREADY_SET, FALSE); |
61 | return -1; | 60 | return -1; |
62 | } | 61 | } |
63 | 62 | ||
63 | /* Optval will point to the new size of the cache. */ | ||
64 | if (get_size (optval, optlen, &sz)) | 64 | if (get_size (optval, optlen, &sz)) |
65 | { | 65 | { |
66 | GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE); | 66 | GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE); |
diff --git a/src/gdbmtool.c b/src/gdbmtool.c index 6d56578..d0b2694 100644 --- a/src/gdbmtool.c +++ b/src/gdbmtool.c | |||
@@ -919,7 +919,7 @@ list_handler (struct handler_param *param) | |||
919 | data = gdbm_fetch (gdbm_file, key); | 919 | data = gdbm_fetch (gdbm_file, key); |
920 | if (!data.dptr) | 920 | if (!data.dptr) |
921 | { | 921 | { |
922 | terror (_("cannot fetch data; the key was:")); | 922 | terror (_("%s; the key was:"), gdbm_db_strerror (gdbm_file)); |
923 | datum_format (stderr, &key, dsdef[DS_KEY]); | 923 | datum_format (stderr, &key, dsdef[DS_KEY]); |
924 | } | 924 | } |
925 | else | 925 | else |