summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--NEWS17
-rw-r--r--configure.ac4
-rw-r--r--src/Makefile.am2
-rw-r--r--src/bucket.c4
-rw-r--r--src/falloc.c2
-rw-r--r--src/gdbmopen.c2
-rw-r--r--src/gdbmsetopt.c2
-rw-r--r--src/gdbmtool.c2
8 files changed, 21 insertions, 14 deletions
diff --git a/NEWS b/NEWS
index ba245aa..76f7db0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,14 +1,21 @@
-GNU dbm NEWS -- history of user-visible changes. 2018-05-25
+GNU dbm NEWS -- history of user-visible changes. 2018-06-16
Copyright (C) 1990-2018 Free Software Foundation, Inc.
See the end of file for copying conditions.
Please send gdbm bug reports to <bug-gdbm@gnu.org>.
-Version 1.14.90
+Version 1.15 - 2018-06-15
-FIXME: BUMP VI_MAJOR
+* Extensive database consistency checking
-* Implement database consistency checks
+GDBM tries to detect inconsistencies in input database files as
+early as possible. When an inconcistency is detected, a helpful
+diagnostics is returned and the database is marked as needing
+recovery. From this moment on, any GDBM function trying to access
+the database will immediately return error code (instead of
+eventually segfaulting as previous versions did). In order to
+reconstruct the database and return it to healthy state, the
+gdbm_recover function should be used.
Special thanks to Lionel Debroux and Craig Young for investing
their time and efforts in testing and providing valuable feedback.
@@ -33,7 +40,7 @@ e.g.:
* New member in the gdbm_recovery structure: duplicate_keys.
Upon return from gdbm_recover, this member holds the number of keys
-that were not recovered, because the same key has already been stored
+that has not been recovered, because the same key had already been stored
in the database. The actual number of stored keys is thus
recovered_keys - duplicate_keys.
diff --git a/configure.ac b/configure.ac
index 48ad675..505ba09 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,8 +16,8 @@
# along with GDBM. If not, see <http://www.gnu.org/licenses/>. */
m4_define([_GDBM_VERSION_MAJOR], 1)
-m4_define([_GDBM_VERSION_MINOR], 14)
-m4_define([_GDBM_VERSION_PATCH], 90)
+m4_define([_GDBM_VERSION_MINOR], 15)
+dnl m4_define([_GDBM_VERSION_PATCH], 0)
AC_INIT([gdbm],
_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
gram.h: gram.c
# The libraries
-VI_CURRENT = 5
+VI_CURRENT = 6
VI_REVISION = 0
VI_AGE = 0
diff --git a/src/bucket.c b/src/bucket.c
index a3e8f4e..4b69bbe 100644
--- a/src/bucket.c
+++ b/src/bucket.c
@@ -29,7 +29,7 @@ void
_gdbm_new_bucket (GDBM_FILE dbf, hash_bucket *bucket, int bits)
{
int index;
-
+
/* Initialize the avail block. */
bucket->av_count = 0;
@@ -146,7 +146,7 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index)
if (!(bucket->count >= 0
&& bucket->count <= dbf->header->bucket_elems
&& bucket->bucket_bits >= 0
- && bucket->bucket_bits <= GDBM_HASH_BITS))
+ && bucket->bucket_bits <= dbf->header->dir_bits))
{
GDBM_SET_ERRNO (dbf, GDBM_BAD_BUCKET, TRUE);
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)
av_adr = new_loc.av_adr;
/* Split the header block. */
- temp = malloc (av_size);
+ temp = calloc (1, av_size);
if (temp == NULL)
{
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)
if (hdr->dir_bits != dir_bits)
return GDBM_BAD_HEADER;
- if (!(hdr->bucket_size > 0 && hdr->bucket_size > sizeof(hash_bucket)))
+ if (!(hdr->bucket_size > sizeof(hash_bucket)))
return GDBM_BAD_HEADER;
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)
{
size_t sz;
- /* Optval will point to the new size of the cache. */
if (dbf->bucket_cache != NULL)
{
GDBM_SET_ERRNO (dbf, GDBM_OPT_ALREADY_SET, FALSE);
return -1;
}
+ /* Optval will point to the new size of the cache. */
if (get_size (optval, optlen, &sz))
{
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)
data = gdbm_fetch (gdbm_file, key);
if (!data.dptr)
{
- terror (_("cannot fetch data; the key was:"));
+ terror (_("%s; the key was:"), gdbm_db_strerror (gdbm_file));
datum_format (stderr, &key, dsdef[DS_KEY]);
}
else

Return to:

Send suggestions and report system problems to the System administrator.