From 371bb85fe378ffd0ed6ddc81985d450cef5835a3 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Thu, 24 May 2018 11:35:24 +0300 Subject: More error checking; improve gdbm_recover * Makefile.am (set-dist-date): New rule (dist-hook): Catch FIXMEs in NEWS. * NEWS: Updated. * src/findkey.c (gdbm_bucket_element_valid_p): New function. (_gdbm_read_entry): Validate the retrieved bucket element. * src/gdbm.h.in (gdbm_recovery): New member: duplicate_keys. (GDBM_BAD_HASH_TABLE): New error code. * src/gdbmdefs.h (TYPE_WIDTH,SIGNED_TYPE_MAXIMUM) (OFF_T_MAX): New defines. (off_t_sum_ok): New function. (gdbm_bucket_element_valid_p): New prototype. * src/gdbmerrno.c: Support for GDBM_BAD_HASH_TABLE code. * src/gdbmtool.c (recover_handler): Fix argument counting. New argument 'summary' prints statistics summary at the end of the run. (export_handler,import_handler): Fix argument counting. * src/mmap.c (SUM_FILE_SIZE): Rewrite as inlined function. Add error checking. (_gdbm_mapped_remap): More error checking. * src/recover.c (run_recovery): Don't bail out on GDBM_CANNOT_REPLACE. (gdbm_recover): Initialize duplicate_keys * src/systems.h: Include limits.h --- src/gdbm.h.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/gdbm.h.in') diff --git a/src/gdbm.h.in b/src/gdbm.h.in index 61d5707..e576c69 100644 --- a/src/gdbm.h.in +++ b/src/gdbm.h.in @@ -152,6 +152,7 @@ typedef struct gdbm_recovery_s size_t recovered_buckets; size_t failed_keys; size_t failed_buckets; + size_t duplicate_keys; char *backup_name; } gdbm_recovery; @@ -222,9 +223,10 @@ extern int gdbm_copy_meta (GDBM_FILE dst, GDBM_FILE src); # define GDBM_BAD_BUCKET 32 # define GDBM_BAD_HEADER 33 # define GDBM_BAD_AVAIL 34 +# define GDBM_BAD_HASH_TABLE 35 # define _GDBM_MIN_ERRNO 0 -# define _GDBM_MAX_ERRNO GDBM_BAD_AVAIL +# define _GDBM_MAX_ERRNO GDBM_BAD_HASH_TABLE /* This one was never used and will be removed in the future */ # define GDBM_UNKNOWN_UPDATE GDBM_UNKNOWN_ERROR -- cgit v1.2.1