2021-10-19  Sergey Poznyakoff  <gray@gnu.org>

        Version 1.22


2021-10-18  Sergey Poznyakoff  <gray@gnu.org>

        gdbm_recover does not disable crash tolerance

        * src/recover.c (_gdbm_finish_transfer): Remove call to
        _gdbmsync_done.
        * doc/gdbm.texi: Reflect the changes.

2021-10-18  Sergey Poznyakoff  <gray@gnu.org>

        Revise the GDBM Manual


2021-10-17  Sergey Poznyakoff  <gray@gnu.org>

        Escape Makefile variable references in AC_PATH_PROG


2021-10-17  Sergey Poznyakoff  <gray@gnu.org>

        Change build process: explicitly require bison and flex


2021-10-17  Sergey Poznyakoff  <gray@gnu.org>

        Update the docs

        * Makefile.am: Use plain git log to format the ChangeLog.
        * git2chg.awk: Remove.

        * NOTE-WARNING: Update.
        * README: Likewise.
        * README-alpha: Likewise.
        * README-hacking: Likewise.
        * doc/gdbm.3: Likewise.
        * doc/gdbm.texi

2021-10-11  Sergey Poznyakoff  <gray@gnu.org>

        Improve documentation


2021-10-10  Sergey Poznyakoff  <gray@gnu.org>

        Update configure.ac

        That should fix https://puszcza.gnu.org.ua/support/?349

        * configure.ac: Don't use obsolete macros. Use
        AM_GNU_GETTEXT_REQUIRE_VERSION (and require gettext 0.19), if
        available.  Install a kludge for that to work on autoconf 2.69. 
        Don't check for libdbm and libnbml.

2021-09-19  Sergey Poznyakoff  <gray@gnu.org>

        Fix key verification in sequential access.

        This fixes https://oss-fuzz.com/testcase-detail/6317999997452288 
        and improves 4046a0af.

        * src/bucket.c (gdbm_dir_entry_valid_p): Move to proto.
        * src/proto.h (gdbm_dir_entry_valid_p): New inline function.
        * src/gdbmseq.c (gdbm_valid_key_p): Use gdbm_dir_entry_valid_p
        to validate the buffer index.  Reorder the checks.

2021-09-16  Sergey Poznyakoff  <gray@gnu.org>

        Fix computation of dbf->avail->count after pushing new avail
        block.

        This is a very long-standing bug that caused a loss of an avail 
        entry if the original avail table had odd number of entries.

        * src/falloc.c (push_avail_block): Fix computation of
        dbf->avail->count.

2021-09-16  Sergey Poznyakoff  <gray@gnu.org>

        Fix typo


2021-09-15  Sergey Poznyakoff  <gray@gnu.org>

        Remove a left-over note from the README


2021-09-09  Sergey Poznyakoff  <gray@gnu.org>

        Add missing include

        * src/gdbmtool.h: Include string.h

2021-09-09  Sergey Poznyakoff  <gray@gnu.org>

        Fix stack overflow in print_usage

        * src/parseopt.c (print_usage): Fix length calculation for long 
        options.

2021-09-07  Sergey Poznyakoff  <gray@gnu.org>

        Reset TERM for dejagnu testsuite

        See https://puszcza.gnu.org.ua/bugs/index.php?520

        * tests/gdbmtool/config/default.exp: Set TERM to empty string.

2021-09-07  Sergey Poznyakoff  <gray@gnu.org>

        Fix testing with DejaGNU 1.6.3

        DejaGNU starting from version 1.6.3 looks for the testsuite in
        the directory testsuite.

        See https://puszcza.gnu.org.ua/bugs/index.php?519

        * configure.ac: Register tests/gdbmtool/Makefile
        * tests/Makefile.am: Move dejagnu tests to the gdbmtool subdir.
        * tests/gdbmtool/Makefile.am: New file.
        * tests/config/default.exp: Move to
        tests/gdbmtool/config/default.exp
        * tests/gdbmtool/base.exp: Move to
        tests/gdbmtool/testsuite/gdbmtool/base.exp

2021-09-07  Sergey Poznyakoff  <gray@gnu.org>

        Determine if st_mtim is present in struct stat

        * configure.ac: Check for st_mtim and st_mtimespec in struct
        stat. The former is POSIX, the latter is used instead of it on
        some systems
        (reportedly, Darwin and NetBSD).
        * src/systems.h [!HAVE_STRUCT_STAT_ST_MTIM]: Use st_mtimespec if 
        available.
        * src/gdbmshell.c (print_snapshot): Fall back to st_mtime if
        nanosecond precision is not available.
        * src/gdbmsync.c (timespec_cmp): Take two pointers to struct
        stat as arguments.  Use the right time field, depending on the
        configuration settings.  All uses changed.

2021-09-05  Sergey Poznyakoff  <gray@gnu.org>

        Fix file header validation

        * src/gdbmopen.c (validate_header_std)
        (validate_header_numsync): Check if bucket_size is > 0.

2021-09-05  Sergey Poznyakoff  <gray@gnu.org>

        Revert "Request gettext version 0.18 or newer"

        This requires autoconf 2.70.  Reverted until it is spread wide
        enough.

2021-09-04  Sergey Poznyakoff  <gray@gnu.org>

        Request gettext version 0.18 or newer


2021-09-03  Sergey Poznyakoff  <gray@gnu.org>

        Minor change


2021-09-03  Sergey Poznyakoff  <gray@gnu.org>

        gdbm_fuzzer: use atexit to free memory allocated for script
        buffer

        * fuzz/gdbm_fuzzer.c: (fuzzer_exit): New function.
        (LLVMFuzzerInitialize): Register atexit handler.

2021-08-31  Sergey Poznyakoff  <gray@gnu.org>

        Add seed builder script and runcom file for gdbm_fuzzer


2021-08-30  Sergey Poznyakoff  <gray@gnu.org>

        Add gdbm_fuzzer.c


2021-08-30  Sergey Poznyakoff  <gray@gnu.org>

        Change semantics of the errorexit variable.

        The "errorexit" variable is a string variable with the same
        syntax as errormask.  If a GDBM error is reported and the
        corresponding gdbm_errno value is listed in this variable,
        further script execution is aborted.

        Setting it as boolean value is equivalent to set
        errorexit="all".

        * src/gdbmshell.c (all handlers): Return a GDBMSHELL_* error 
        code.
        (closedb): Unset the fd variable only after closing the
        database.
        (run_command): If handler reported GDBM error and gdbm_errno is 
        listed in the errorexit variable, return 1 (which will cause
        YYABORT in parser).
        * src/gdbmtool.h (VAR_ERR_GDBM): New variable error code.
        (variable_has_errno): New function.
        (gdbm_error_is_masked): Rewrite using variable_has_errno.
        * src/gram.y: Abort if run_command or run_last_command return
        !0. Handle VAR_ERR_GDBM.
        * src/var.c (variable): New member: data.
        (errorexit variable): Change type to VART_STRING; install
        sethook and typeconv.
        (variable_unset): When unsetting string variable, free and reset
        its value.
        (cachesize_sethook,centfree_sethook)
        (coalesce_sethook): Return VAR_ERR_GDBM on gdbmshell_setopt
        error.
        (errormask_sethook): Keep the mask vector in the data member. 
        Handle conversions from boolean.
        (errorexit_sethook): Call errormask_sethook unless in
        interactive session.

2021-08-30  Sergey Poznyakoff  <gray@gnu.org>

        Minor change

        * tests/gtconv.c (main): Free allocated memory before exit.

2021-08-29  Sergey Poznyakoff  <gray@gnu.org>

        bootstrap: options for disable po download and for updating po
        files


2021-08-27  Sergey Poznyakoff  <gray@gnu.org>

        Minor change

        * src/gdbmshell.c (command_type): Change initializer.
        (gdbmshell_run): Initialize the .len member.

2021-08-27  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: new command "perror"; new options -t, -T; improve
        timing output

        * doc/gdbm.texi: Document the perror command.
        * src/gdbmshell.c: New command: perror.
        (run_command): In timing mode, print also user and system CPU
        times. Print traces on stderr.
        * src/gdbmtool.c: New options: -t (--trace) and -T (--timing).

2021-08-17  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: optionally print command trace (controlled by the
        "trace" variable)

        * src/gdbmshell.c (run_command): Print command trace if
        requested. Prefix timing info with the name of the command.
        * src/var.c: New variable: trace.

2021-08-17  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: optionally print real execution time at the end of
        each command

        * src/gdbmshell.c (run_command): Print real execution time, if 
        the "timing" variable is set.
        * src/var.c: New boolean variable: timing

2021-08-16  Sergey Poznyakoff  <gray@gnu.org>

        run_command: use error code from begin


2021-08-16  Sergey Poznyakoff  <gray@gnu.org>

        Allow for [+-]all in the errormask value


2021-08-16  Sergey Poznyakoff  <gray@gnu.org>

        New gdbmtool variables: errorexit and errormask.

        Boolean errorexit controls whether script terminates upon first 
        erroneous return from run_command or its derivatives.  The
        variable can be set only in non-interactive mode.

        errormask is a comma-delimited list of GDBM error codes that are 
        masked, i.e. that won't trigger a diagnostic message if they
        occur.
        * src/gdbmshell.c (all handlers): Return integer value
        indicating success (0) or failure (!0).
        * src/gdbmtool.h (input_context_drain): New function.
        (run_last_command): Return integer.
        * src/gram.y: abort if run_command returns error and "errorexit"
        is set.
        * src/input-argv.c (instream_argv_read): Bugfix.
        * src/lex.l (input_context_drain): New function.
        * src/var.c: New variables: errorexit and errormask.

2021-09-03  Sergey Poznyakoff  <gray@gnu.org>

        Add gdbmshell.c to POTFILES.in


2021-09-02  Sergey Poznyakoff  <gray@gnu.org>

        Version 1.21 released


2021-08-27  Sergey Poznyakoff  <gray@gnu.org>

        Version 1.21


2021-08-18  Sergey Poznyakoff  <gray@gnu.org>

        Minor fix

        * src/input-argv.c ((instream_argv_read): Fix escaping of
        special characters.

2021-08-13  Sergey Poznyakoff  <gray@gnu.org>

        Revise gdbmtool error messages

        * src/gdbmshell.c: Revise error messages.  Use dberror where 
        appropriate.
        * src/gdbmtool.h (dberror): New proto.
        * src/gram.y (dberror): New function.

2021-08-13  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: always provide stdin stream

        * src/Makefile.am (libgdbmapp_a_SOURCES): Add input-std.c
        * src/gdbmshell.c (input_history_begin): Improve diagnostic
        message.
        * src/gdbmtool.c (instream_default_create): New define.
        (gdbmtool_init): Use instream_default_create.
        * src/gdbmtool.h [WITH_READLINE] (instream_readline_create_: New
        proto.
        (input_stream_name): New proto.
        * src/input-rl.c (instream_stdin_create): Rename to
        instream_readline_create. Fall back to instream_stdin_create if
        stdin is not connected to a tty.
        * src/lex.l (input_stream_name): New function.

2021-08-13  Sergey Poznyakoff  <gray@gnu.org>

        Re-implement input history handling to minimize linking
        requirements

        Applications using gbdmshell don't need to link with
        libreadline, unless they use instream_stdin_create with readline
        support.

        * src/gdbmshell.c (input_history_begin)
        (input_history_handler): New functions.
        (gdbmshell_run): Remove calls to input_init()/input_done().
        * src/gdbmtool.h (instream): New fields: in_history_size, 
        in_history_get.
        (input_init,input_done): Remove.
        (instream_history_size,instream_history_get): New functions.
        (input_history_handler,input_history_begin): Remove.
        * src/input-rl.c: Incorporate history handling into the stream 
        itself.
        * src/input-std.c (input_init,input_done): Remove placeholders.
        * src/lex.l (input_history_size,input_history_get): New
        functions.

2021-08-12  Sergey Poznyakoff  <gray@gnu.org>

        Update docs

        * NEWS: Document changes.
        * doc/gdbm.texi: Document new variables.

2021-08-12  Sergey Poznyakoff  <gray@gnu.org>

        Fix NULL dereference in gdbmshell.  Undefine "fd" upon closing
        the database.


2021-08-12  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: setting database option affects the current database

        * src/gdbmshell.c (gdbmshell_setopt): New function.
        * src/gdbmtool.h (gdbmshell_setopt): New proto.
        * src/var.c: Provide set hooks for: cachesize, coalesce, and
        centfree.

2021-08-12  Sergey Poznyakoff  <gray@gnu.org>

        gdbmshell: get rid of remaining globals

        Use gdbmshell variables instead

        * src/gdbmshell.c (file_name, file_descr)
        (open_mode, open_format): Remove globals.
        (opendb,checkdb)
        (open_handler,import_handler)
        (status_handler): Use variables instead of globals.
        (command_tab): Mark the "open" parameter as optional.
        * src/gdbmtool.c (gdbmtool_init): Use variables instead of
        globals.
        * src/gdbmtool.h (file_name, file_descr)
        (open_mode, open_format): Remove globals.
        * src/lex.l: Use variables instead of globals.
        * src/var.c (variable): Rename hook to sethook. New field:
        typeconv.
        (vartab): New variables: "filename", "fd".
        (variable_get): Use typeconv if provided.
        * tests/gdbmtool/base.exp: Fix expected output.
        * tests/gdbmtool00.at: Likewise.
        * tests/gdbmtool01.at: Likewise.

2021-08-11  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: bugfixes

        * src/gdbmshell.c (datum_free): New function.  Use it whenever a 
        datum's dptr needs to be freed.
        (gdbmshell_run): Initialize last_cmd and last_args at the start 
        and free last_args before returning.
        * src/util.c (vgetyn): Copy ap to a temporary va_list

2021-08-11  Sergey Poznyakoff  <gray@gnu.org>

        Fix duplicated mmap in gdbm_recover

        * src/recover.c (_gdbm_finish_transfer): Reuse memory mapping 
        from the intermediate dbm structure.

2021-08-11  Sergey Poznyakoff  <gray@gnu.org>

        Minor fix

        * src/gdbmshell.c (opendb): Force GDBM_CLOERROR when calling
        gdbm_fd_open.

2021-08-11  Sergey Poznyakoff  <gray@gnu.org>

        Minor change in argv stream

        * src/input-argv.c (instream_argv_read): Don't treat =
        specially.

2021-08-11  Sergey Poznyakoff  <gray@gnu.org>

        Fix memory leaks in gdbm_fd_open

        * src/gdbmopen.c (gdbm_fd_open): Close the database before
        returning on error.

2021-08-10  Sergey Poznyakoff  <gray@gnu.org>

        Move gdbmtool shell functions to the library.

        * src/Makefile.am (libgdbmapp_a_SOURCES): Move gdbm shell 
        support to the library.
        * src/gdbmtool.c: Move shell support to another file.
        * src/gdbmtool.h (file_descr): New extern.
        (gdbmshell, gdbmshell_run)
        (variables_init, variables_free): New functions.
        * src/gdbmtool.supp: New file.
        * src/var.c (VAR_IS_SET): Change definition.
        (variable): New member: init.
        (variable_set): Change meaning of VARF_INIT.
        (variables_free,variables_init): New protos.
        * src/gdbmtool.c: New file.

2021-08-10  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: separate command parameters and environment


2021-08-10  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: rewrite handler parameter functions; fix memory leaks

        * src/input-null.c: New file.
        * src/Makefile.am: Add input-null.c
        * src/mem.c (e2nrealloc): New function.
        * src/gdbmapp.h (e2nrealloc): New proto.
        * src/gdbmtool.c (quit_handler): Exit from parser instead of 
        exiting from the program.
        (param): Remove global.
        (param_expand,param_push_arg,param_free): New functions for 
        handling parameters.
        (param_free_argv): Take a single argument.  Clear all parameters
        up to argc.
        (run_command): Rewrite parameter handling using new functions.
        (main): Call input_init() after the input stream has been set 
        up. Call yylex_destroy when finished.
        * src/gdbmtool.h (instream_null_create): New proto.
        (handler_param): Change type of argc to size_t.  New field 
        argmax.
        (HANDLER_PARAM_INITIALIZER): New define.
        (yylex_destroy): New proto.
        * src/input-rl.c (history_file_name): New static.
        (get_history_file_name): Initialize history_file_name.
        (input_init): Initialize input history only in interactive mode.
        (input_done): Free input history only in interactive mode.

2021-08-10  Sergey Poznyakoff  <gray@gnu.org>

        Bugfixes

        * src/gdbmdefs.h (SAVE_ERRNO): Preserve both gdbm_errno and
        errno.
        * src/recover.c (_gdbm_finish_transfer): Transfer all cache
        fields
        (cache_mru was missing).

2021-08-10  Sergey Poznyakoff  <gray@gnu.org>

        Update gdbm.texi


2021-08-09  Sergey Poznyakoff  <gray@gnu.org>

        Update docs.  Rename some error codes.

        * doc/gdbm.texi: Update.
        * src/gdbm.h.in (GDBM_ILLEGAL_DATA): Rename to
        GDBM_MALFORMED_DATA.
        (GDBM_OPT_ILLEGAL): Rename to GDBM_OPT_BADVAL. All uses changed. 
        Old constants retained for backward compatibility.

2021-08-09  Sergey Poznyakoff  <gray@gnu.org>

        Make parseopt reentrant.

        * src/parseopt.c (parseopt_first): Initialize option tables to
        NULL.

2021-08-09  Sergey Poznyakoff  <gray@gnu.org>

        Version 1.20.91.  Minor changes in translatable strings.


2021-08-08  Sergey Poznyakoff  <gray@gnu.org>

        Document new gdbmtool options


2021-08-08  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: new option to open the database at a given file
        descriptor

        * src/gdbmtool.c (file_descr): New global.
        (closedb): Reset file_descr to -1.
        (opendb): Take second argument: file descriptor of the database
        file. Use gdbm_fd_open if it is > 0. New options: -d, -x
        * src/gdbmdefs.h: Fix comment.

2021-08-04  Sergey Poznyakoff  <gray@gnu.org>

        Fix the docs


2021-08-04  Sergey Poznyakoff  <gray@gnu.org>

        Fix representation of multibyte strings in gdbmtool output

        * datconv.c (f_stringz, f_string): Use multi-byte and wide 
        string functions to decide whether a character is printable or 
        not.

2021-08-04  Sergey Poznyakoff  <gray@gnu.org>

        Fix the representation of octal escapes in gdbmtool output

        * src/datconv.c (f_stringz, f_string): Use unsigned char *.

2021-08-03  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: fix help output representation


2021-08-03  Sergey Poznyakoff  <gray@gnu.org>

        New macro: ARRAY_SIZE


2021-08-03  Sergey Poznyakoff  <gray@gnu.org>

        gdbmtool: control the format in which new databases are created

        * src/gdbmload.c (_gdbm_str2fmt): New function.
        * src/proto.h (_gdbm_str2fmt): New proto.
        * src/gdbmtool.c (open_format): New global variable.
        (opendb): Add open_format to gdbm_open flags
        * src/gdbmtool.h (open_format): New extern.
        * src/var.c: Handle the "format" variable.
        * doc/gdbm.texi: Document the changes.

2021-08-03  Sergey Poznyakoff  <gray@gnu.org>

        Preserve the database format across dump/restore

        * src/gdbmdump.c (_gdbm_dump_ascii): New parameter "format"
        holds the format of the original database. Set version number to
        1.1
        * src/gdbmload.c (_gdbm_load_file): Handle the "format"
        parameter.

2021-08-03  Sergey Poznyakoff  <gray@gnu.org>

        Fix typos


2021-08-02  Sergey Poznyakoff  <gray@gnu.org>

        Various fixes

        * doc/gdbm.texi: Document manual crash recovery procedure. 
        Document the gdbmtool "shell" command. Fix chapter headings
        (remove final point). Replace headings with sections.
        * src/gdbmopen.c (gdbm_header_avail): Remove const qualifier
        from 1st argument
        * src/proto.h (gdbm_file_sync): New proto.
        * src/gdbmsync.c (gdbm_file_sync): Moved from proto.h.
        (gdbm_sync): Call _gdbm_end_update to be sure all changes are
        written to disk.
        * src/gdbmtool.c: Implement the shell command.
        (command_lookup): Fix name prefix comparison.
        * src/gram.y: New token T_SHELL.
        * src/lex.l: Sub-lexers for shell arguments.

2021-08-02  Sergey Poznyakoff  <gray@gnu.org>

        Fix gdbm_recover

        * src/recover.c (_gdbm_finish_transfer): Close snapshot
        descriptors, if any. Restore xheader, avail, and avail_size
        members.

2021-08-02  Sergey Poznyakoff  <gray@gnu.org>

        Fix numsync comparison

        * src/gdbmsync.c (gdbm_numsync_cmp): Properly handle unsigned
        overflow.
        * tests/gtload.c: New option -numsync.

2021-08-01  Sergey Poznyakoff  <gray@gnu.org>

        New gdbmtool command: snapshot

        * src/gdbmtool.c: New command: "snapshot"
        * doc/gdbm.texi: Document the snapshot command (gdbmtool).
        * doc/gdbmtool.1: Likewise.
        * src/gdbmsync.c: Fix a comment.

2021-08-01  Sergey Poznyakoff  <gray@gnu.org>

        Fix a typo.

        * src/gdbmsync.c (stat_snapshot): Use EACCES instead of EACCESS.

2021-07-31  Sergey Poznyakoff  <gray@gnu.org>

        Changes in the docs.  Minor improvements in
        gdbm_latest_snapshot.

        * doc/Makefile.am: Export htmlxref.cnf
        * doc/htmlxref.cnf: New file.
        * doc/gdbm.texi: Improve crash-tolerance descriptions.
        * src/gdbmsync.c (stat_snapshot): Set errno = EACCES if access
        bits of the snapshot stat are wrong.
        (gdbm_latest_snapshot): Don't touch ret if returning 
        GDBM_SNAPSHOT_SUSPICIOUS.

2021-07-31  Sergey Poznyakoff  <gray@gnu.org>

        Update the documentation


2021-07-30  Sergey Poznyakoff  <gray@gnu.org>

        Minor fix

        * src/gdbmsync.c (gdbm_numsync_cmp): Fix signedness of na, nb

2021-07-30  Sergey Poznyakoff  <gray@gnu.org>

        Minor change

        * src/gdbmdefs.h (GDBM_HEADER_AVAIL_SIZE): Removed.
        (GDBM_HEADER_AVAIL_OFFSET): New macro.
        * src/avail.c: Use dbf->avail_size and GDBM_HEADER_AVAIL_OFFSET.
        * src/gdbmopen.c: Likewise.

2021-07-30  Sergey Poznyakoff  <gray@gnu.org>

        Avoid eventual alignment problems

        * src/gdbm.magic: Handle extended GDBM format.
        * src/gdbmdefs.h (gdbm_file_standard_header)
        (gdbm_file_extended_header): New data types.
        * src/gdbmopen.c (gdbm_header_avail): Use casts to 
        gdbm_file_*_header to obtain data offsets.
        * src/gdbmtool.c (print_header_handler): Improve formatting.

2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Minor fix

        * src/gdbmsync.c (gdbm_latest_snapshot): Restore missing break.

2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Various bugfixes.


2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Improve _gdbm_snapshot

        * src/gdbmsync.c (_gdbm_snapshot): Before returning, chmod
        previous snapshot write-only.  Change proposed by Terence Kelly
        on July 23, 2021.

2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Mark GDBM_MAGIC constants as unsigned


2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Implement snapshot selection by numsync.

        * src/gdbm.h.in (GDBM_SNAPSHOT_SUSPICIOUS): New return code.
        * src/gdbmsync.c (gdbm_latest_snapshot): Take into account
        numsync when choosing between the two snapshots.
        (gdbm_sync): Increase numsync.

2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Initialize dptr to non-null storage even if size is 0.


2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Test conversion to extended format.

        * src/gdbmdefs.h (gdbm_ext_header): Add new field: version. Pad
        to 8 integers.
        * tests/gtconv.c: New auxiliary program.
        * tests/conv.at: New test.
        * tests/Makefile.am: Add new tests.
        * tests/testsuite.at: Likewise.

2021-07-29  Sergey Poznyakoff  <gray@gnu.org>

        Simplify gdbm_file_header

        * src/gdbm.h.in (gdbm_convert): New proto.
        * src/gdbmdefs.h: Define GDBM_MAGIC and GDBM_NUMSYNC_MAGIC here.
        (gdbm_file_header): Remove the union.
        * src/gdbmopen.c (gdbm_header_avail): Return pointer to 
        gdbm_ext_header in 4th argument.
        (validate_header_std,validate_header_numsync): Remove avail size 
        verification.  It will be checked later in gdbm_fd_open.
        (gdbm_fd_open): Check avail table size.
        (gdbm_convert): New function.
        * src/avail.c (gdbm_avail_traverse): Change the avail table
        offset calculation.
        * src/gdbmtool.c: New commands: upgrade, downgrade and sync. Fix
        output of the "header" command.

2021-07-28  Sergey Poznyakoff  <gray@gnu.org>

        Introduce extended header.

        * src/gdbm.h.in (GDBM_NUMSYNC): New flag for gdbm_open
        * src/gdbmdefs.h (gdbm_ext_header): New struct.
        (gdbm_file_header): New member of the union v: gdbm_ext_header.
        * src/gdbmopen.c
        (gdbm_header_avail): New function.
        (validate_header): Use dbf->avail.
        (gdbm_fd_open): Read both database types.  Create
        GDBM_NUMSYNC_MAGIC database if given the GDBM_MAGIC flag.

2021-07-28  Sergey Poznyakoff  <gray@gnu.org>

        Prepare structs gdbm_file_header and gdbm_file_info for changes.

        * src/gdbmconst.h (GDBM_NUMSYNC_MAGIC32)
        (GDBM_NUMSYNC_MAGIC64)
        (GDBM_NUMSYNC_MAGIC32_SWAP)
        (GDBM_NUMSYNC_MAGIC64_SWAP): New constants.
        * src/gdbmdefs.h (gdbm_file_header): Move avail to a union in 
        anticipation of further changes.
        (gdbm_file_info) <avail, avail_size>: New members.
        (GDBM_HEADER_AVAIL_SIZE): Redefine.
        * src/gdbmopen.c (GDBM_NUMSYNC_MAGIC): New define.
        (validate_header_std)
        (validate_header_numsync): New functions.
        (validate_header): Use one of these depending on the magic
        number.
        (gdbm_fd_open): Initialize new members of gdbm_file_info.

        * src/avail.c: Use the GDBM_FILE avail pointer.
        * src/falloc.c: Likewise.
        * src/gdbmtool.c: Likewise.

2021-07-22  Sergey Poznyakoff  <gray@gnu.org>

        Fix gdbm_avail_traverse()

        * src/avail.c (gdbm_avail_traverse): Apply callback to the
        header avail block as well.
        * src/gdbmtool.c (avail_list_print): Don't print header block
        separately.

2021-06-27  Sergey Poznyakoff  <gray@gnu.org>

        Improve fsync_to_root.  Other minor fixes.

        * src/gdbm.h.in (gdbm_latest_status): Rename to 
        gdbm_latest_snapshot_status.
        * src/gdbmsync.c (fsync_to_root): Start synching from the
        snapshot itself.  Take care to open it write-only.
        (gdbm_latest_snapshot): Reorganize to improve readability.
        [!GDBM_FAILURE_ATOMIC] gdbm_latest_snapshot: Fix signature.

2021-06-27  Sergey Poznyakoff  <gray@gnu.org>

        Bugfix

        * src/gdbmsync.c (stat_snapshot): Fix typo (missing
        parentheses).

2021-06-26  Sergey Poznyakoff  <Sergey Poznyakoff>

        Bugfixes in crash tolerance code.

        * doc/gdbm.texi: Document GDBM_SNAPSHOT_BAD
        * src/gdbm.h.in (GDBM_SNAPSHOT_BAD): New constant.
        * src/gdbmsync.c (fsync_to_root): Rewrite.  Use pointer to
        traverse the pathname in the reverse direction.  Fsync the root
        directory as well.
        (gdbm_failure_atomic): Create both snapshots in user write-only
        mode.
        (stat_snapshot): Fail if the file is neither readable nor
        writable.
        (gdbm_latest_snapshot): Fail if neither file is readable. Fix
        selection of the snapshot by mtime: prefer the latest one.
        [!GDBM_FAILURE_ATOMIC]: Provide the placeholder for 
        gdbm_latest_snapshot.

2021-06-26  Sergey Poznyakoff  <gray@gnu.org>

        Document new error codes


2021-06-26  Sergey Poznyakoff  <gray@gnu.org>

        Document crash tolerance API


2021-06-25  Sergey Poznyakoff  <Sergey Poznyakoff>

        Crash-tolerance based on the patch from Terence Kelly


2021-07-07  Sergey Poznyakoff  <gray@gnu.org>

        Fix https://puszcza.gnu.org.ua/bugs/?515

        * src/gdbm.h.in: Include sys/types.h

2021-06-17  Sergey Poznyakoff  <gray@gnu.org>

        Version 1.20


2021-06-14  Sergey Poznyakoff  <gray@gnu.org>

        Enable pre-reading the memory mapped regions on request.

        The commit 4fb2326a4a introduced pre-reading of memory mapped 
        regions.  While speeding up searches, it has a negative impact 
        on write operatons, since every remapping effectively re-reads 
        the entire database.  See
        https://github.com/Perl/perl5/issues/18884 for details.

        * NEWS: Document changes.
        * doc/gdbm.texi: Document the GDBM_PREREAD flag.
        * src/gdbm.h.in (GDBM_PREREAD): New flag.
        * src/gdbmdefs.h (gdbm_file_info): New member: mmap_preread.
        * src/gdbmopen.c (gdbm_fd_open): Set mmap_preread if requested.
        * src/gdbmsetopt.c (setopt_gdbm_getflags): Report GDBM_PREREAD 
        flag, if dbf->mmap_preread is set.
        * src/mmap.c (_gdbm_internal_remap): Use pre-fault reading only 
        if dbf->mmap_preread is set.

2021-04-23  Sergey Poznyakoff  <gray@gnu.org>

        Fix possible integer overflows and cases of undefined behavior.

        * src/avail.c (avail_comp): Prevent integer overflow.
        (gdbm_avail_table_valid_p): Likewise.
        * src/gdbmdefs.h (off_t_sum_ok): Change return type. Return
        false if any argument is negative.
        * src/gdbmopen.c (compute_directory_size): Prevent integer
        overflow.
        * src/hash.c (_gdbm_hash): Treat dptr elements as unsigned 
        integers.

2021-03-22  Sergey Poznyakoff  <gray@gnu.org>

        Fix minor memory leaks in gdbmtool

        * src/datconv.c (dsegm_list_free): Free name if necessary.
        * src/gram.y (defid): Free $1 when no longer needed.

2021-03-21  Sergey Poznyakoff  <gray@gnu.org>

        Merge branch 'newcache': Bucket cache rewritten from scratch.


2021-03-21  Sergey Poznyakoff  <gray@gnu.org>

        Enable automatic cache size by default.

        This provides for the optimal performance.

        Additional GDBM_XVERIFY flag can be used when opening the
        database to request extended database verification (entire avail
        stack will be checked).
        * src/bucket.c (cache_lookup): Handle cache_size ==
        GDBM_CACHE_AUTO.
        (_gdbm_cache_init): Likewise.
        * src/gdbm.h.in (GDBM_XVERIFY): New flag to gdbm_open.
        (GDBM_CACHE_AUTO): New constant. Define error constants within
        enum. Fix definition of GDBM_BAD_HASH_ENTRY.
        * src/gdbmclose.c: Fix misleading comment.
        * src/gdbmconst.h: Define DEFAULT_CACHESIZE to be
        GDBM_CACHE_AUTO.
        * src/gdbmopen.c (gdbm_fd_open): Call gdbm_avail_verify if the
        GDBM_XVERIFY flag is set.

        * doc/gdbm.texi: Update.
        * doc/gdbm.3: Update.

2021-03-20  Sergey Poznyakoff  <gray@gnu.org>

        More optimizations in cache tree

        * src/bucket.c (gdbm_dir_entry_valid_p): Inline
        (cache_lookup): Keep track of cache hits.
        (_gdbm_get_bucket): Check the cache_entry first.
        (gdbm_get_cache_stats): Change signature. Return the per-db 
        number of cache hits as well.
        * src/cachetree.c: Inline static functions.
        (_gdbm_cache_tree_lookup): Avoid extra level of indirection
        (nodeptr) at the expense of one additional comparison.
        * src/gdbm.h.in (gdbm_get_cache_stats): Change signature.
        * src/gdbmdefs.h (gdbm_file_info) <cache_hits>: New member.

2021-03-17  Sergey Poznyakoff  <gray@gnu.org>

        Fix memory leak in gdbmtool "next" command.

        * src/gdbmtool.c (nextkey_handler): Always free the previous key 
        buffer.

2021-03-17  Sergey Poznyakoff  <gray@gnu.org>

        Fix memory leak in gdbmtool "next" command.

        * src/gdbmtool.c (nextkey_handler): Always free the previous key 
        buffer.

2021-03-17  Sergey Poznyakoff  <gray@gnu.org>

        New functions for traversing the available space stack

        * src/Makefile.am: Add avail.c
        * src/avail.c: New file.
        * src/gdbm.h.in (gdbm_avail_verify): New proto.
        * src/gdbmdefs.h (GDBM_HEADER_AVAIL_SIZE): New macro.
        * src/gdbmopen.c (gdbm_avail_table_valid_p)
        (gdbm_avail_block_validate)
        (gdbm_bucket_avail_table_validate): Move to avail.c
        * src/gdbmtool.c (_gdbm_avail_list_size)
        (_gdbm_print_avail_list): Rewrite using gdbm_avail_traverse.
        * src/proto.h (gdbm_avail_traverse): New proto.
        * src/systems.h: Include stddef.h.

2021-03-17  Sergey Poznyakoff  <gray@gnu.org>
