From e0023883c6d2e6745a19e4b48e186ed156c1fca8 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 17:19:27 +0200 Subject: Adding upstream version 2.11.2. Signed-off-by: Daniel Baumann --- ChangeLog | 8271 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8271 insertions(+) create mode 100644 ChangeLog (limited to 'ChangeLog') diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..0c2ef79 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,8271 @@ +2023-01-08 Colin Watson + + Release man-db 2.11.2 + +2023-01-01 Colin Watson + + mandb: Check for stray cats even if the manpath is unchanged + + * src/mandb.c (mandb): Require the database file to be open before + calling `straycats`, but don't require `create_db` or + `update_db_wrapper` to have made any changes to it. + * src/tests/mandb-whatis-broken-link-changes: Update expected output. + * NEWS.md: Document this. + +2023-01-01 Colin Watson + + mandb: Fix crash when processing stray cats + + Regression introduced in man-db 2.11.0. Fixes Debian bug #1027487. + + * src/straycats.c (check_for_stray): Pass a basic trace list to + `store_descriptions`, since that's required as of commit + d3e4b5522ae8152f10db0bb98e6873c9cc17ed59. + * NEWS.md: Document this. + +2022-12-31 Colin Watson + + Pacify gcc -Wanalyzer-use-of-uninitialized-value + + It incorrectly thought that `outleft` could be uninitialized in some + cases. Restructure code slightly to simplify its analysis. + + * src/manconv.c (try_iconv): Initialize `outptr` in all branches of the + conditional beginning with `if (handle_iconv_errors)`. + +2022-12-31 Colin Watson + + Fix segfault when nroff is not installed + + * src/man.c (try_section): Only free the `names` list if it is non-NULL + due to `NROFF_MISSING` being defined, and return early if options are + set such that cat files cannot be used either. + * NEWS.md: Document this. + +2022-12-31 Colin Watson + + Fix compile and test failures when troff is not groff + + Fixes https://gitlab.com/man-db/man-db/-/issues/12. + + * src/man.c (ONLY_TROFF_IS_GROFF): Only define if `HAS_TROFF` is + defined. + (init_html_pager): Only define if `TROFF_IS_GROFF` is defined. + (format_display): Mark `man_file` as unused if `TROFF_IS_GROFF` is not + defined. + + * configure.ac: Substitute `troff_is_groff`. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Export `troff_is_groff`. + * src/tests/man-language-specific-requests: Adjust expected + language-specific requests if `troff_is_groff` is not `yes`. + + * NEWS.md: Document this. + +2022-11-29 Seong-ho Cho + + Update Korean manual page translation + + * man/po4a/po/ko.po: Update from Translation Project. + +2022-11-28 Yuri Kozlov + + Update Russian manual page translation + + * man/po4a/po/ru.po: Update from Translation Project. + +2022-11-15 Colin Watson + + Release man-db 2.11.1 + +2022-11-15 Colin Watson + + Tweak README for better readability + + * README.md: Add blank line for improved Markdown rendering. + +2022-11-14 Colin Watson + + web: Fix man.png width/height + + * web/index.html: Update width and height for man.png. + +2022-11-14 Colin Watson + + web: Update man(1) image + + * web/man.png: Replace with a fresh screenshot. + +2022-11-14 Colin Watson + + Link to project home page + + * README.md: Add home page link (https://man-db.gitlab.io/man-db/). + +2022-11-14 Colin Watson + + Add GitLab Pages site + + * .gitlab-ci.yml (stages): Add deploy. + (pages): New job. + * web/development.html, web/index.html, web/man.png, web/standard.css, + web/white.css: New files. + +2022-11-14 Colin Watson + + Transfer Git repository to new group + + * README.md, docs/HACKING.md, man/man1/apropos.man1, + man/man1/lexgrog.man1, man/man1/man-recode.man1, man/man1/man.man1, + man/man1/manconv.man1, man/man1/manpath.man1, man/man1/whatis.man1, + man/man1/zsoelim.man1, man/man5/manpath.man5, man/man8/accessdb.man8, + man/man8/catman.man8, man/man8/mandb.man8: Change GitLab URL to + https://gitlab.com/man-db/man-db. + * NEWS.md: Document this. + +2022-11-12 Colin Watson + + Remove unused include + + * src/manconv_client.c: Remove unused `#include "idpriv.h"`. + +2022-11-05 Colin Watson + + Fix distribution of Korean manual page translation + + Accidentally omitted from 8f12d39bbb6748a1257358269028ef919f9c92e6. + + * man/Makefile.am (DIST_SUBDIRS): Add ko. + +2022-11-05 Colin Watson + + Replace $ in page names rather than trying to escape it + + Jakub Wilk points out in Debian bug #1021951 that attempting to use the + `--use-backslash` option has a number of complications. Just replace + dollar signs with question marks instead. + + * include/manconfig.h (LESS_OPTS): Revert addition of `--use-backslash`. + * src/man.c: Replace `$` characters with `?` rather than trying to + escape them. + * NEWS.md: Document this. + +2022-11-05 Colin Watson + + Add Korean manual page translation + + * man/po4a/po/ko.po: New from Translation Project (thanks, Seong-ho + Cho). + * configure.ac (AC_CONFIG_FILES): Add man/ko/Makefile. + * man/LINGUAS.po4a: Add ko. + * man/Makefile.am (DIST_SUBDIRS): Add ko. + * man/ko/Makefile.am, man/ko/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/ko.po. + * man/po4a/po4a.cfg (po4a_langs): Add ko. + * man/THANKS: Update translator credit. + * .gitignore: Add man/ko/man1, man/ko/man5, and man/ko/man8. + +2022-10-28 Seong-ho Cho + + Add Korean translation + + * po/ko.po: New from Translation Project. + * po/LINGUAS: Add ko. + * man/THANKS: Add translator credit. + +2022-10-28 Sebastian Rasmussen + + Update Swedish manual page translation + + * man/po4a/po/sv.po: Update from Translation Project. + +2022-10-18 Colin Watson + + zsoelim_open_file: Fix use of uninitialized value + + In the case where `filename` has no directory part and does not contain + a dot, we could reach the decision of whether to emit a "can't open %s" + error message without initializing `decomp`. Noticed by `gcc -Og`. + + * src/zsoelim.l (zsoelim_open_file): Initialize `decomp` to NULL. + +2022-10-18 Colin Watson + + Recognize more Hungarian translations of the NAME section + + * src/lexgrog.l (hu_name): Handle the case where "É" or "é" is written + as "\('E" or "\('e". + * NEWS.md: Document this. + +2022-10-18 Colin Watson + + Sort whatis references below real pages more aggressively + + I think this makes more sense in most cases, and it definitely fixes + some observed odd behaviour. + + Fixes Debian bug #780235. + + * src/man.c (compare_candidates): Compare IDs before comparing sections. + * NEWS.md: Document this. + +2022-10-17 Colin Watson + + Silence error for empty mandir with missing catdir + + Fixes https://gitlab.com/cjwatson/man-db/-/issues/8. + + * src/check_mandirs.c (ensure_db_open): Don't call `gripe_rwopen_failed` + before returning false (since it only makes sense for one of the two + callers). + (testmandirs): Call `gripe_rwopen_failed` if `ensure_db_open` returns + false. + +2022-10-17 Colin Watson + + Add 3type to default section list + + This is used by the Linux man-pages package, and should be lower + priority than section 2. Suggested by Alejandro Colomar. + + Fixes https://gitlab.com/cjwatson/man-db/-/issues/5. + + * include/manconfig.h (STD_SECTIONS): Add `3type` between sections `2` + and `5`. + * m4/man-arg-sections.m4 (MAN_ARG_SECTIONS): Likewise. + * man/man5/manpath.man5 (FORMAT): Update documentation of SECTION. + * src/tests/man-exact-section-matches: Update default section order. + * src/man_db.conf.in (SECTION): Update documentation. + * NEWS.md: Document this. + +2022-10-17 Colin Watson + + Escape $ in page names when constructing less prompts + + Fixes Debian bug #1021951. + + * include/manconfig.h (LESS_OPTS): Add `--use-backslash`. + * src/man.c (escape_less): Also escape `$` characters. + * NEWS.md: Document this. + +2022-10-15 Colin Watson + + Release man-db 2.11.0 + +2022-10-13 Colin Watson + + ult_src: Fix possible NULL dereference + + `gcc -fanalyzer` noticed that `canonicalize_file_name` can return NULL, + therefore `find_include` could return NULL, and therefore it was + possible for `ult_src` to attempt to dereference NULL in the `stat + (base, &st)` call. Push more work down to `find_include` so that we can + consistently treat it as an error if it returns NULL. + + * src/ult_src.c (ult_softlink): Move error messages to ... + (gripe_canonicalize_failed): ... here (new function). + (find_include): Replace simple suffix globbing with `comp_file`, and use + this approach in both the relative-to-mantree and + relative-to-dirname-of-page cases; we previously only tried it in the + latter case. Call `gripe_canonicalize_failed` if the final + canonicalization step fails; print a "can't resolve %s" error if we + can't even find anything to canonicalize. + (ult_src): Remove `comp_file` processing, now done by `find_include`. + * src/ult_src.h (gripe_canonicalize_failed): Add prototype. + * src/straycats.c (check_for_stray): Use `gripe_canonicalize_failed`. + +2022-10-11 Colin Watson + + Fix regression in preprocessor string handling + + We need to stop looking for characters that identify preprocessors after + the first space or dash, as otherwise encoding declarations of the kind + specified in man-recode(1) may break. + + * src/man.c (make_roff_command): Only consider the part of the + preprocessor string up to the first space or dash, if any. + +2022-10-11 Colin Watson + + match_in_directory: Split into multiple functions + + `match_in_directory` had two almost entirely disjoint code paths, one + for regex patterns and one for wildcard patterns; but its structure made + it difficult for `gcc -fanalyzer` to understand that, and it was a bit + unclear for humans too. Split it up for clarity. + + * src/globbing.c (match_in_directory): Split out the + regex/wildcard-handling parts to ... + (match_regex_in_directory, match_wildcard_in_directory): ... here, + respectively. + +2022-10-11 Colin Watson + + Assert that another xasprintf call returns non-NULL + + As with commit a22f140354c80a7c5c52c4a413f1c929e105a24c, `gcc + -fanalyzer` notices that `xasprintf` can return NULL in some situations. + I believe those situations would all amount to programming errors here, + so add an assert. + + * src/mandb.c (main): Assert that `xasprintf` returns non-NULL. + +2022-10-09 Colin Watson + + Fix error message + + * src/straycats.c (check_for_stray): If canonicalizing `catdir` returns + NULL, then substitute `catdir` into the "warning: %s is a dangling + symlink" message, not `fullpath` (which at this point must be NULL). + +2022-10-08 Colin Watson + + Convert many more ints to bools + + I don't expect this to make a significant runtime difference, but it + makes some things easier to analyse visually. + + * lib/cleanup.c (do_cleanups_sigsafe): Change `in_sighandler` parameter + type to bool. Update all callers. + (push_cleanup): Change `handler_installed` local variable type to bool. + * lib/cleanup.h (do_cleanups_sigsafe): Update prototype. + * lib/compression.c (comp_info): Change `want_stem` parameter type to + bool. Update all callers. + * lib/compression.h (comp_info): Update prototype. + * lib/sandbox.c (seccomp_filter_unavailable): Change type to bool. + Update all references. + (make_seccomp_filter): Change `permissive` parameter type to bool. + Update all callers. + (_sandbox_load): Likewise. + * lib/util.c (remove_directory): Change `recurse` parameter type to + bool. Update all callers. + * lib/util.h (remove_directory): Update prototype. + * libdb/db_gdbm.c (opening): Change type to bool. Update all + references. + * libdb/db_store.c (compare_ids): Change `promote_links` parameter type + to bool. Update all callers. + * libdb/db_storage.h (compare_ids): Update prototype. + * src/catman.c (parse_for_sec): Change `message` local variable type to + bool. + (check_access): Change return type to bool. + (purge_whatis): Change `cat` parameter type to bool. Update all + callers. + (check_multi_key): Change return type to bool. + * src/descriptions.c (parse_descriptions): Change `seen_base` local + variable type to bool. + * src/globbing.c (look_for_file): Change `cat` parameter type to bool. + Update all callers. + * src/globbing.h (look_for_file): Update prototype. + * src/lexgrog.l (fill_mode, waiting_for_quote): Change types to bool. + Update all references. + * src/man.c (skip, created_tmp_cat): Change types to bool. Update all + references. + (run_mandb): Change `create` parameter type to bool. Update all + callers. + (squeeze_blank_lines): Change `in_blank_line` and `got_blank_line` local + variable types to bool. + (display): Change `format` and `printed` local variable types to bool. + (convert_name): Change `fsstnd` parameter type to bool. Update all + callers. + (add_candidate): Change `dupcand` local variable type to bool. + (main): Change `maybe_section` local variable type to bool. + * src/manp.c (add_sections): Change `user` parameter type to bool. + Update all callers. + (add_def): Likewise. + (add_mandb_map): Likewise. + (add_to_dirlist): Likewise. + (read_config_file): Change `done` local variable type to bool. + (get_manpath_from_path): Change `mandatory` parameter type to bool. + Update all callers. + * src/manp.h (get_manpath_from_path): Update prototype. + * src/whatis.c (do_apropos): Change `matched` local variable type to + bool. + * src/zsoelim.l (no_newline): Change type to bool. Update all + references. + (zsoelim_open_file): Change return type to true. + * src/zsoelim.h (zsoelim_open_file): Update prototype. + +2022-10-07 Colin Watson + + Remove unused variable + + * src/man.c (found_a_stray): Remove; it was set but no longer used. + (display_database): Remove setting of `found_a_stray`. + +2022-10-07 Colin Watson + + Add some more pure function attributes + + * lib/encodings.c (compatible_encodings): Mark as pure. + * src/man.c (is_section): Likewise. + * src/manp.c (get_config, get_def, get_def_user, is_global_mandir): + Likewise. + +2022-10-07 Colin Watson + + Default to --disable-cache-owner on systems without getuid + + * m4/man-arg-cache-owner.m4 (MAN_ARG_CACHE_OWNER): If the system doesn't + have `getuid`, force cache files to have unconstrained cache ownership, + and issue a warning if `--enable-cache-owner` was given. + +2022-10-07 Colin Watson + + Fix installation on systems with non-empty EXEEXT + + * src/Makefile.am (install-exec-hook): Add `$(EXEEXT)` to + `chown`/`chmod` calls. + * NEWS.md: Document MinGW portability work. + +2022-10-07 Colin Watson + + Fix build on systems without SIGPIPE + + * bootstrap.conf (gnulib_modules): Add sigpipe. + * src/mandb.c (main): Drop `#ifdef SIGPIPE` guards, as Gnulib now + ensures that it's defined. + +2022-10-07 Colin Watson + + Fix build on systems without getuid + + * lib/tempfile.c (running_setid): New function; always returns false if + the system doesn't have `getuid`, since in that case we won't have been + able to drop privileges either. + +2022-10-07 Colin Watson + + Fix build on systems without + + * lib/security.h: Only include `` if `MAN_OWNER` is defined. + +2022-10-07 Colin Watson + + Fix build on systems without + + * bootstrap.conf (gnulib_modules): Add termios. + * src/man.c (get_term): Replace with a no-op stub if the system has no + `` (Gnulib tests for it and can replace some functions, but + its replacement isn't sufficient here). + +2022-10-07 Colin Watson + + Fix build on systems without SIGHUP + + * lib/cleanup.c (trap_abnormal_exits, untrap_abnormal_exits): Guard uses + of `SIGHUP` with an `#ifdef`. + +2022-10-06 Colin Watson + + Run preprocessors in the correct order + + We have no particular reason to trust the order of filters in a + preprocessor string specified in a page; it's easy for authors to get + this wrong by accident. Do as groff(1) does and run them in a + canonicalized order. + + Fixes Debian bug #1012078. + + * src/man.c (add_filter): New function, split out from + `make_roff_command`. + (make_roff_command): Iterate through possible preprocessors and add each + one depending on whether it's present in the preprocessor string, rather + than iterating through the preprocessor string and acting on each of its + characters. Turn several `int` variables into `bool` variables in + passing. + * NEWS.md: Document this. + +2022-10-06 Emir SARI + + Update Turkish translation + + * po/tr.po: Update from Translation Project. + +2022-10-06 Emir SARI + + Update Turkish manual page translation + + * man/po4a/po/tr.po: Update from Translation Project. + +2022-10-06 Boyuan Yang <073plan@gmail.com> + + Update Simplified Chinese manual page translation + + * man/po4a/po/zh_CN.po: Update from Translation Project. + +2022-10-06 Remus-Gabriel Chelu + + Update Romanian manual page translation + + * man/po4a/po/ro.po: Update from Translation Project. + +2022-10-06 Remus-Gabriel Chelu + + Update Romanian translation + + * po/ro.po: Update from Translation Project. + +2022-10-03 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2022-10-02 Colin Watson + + Release man-db 2.11.0-pre1 + +2022-10-02 Colin Watson + + Bump next version to 2.11.0 + + There are quite a few substantial changes here that I think justify an + updated minor number. + + * NEWS.md: Bump to 2.11.0. + +2022-10-02 Colin Watson + + Update translation files + + * po/man-db.pot, po/*.po: Update. + +2022-10-02 Colin Watson + + Fix harmless but incorrect cast + + * libdb/db_xdbm.c (man_xdbm_firstkey): Cast `gl_list_free` to + `gl_mapvalue_dispose_fn`, not `gl_listelement_dispose_fn`. (These were + in practice identical but are semantically distinct.) + +2022-10-02 Colin Watson + + Reformat option declarations using macros + + The previous tabular presentation had some advantages, but it only + looked reasonable in wide terminals, was often quite cumbersome to + maintain, and played poorly with `clang-format`. + + * include/manconfig.h (OPT, OPT_FULL, OPT_ALIAS, OPT_HIDDEN, + OPT_GROUP_HEADER, OPT_HELP_COMPAT): New macros. + * src/accessdb.c (options): Rewrite using `OPT*` macros. + * src/catman.c (options): Likewise. + * src/globbing_test.c (options): Likewise. + * src/lexgrog_test.c (options): Likewise. + * src/man-recode.c (options): Likewise. + * src/man.c (options): Likewise. + * src/manconv_main.c (options): Likewise. + * src/mandb.c (options): Likewise. + * src/manpath.c (options): Likewise. + * src/whatis.c (options): Likewise. + * src/zsoelim_main.c (options): Likewise. + +2022-10-02 Colin Watson + + Add CI checks for Berkeley DB and NDBM + + * .gitlab-ci.yml (build-berkeley-db, build-ndbm): New jobs. + +2022-10-02 Colin Watson + + mandb: Fully reorganize databases + + This allows us to produce bitwise-identical databases regardless of the + order in which pages were scanned (at least with GDBM). + `gdbm_reorganize` isn't enough for this, probably because entries end up + in different positions in hash buckets depending on insertion order; but + reading in the entire database and writing it back out in sorted order + seems to do the job with negligible cost. + + Fixes Debian bug #1010957. + + * src/mandb.c (reorganize): New function: read all the items from a + database in sorted order and write them back out. + (mandb): Stop calling `MYDBM_REORG`, which saved space after deletions + but didn't help with reproducibility. + (process_manpath): Call `reorganize` if any changes were made to a + database. + * libdb/mydbm.h (MYDBM_REORG): Remove macro. + * NEWS.md: Document this. + +2022-10-02 Colin Watson + + mandb: Rearrange database path operations + + Moving these into "methods" of `struct dbpaths` makes the control flow + clearer by avoiding lots of inlined `#ifdef`s. + + I fixed a possible crash in `mandb -f` in the process, exposed by the + clearer control flow. + + * src/mandb.c (dbpaths_init, dbpaths_copy_to_tmp, dbpaths_remove_tmp): + New functions. + (finish_up): Rename to ... + (dbpaths_rename_from_tmp): ... this. + (do_chown): Rename to ... + (dbpaths_chown_if_possible): ... this. + (cleanup_sigsafe): Rename to ... + (dbpaths_unlink_tmp): ... this, and take a `struct dbpaths *` argument + rather than `void *`. + (cleanup): Rename to ... + (dbpaths_free_elements): ... this, and take a `struct dbpaths *` + argument rather than `void *`. + (mandb, process_manpath): Use new `dbpaths_*` functions. Only call + `dbpaths_rename_from_tmp` if `run_mandb` is set (in practice this was + always true anyway but this makes it clearer). Only call + `dbpaths_chown_if_possible` if `run_mandb` is set and + `dbpaths_rename_from_tmp` was called (this may have caused a crash in + some edge cases involving `mandb -f`). + +2022-10-01 Colin Watson + + test_manfile: Remove "already exists" check + + This produced inconsistent results in some unusual cases. For example, + if `/usr/share/man/man5/inetd.conf.5.gz` was a symlink to + `/usr/share/man/man8/inetd.8.gz` and had `NAME` entries for both `inetd` + and `inetd.conf`, then if `inetd.8.gz` was scanned first we would + include a `WHATIS_MAN` entry in section 8 for `inetd.conf`, while if + `inetd.conf.5.gz` was scanned first we'd skip that due to hitting the + already-exists check when scanning `inetd.8.gz`. + + This was originally a performance optimization. Now that we cache the + results of `ult_src` and `find_name`, this optimization no longer helps + us much, so it can go. + + * src/check_mandirs.c (test_manfile): Don't return early if the page + already exists with matching details. + * NEWS.md: Document this. + +2022-10-01 Colin Watson + + Further improve name selection for whatis targets + + In commit 9aff3c30b0, I used the rule "first name in the trace out of + those that have the best ID". However, a better rule turns out to be to + pick the last entry in the trace that has the same section and extension + as the starting page. This is already guaranteed to have at least as + good an ID as the starting page, and since whatis pointers don't include + the target section and extension we need to ensure that they don't cross + sections/extensions; otherwise we just end up with database entries that + man(1) refuses to use, which isn't particularly useful. + + * src/descriptions_store.c (store_descriptions): Parse and cache all the + filenames in the trace at the start. Use the last entry in the trace + with the same section/extension as the starting page as the pointer for + `WHATIS_*` entries. + +2022-10-01 Colin Watson + + test_manfile: Stop caching ult_src traces + + Now that `test_manfile` always calls `ult_src` before adding database + entries, there's no need for it to cache the resulting traces, and doing + so had some confusing consequences since `store_descriptions` could end + up seeing cached traces that didn't include the initial path. + + * src/check_mandirs.c (struct whatis): Remove `trace` element. + (whatis_free): Stop freeing `whatis->trace`. + (test_manfile): Stop caching `ult->trace`; pass it directly to + `store_descriptions` instead. + +2022-10-01 Colin Watson + + Restructure ult_src to add caching + + * src/ult_src.c (struct ult_key): New structure. + (ult_key_new, ult_key_equals, ult_key_hash, ult_key_free, ult_value_new, + ult_value_free): New functions. + (ult_cache): New map. + (ult_src): Instead of returning a path as a string and taking `trace` as + an output parameter, return a `struct ult_value *` containing both path + and trace. Cache the return value in a hash map (indexed by a composite + key consisting of `name` and `flags`), and return cached values where + possible rather than repeating the same work. Update all callers to + reflect the new signature. + * src/ult_src.h (struct ult_value): New structure. + (ult_src): Update prototype. + + * src/check_mandirs.c (test_manfile): Simplify `ult_src` calling + arrangements now that repeated calls with the same `name` and `flags` + arguments are cheap. At the moment this may end up doing a little more + work in some rare cases (links to already-scanned pages with `.so` + links), but that doesn't seem to be very significant at the moment, and + caching could be improved inside `ult_src` if it proves to be a problem. + * src/descriptions_store.c (store_descriptions): `trace` is now always + set. Add an assertion of this and drop a couple of conditionals. + +2022-09-25 Colin Watson + + ult_src: Remove recursion + + The use of recursion for `.so` handling in `ult_src` is somewhat + inconvenient, and it's relatively easy to convert it to an iterative + implementation. + + There should be no functional change from this commit, except to some + details of debug messages. + + * src/ult_src.c (find_include_directive): New function, extracted from + `ult_src`. + (ult_src): Handle `.so` links using a loop rather than recursion. Check + for compression extensions towards the end of the loop rather than at + the beginning, to avoid nonexistent files showing up in the trace. + +2022-09-25 Colin Watson + + mandb: Improve debugging + + * src/check_mandirs.c (test_manfile): Log the file under consideration + on entry. Log when we return early due to an existing database entry. + Remove some unnecessary parentheses from debug messages. + * src/ult_src.c (ult_src): Remove leading newline from debug message. + +2022-09-25 Colin Watson + + Don't skip adding a database entry due to SO_MAN + + An existing `SO_MAN` entry shouldn't stop us considering a page for + insertion into the database, because until we run `ult_src` we don't yet + know whether that page will be `ULT_MAN` (which should replace the + existing entry) or `SO_MAN` (which shouldn't). + + * src/check_mandirs.c (test_manfile): Don't return early due to an + existing matching `SO_MAN` entry, but only due to an `ULT_MAN` entry. + * NEWS.md: Document this. + +2022-09-24 Colin Watson + + Fix section/extension for whatis entries in database + + * src/descriptions_store.c (store_descriptions): Use the + section/extension of the best name for whatis entries, since we don't + have anything better. + +2022-09-24 Colin Watson + + store_descriptions: Improve debugging + + * src/descriptions_store.c (store_descriptions): Log the extension of + each entry being stored. + +2022-09-24 Colin Watson + + Extend database entry replacement rules + + These rules were previously ambiguous such that the targets of whatis + entries depended on the order in which files were scanned. + + * libdb/db_store.c (enum replace_action): Add. + (replace_if_necessary): Extend rules for greater stability. We now also + take mtimes and pointers into account, as well as including a case for + when the new ID is weaker than the old one (there was already a case for + when it was stronger). + (dbstore): Use `replace_if_necessary` when considering replacing multi + keys. + +2022-09-24 Colin Watson + + Fix section/extension for links in database + + In some cases this resulted in spurious database entries. For example, + if `man5/inetd.conf.5` was a symlink to `man8/inetd.8` and that page had + a `NAME` entry for `inetd`, then as well as entries for `inetd` in + section 8 and `inetd.conf` in section 5, we would also store a spurious + entry for `inetd` in section 5. We no longer do that. + + * src/descriptions_store.c (store_descriptions): For names corresponding + to entries in the ultimate source trace and not to the base name of the + file, use the section and extension of the trace entry rather than of + the ultimate source. + +2022-09-24 Colin Watson + + Pick a more consistent name for whatis targets + + We don't want the targets of whatis entries in the database to depend on + the order in which files were scanned. Prefer the first name in the + trace out of those that have the best ID. + + * src/descriptions_store.c (store_descriptions): Defer adding names that + don't appear in the ultimate source trace (i.e. whatis entries) until we + know the best name to use as the target, and use that best name as the + pointer for each of them. + +2022-09-24 Colin Watson + + Fix stored ID for links + + Database entries for links were often incorrectly stored as `ULT_MAN`, + depending on the exact order in which pages were scanned. They are now + stored more consistently as `SO_MAN`. + + * src/descriptions_store.c (store_descriptions): Override the ID from + `ULT_MAN` to `SO_MAN` if the name is not the last entry in the trace. + (Previously we overrode from `SO_MAN` to `ULT_MAN` if the name was the + last entry in the trace, but not the converse.) + * NEWS.md: Document this. + +2022-09-24 Colin Watson + + Simplify struct mandata memory allocation + + The arrangement where most of the fields of `struct mandata` were + constant pointers into the `addr` field was a bit more memory-efficient, + but it made some kinds of analysis and reorganization very difficult, + and we don't actually need to be quite that frugal about memory. + Reorganize this to allocate each field independently instead. + + * lib/filenames.c (filename_info): Allocate each field independently. + Use Gnulib's `base_name` and `dir_name` functions to parse paths. Stop + setting `info->addr`. + (free_mandata_struct): Free the `ext`, `sec`, `pointer`, `comp`, + `filter`, and `whatis` fields. Stop freeing `addr`. + * lib/filenames.h (struct mandata): Remove `addr`. Make `ext`, `sec`, + `pointer`, `comp`, `filter`, and `whatis` non-`const`. + * libdb/db_lookup.c (split_content): Copy the `ext`, `sec`, `pointer`, + `filter`, `comp`, and `whatis` fields. Stop setting `addr`. + * libdb/db_store.c (make_content): Copy the `pointer`, `comp`, `filter`, + and `whatis` fields. + * src/descriptions_store.c (store_descriptions): Copy `pointer` and + `whatis` fields. + * src/straycats.c (check_for_stray): Copy `comp`, `ext`, `sec`, and + `filter` fields. + + * libdb/db_lookup.c (dblookup): Always free `cont`'s data pointer, since + it's no longer sometimes borrowed. + * libdb/db_store.c (dbstore): Free `cont`'s and `oldcont`'s data + pointers, since they're no longer borrowed. + * src/check_mandirs.c (purge_missing): Free `content`'s data pointer, + since it's no longer borrowed. + + * libdb/db_lookup.c (dblookup_pattern): Stop freeing `info->addr`. + * src/catman.c (parse_for_sec): Stop freeing `entry->addr`. + * src/whatis.c (do_apropos): Stop freeing `info->addr`. + +2022-09-24 Colin Watson + + Stop using the addr field of struct mandata + + The `addr` field of `struct mandata` is just intended as an internal + buffer, but some functions were extracting information from it in + complicated ways, which made it difficult to refactor the memory + allocation here. Use different approaches. + + * src/check_mandirs (test_manfile): Calculate `len` using `comp_info`. + This duplicates some of what `filename_info` does, but it's just some + cheap string manipulation, and it expresses what we want in a less + confusing way (the length of the file name with any compression + extension removed). + * src/descriptions_store.c (store_descriptions): Check whether `path` is + a prefix of `trace_name` rather than of `trace_info->addr`. + `trace_info->addr` is always itself a prefix of `trace_name`, so if + `path` is not a prefix of `trace_name` then it can't be a prefix of + `trace_info->addr`. + +2022-09-24 Colin Watson + + is_prefix: Improve parameter naming + + The second parameter doesn't have to be a directory, so stop implying + that in the parameter name. + + * src/descriptions_store.c (is_prefix): Rename `path` to `parent`; rename + `dir` to `child`. + +2022-09-24 Colin Watson + + Simplify split_content interface + + Now that `struct mandata` is always allocated on the heap, we might as + well just have `split_content` return a freshly-allocated `struct + mandata` rather than taking a pointer to one as a parameter. + + * libdb/db_lookup.c (split_content): Allocate and return a `struct + mandata`; remove `pinfo` parameter. Update all callers. + * libdb/db_storage.h (split_content): Update prototype. + +2022-09-24 Colin Watson + + Always allocate struct mandata on the heap + + This means we no longer need two slightly different functions for + freeing it. + + * libdb/db_lookup.c (dblookup_pattern): Allocate `struct mandata` on the + heap. Simplify arrangements for adding to the `infos` list. + (dbstore): Allocate `struct mandata` on the heap. + * src/catman.c (parse_for_sec): Likewise. + * src/check_mandirs.c (purge_pointers, purge_missing): Likewise. + * src/straycats.c (check_for_stray): Likewise. + * src/whatis.c (do_apropos): Likewise. + + * lib/filenames.c (free_mandata_elements): Remove function and move its + contents to ... + (free_mandata_struct): ... here, if `pinfo` is set. + * lib/filenames.h (free_mandata_elements): Remove prototype. + +2022-09-24 Colin Watson + + filename_info: Always allocate info->name + + Only one call site has any interest in this being unset (in order to + pass the result to `dbstore`), and even there it's easier for the caller + to deal with unsetting it. Otherwise, it's strictly more convenient if + the structure returned by `filename_info` always includes the name of + the page. + + * lib/filenames.c (filename_info): Remove `req_name` parameter; update + all callers. Always set `info->name` before returning successfully. + * lib/filenames.h (filename_info): Update prototype. + * src/check_mandirs.c (test_manfile): Use `info->name` for + `manpage_base` rather than poking around in `info->addr`. + (count_glob_matches): Remove `name` parameter; update all callers. + * src/descriptions_store.c (store_descriptions): Drop now-unnecessary + check for `trace_info->name`. + * src/man.c (do_global_apropos_section): Build `title` using + `info->name` rather than poking around in `info->addr`. + * src/mandb.c (update_one_file): Drop now-unnecessary check for + `info->name`. + +2022-09-23 Colin Watson + + Reduce indentation in store_descriptions a bit + + * src/descriptions_store.c (store_descriptions): Use an early-continue + construction to save a level of indentation. + +2022-09-23 Colin Watson + + Simplify the filename_info interface + + This interface is a bit less confusing. + + * libdb/db_lookup.c (free_mandata_elements, free_mandata_struct): Move + to ... + * lib/filenames.c (free_mandata_elements, free_mandata_struct): ... + here. + * libdb/db_storage.h (free_mandata_elements, free_mandata_struct): Move + to ... + * lib/filenames.h (free_mandata_elements, free_mandata_struct): ... + here. + + * lib/filenames.c (filename_info): Return a `struct mandata` with the + `addr` element set to the buffer containing the fields, rather than + returning the buffer and taking a pointer to a `struct mandata` as a + parameter. Update all callers. + * lib/filenames.h (filename_info): Update prototype. + +2022-09-23 Colin Watson + + Move manual page file name utilities to lib/ + + * src/filenames.c: Move to ... + * lib/filenames.c: ... here. + * src/filenames.h: Move to ... + * lib/filenames.h: ... here. Update positioning of all includes. + * lib/Makefile.am (libman_la_SOURCES): Add `filenames.c` and + `filenames.h`. + * src/Makefile.am (man_recode_LDADD): Link with `$(LIBMAN)` instead of + `$(LIBMANDB)`. + (lexgrog_SOURCES, man_SOURCES, mandb_SOURCES): Remove `filenames.c` and + `filenames.h`. + * po/POTFILES.in: Rename `src/filenames.c` to `lib/filenames.c`. + + * lib/filenames.c (gripe_bogus_manpage): Remove `quiet < 2` condition. + (filename_info): Add `warn_if_bogus` parameter; only call + `gripe_bogus_manpage` if it is set. Update all callers. + * lib/filename.h (filename_info): Update prototype. + + * libdb/db_storage.h (struct mandata): Move to ... + * lib/filenames.h (struct mandata): ... here. Add includes where + necessary. + +2022-09-23 Colin Watson + + Fix distcheck + + * po/POTFILES.in: Rename `src/compression.c` to `lib/compression.c`. + +2022-09-23 Colin Watson + + Move compression file name utilities to lib/ + + This makes more sense as a home for plain file name manipulation + utilities. I also merged `include/comp_src.h.in` into + `lib/compression.c`, because structure definitions (as opposed to + declarations) don't belong in header files. + + * src/compression.c: Move to ... + * lib/compression.c: ... here. Remove unnecessary `pipeline.h` include. + * src/compression.h: Move to ... + * lib/compression.h: ... here. Update positioning of all includes. + * lib/Makefile.am (libman_la_SOURCES): Add `compression.c` and + `compression.h`. + * lib/README: Add `compression.*`. + * src/Makefile.am (lexgrog_SOURCES, man_SOURCES, man_recode_SOURCES, + mandb_SOURCES): Remove `compression.c` and `compression.h`. + + * include/comp_src.h (comp_list): Move to ... + * lib/compression.c (comp_list): ... here. Update all references. + * include/manconfig.h (struct compression, comp_list): Move to ... + * lib/compression.h (struct compression, comp_list): ... here. Add + includes where necessary. + * Makefile.am (noinst_HEADERS): Remove `include/comp_src.h`. + +2022-09-23 Colin Watson + + Remove infoalloc macro + + It doesn't really pull its weight. + + * libdb/db_lookup.c (dblookup, dblookup_pattern): Call `XZALLOC (struct + mandata)` rather than `infoalloc ()`. + * src/man.c (try_section, do_global_apropos_section): Likewise. + * libdb/db_storage.h (infoalloc): Remove. + +2022-09-19 Colin Watson + + Maintain multi key references in sorted order + + This is a step towards being able to reproduce the same database given + the same manual page tree. + + * bootstrap.conf (gnulib_modules): Add stpcpy. + * libdb/db_lookup.c (name_ext_equals): Remove static; add pure + attribute. + (name_ext_compare): New function. + (list_extensions): Add entries in sorted order. + * libdb/db_storage.h (name_ext_equals, name_ext_compare): Add + prototypes. + * libdb/db_store.c (make_extensions_reference): New function. + (dbstore): When building or updating multi key references, maintain them + in sorted order. + * NEWS.md: Document this. + +2022-09-19 Colin Watson + + Remove some excessive debugging output + + This hasn't been of any practical use for many years. + + * lib/security.c (drop_effective_privs, regain_effective_privs): Remove + debug messages emitted when increasing or decreasing the privilege drop + count. + +2022-08-11 Colin Watson + + Fix use of pointer (address only) after free + + I don't believe this was technically undefined behaviour, since we + didn't actually dereference the dangling pointer, merely compared its + value (the pointer address itself) against entries in the cleanup stack. + However, the compiler probably had a hard time proving that, so the + use-after-free warning issued by recent versions of GCC seems fair + enough. + + * src/mandb.c (cleanup): Don't free dbpaths. + (process_manpath): Free it here instead, after calling pop_cleanup. + +2022-08-11 Colin Watson + + Make CATWIDTH override MINCATWIDTH/MAXCATWIDTH + + Otherwise setting `CATWIDTH` to something larger than 80 confusingly + doesn't work unless you also set `MAXCATWIDTH`. + + Fixes https://gitlab.com/cjwatson/man-db/-/issues/9. + + * src/man.c (add_roff_line_length): Skip terminal width range check if + `cat_width` is set. + * man/man5/manpath.man5 (FORMAT): Remove note that `CATWIDTH` should be + within the range set by `MINCATWIDTH` and `MAXCATWIDTH`, and instead say + that it overrides them. + * NEWS.md: Document this. + +2022-07-22 Colin Watson + + Add more case variants of localized versions of NAME + + * src/lexgrog.l (bg_name, lt_name, ru_name, sr_name, srlatin_name, + tr_name, uk_name, vi_name): Add more case variants. + * NEWS.md: Document this. + +2022-07-18 Colin Watson + + Update pre-commit hooks + + * .pre-commit-config.yaml (pre-commit-hooks): Update to v4.3.0. + +2022-07-18 Colin Watson + + Update to Gnulib 20220717 + + Fixes https://gitlab.com/cjwatson/man-db/-/issues/6. + + * bootstrap: Sync to Gnulib df336dc1ae60d8ad9f452f2234951133fe617bb0. + * bootstrap.conf (GNULIB_REVISION): Set to + df336dc1ae60d8ad9f452f2234951133fe617bb0. + * NEWS.md: Document build fix. + +2022-07-15 Colin Watson + + Merge branch 'drop-lsm' into 'main' + + Drop LSM file + + See merge request cjwatson/man-db!4 + +2022-07-13 Pino Toscano + + Drop LSM file + + The LSM format is a very old format for software, and it is dead for + many years already. Since keeping the .lsm up-to-date is basically not + much of use, simply drop it altogether. + + * docs/Makefile.am (dist_noinst_DATA): Remove man-db.lsm. + * docs/HACKING.md: Stop mentioning man-db.lsm. + * docs/man-db.lsm: Remove file. + +2022-07-05 Stéphane Aulery + + Update French manual page translation + + * man/po4a/po/fr.po: Update from Translation Project. + +2022-06-02 Joe Hansen + + Update Danish translation + + * po/da.po: Update from Translation Project. + +2022-05-18 Colin Watson + + Cache filters alongside whatis information + + `mandb` needs to cache filters together with whatis information, as + otherwise pages were incorrectly recorded with no filters if `mandb` + happened to use cached whatis information for them rather than reading + it from scratch. + + * src/check_mandirs.c (struct whatis): Add filters. + (whatis_free): Free whatis->filters. + (test_manfile): Store and use whatis->filters. + * NEWS.md: Document this. + +2022-04-27 Andika Triwidada + + Update Indonesian translation + + * po/id.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2022-04-23 Colin Watson + + Stop GitLab from getting confused about licences + + GitLab uses https://github.com/licensee/licensee to detect the project's + licence, and if that finds multiple matching files then it throws up its + hands and refuses to make a licence assertion, with no apparent way to + override it. + + To avoid this problem, move the secondary licence files (those that + apply only to some files, rather than to the project as a whole) back + into a subdirectory, so that `licensee` doesn't notice them. + + * COPYING.GPLv2: Move to ... + * docs/COPYING.GPLv2: ... here. Update all references. + * COPYING.LIB: Move to ... + * docs/COPYING.LIB: ... here. Update all references. + * Makefile.am (dist_noinst_DATA): Remove COPYING.GPLv2. + * docs/Makefile.am (dist_noinst_DATA): Add COPYING.GPLv2 and + COPYING.LIB. + +2022-04-23 Colin Watson + + Clarify effective GPLv3 licensing + + While man-db's own files are individually licensed under GPLv2 (or in a + few cases LGPLv2.1), the project as a whole is effectively GPLv3 due to + Gnulib. This was already explained in README.md, but make it a bit + clearer by having the top-level COPYING file be a copy of GPLv3. + + * COPYING: Move to ... + * COPYING.GPLv2: ... here. + * COPYING: New file. + * Makefile.am (dist_noinst_DATA): Add COPYING.GPLv2. + * lib/README, man/it/man1/apropos.man1, man/it/man1/man.man1, + man/it/man1/manpath.man1, man/it/man1/whatis.man1, + man/it/man1/zsoelim.man1, man/it/man5/manpath.man5, + man/it/man8/accessdb.man8, man/it/man8/catman.man8, + man/it/man8/mandb.man8, man/man1/apropos.man1, man/man1/lexgrog.man1, + man/man1/man-recode.man1, man/man1/man.man1, man/man1/manconv.man1, + man/man1/manpath.man1, man/man1/whatis.man1, man/man1/zsoelim.man1, + man/man5/manpath.man5, man/man8/accessdb.man8, man/man8/catman.man8, + man/man8/mandb.man8, manual/comp.me, manual/db.me, manual/files.me, + manual/format.me, manual/glossary.me, manual/intro.me, manual/leader.me, + manual/man_db.me, manual/misc.me, manual/sec.me: Refer to COPYING.GPLv2 + rather than COPYING. + +2022-04-23 Colin Watson + + Update pre-commit hooks + + * .pre-commit-config.yaml (pre-commit-hooks): Update to v4.2.0. + +2022-04-17 Emir SARI + + Update Turkish manual page translation + + * man/po4a/po/tr.po: Update from Translation Project. + * man/THANKS: Update translator credit. + +2022-04-16 Colin Watson + + Recognize another Turkish translation of NAME + + Emir SARI reports that "AD" is the de facto standard technical + terminology for "NAME" in Turkish, rather than "İSİM" which sounds + slightly colloquial. Recognize it as well. + + * src/lexgrog.l (tr_name): Add "AD". + +2022-04-12 Emir SARI + + Update Turkish translation + + * po/tr.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2022-03-17 Colin Watson + + Release man-db 2.10.2 + + NEWS.md: Fix typo for 2.7.6 + +2022-03-08 Colin Watson + + pre-commit: Avoid need for multiple shellcheck runs + + * .shellcheckrc: Set `external-sources=true`. + * src/tests/lexgrog-backslash-dash-rhs, src/tests/lexgrog-basic, + src/tests/lexgrog-multiple-whatis, src/tests/man-deleted-directory, + src/tests/man-exact-section-matches, + src/tests/man-executable-page-on-path, src/tests/man-invalid-db-entry, + src/tests/man-language-specific-requests, + src/tests/man-mandatory-manpath, src/tests/man-missing-locales, + src/tests/man-override-dir, src/tests/man-recode-in-place, + src/tests/man-recode-suffix, src/tests/man-so-links-same-section, + src/tests/man-suffixed-extension, + src/tests/man-symlinks-with-matching-names, + src/tests/manconv-coding-tags, src/tests/manconv-guess-from-encoding, + src/tests/manconv-incomplete-char-at-eof, + src/tests/manconv-odd-combinations, src/tests/mandb-basic, + src/tests/mandb-bogus-symlink, src/tests/mandb-cachedir-tag, + src/tests/mandb-empty-page, src/tests/mandb-purge-updates-timestamp, + src/tests/mandb-regular-file-symlink-changes, + src/tests/mandb-symlink-beats-whatis-ref, + src/tests/mandb-symlink-target-timestamp, + src/tests/mandb-whatis-broken-link-changes, + src/tests/whatis-path-to-executable, src/tests/zsoelim-so-includes: Add + `shellcheck source-path=SCRIPTDIR` directive before sourcing testlib.sh. + * .pre-commit-config.yaml: Consolidate the two shellcheck hooks into + one. + +2022-03-08 Colin Watson + + pre-commit: Add shellcheck + + * .pre-commit-config.yaml: Add shellcheck. We need separate hooks for + `src/tests/` and for everything else, since shellcheck needs a `-P` + option to correctly handle sourced files in `src/tests/`. + * .shellcheckrc: New file. + +2022-03-08 Colin Watson + + Refactor use of cd in shell scripts + + shellcheck warns about unchecked uses of `cd` (SC2164). Either check it + or refactor to avoid changing directory. + + * src/tests/man-deleted-directory: Check `cd` call. + * src/tests/man-suffixed-extension: Avoid changing directory. + * tools/mkcatdirs: Likewise. + +2022-03-08 Colin Watson + + mkcatdirs: Skip nonexistent man directories + + * tools/mkcatdirs: `manpath -qg` may return man directories that are + mentioned in the configuration file but that don't exist on the + filesystem. Skip these. + +2022-03-08 Colin Watson + + mkcatdirs: Refactor using install(1) + + I'm not sure this script is widely-used, but it might as well work. It + previously relied on `mkinstalldirs`, which is a build tool not + typically installed on end-user systems. + + * tools/mkcatdirs: Refactor cat directory creation using install(1). + +2022-03-08 Colin Watson + + Apply various minor shell syntax improvements + + * manual/print-options: Explicitly set `LANGUAGE=''` rather than + `LANGUAGE=`, pacifying shellcheck SC1007 which notes that this + construction might otherwise be misread. + * src/tests/manconv-odd-combinations: Use `printf %b` to pacify + shellcheck SC2059. + * src/tests/testlib.sh: Tell shellcheck which shell syntax to assume, + since this file has no `#!` line. + (run): Disable shellcheck SC2154; `abs_top_builddir` is always set by + the test runner. + (report): Remove unnecessary `$` before variable in arithmetic context. + (tools/checkman): Use `$(...)` for command substitution. Quote + variables properly where possible, and ignore shellcheck SC2068 in a + couple of other places. + +2022-03-07 Colin Watson + + tests: Pacify shellcheck SC2188 + + The previous construction resulted in: + + SC2188 (warning): This redirection doesn't have a command. Move to its + command (or use 'true' as no-op). + + * src/tests/man-mandatory-manpath, src/tests/testlib.sh: Avoid + redirections without a command. + +2022-03-07 Colin Watson + + tests: Make pass/fail reporting more shellcheck-friendly + + * src/tests/testlib.sh (report): New function, similar to expect_pass + but taking an exit code rather than a command string to evaluate. + (expect_pass): Remove. + (expect_files_equal): Refactor using report function. + * src/tests/man-deleted-directory, + src/tests/man-executable-page-on-path, src/tests/man-missing-locales, + src/tests/man-recode-in-place, src/tests/manconv-incomplete-char-at-eof, + src/tests/mandb-bogus-symlink, src/tests/mandb-cachedir-tag, + src/tests/mandb-empty-page, src/tests/mandb-purge-updates-timestamp: + Refactor to use report function rather than expect_pass. + +2022-03-07 Colin Watson + + tests: Add an expect_files_equal helper function + + * src/tests/testlib.sh (expect_files_equal): New function. + * src/tests/lexgrog-backslash-dash-rhs, src/tests/lexgrog-basic, + src/tests/lexgrog-multiple-whatis, src/tests/man-exact-section-matches, + src/tests/man-invalid-db-entry, + src/tests/man-language-specific-requests, + src/tests/man-mandatory-manpath, src/tests/man-override-dir, + src/tests/man-recode-in-place, src/tests/man-recode-suffix, + src/tests/man-so-links-same-section, src/tests/man-suffixed-extension, + src/tests/man-symlinks-with-matching-names, + src/tests/manconv-coding-tags, src/tests/manconv-guess-from-encoding, + src/tests/manconv-odd-combinations, src/tests/mandb-basic, + src/tests/mandb-purge-updates-timestamp, + src/tests/mandb-regular-file-symlink-changes, + src/tests/mandb-symlink-beats-whatis-ref, + src/tests/mandb-symlink-target-timestamp, + src/tests/mandb-whatis-broken-link-changes, + src/tests/whatis-path-to-executable, src/tests/zsoelim-so-includes: Use + expect_files_equal instead of the equivalent expect_pass construction. + +2022-03-07 Colin Watson + + tests: Improve quoting + + * src/tests/lexgrog-backslash-dash-rhs, src/tests/lexgrog-basic, + src/tests/lexgrog-multiple-whatis, src/tests/man-deleted-directory, + src/tests/man-exact-section-matches, + src/tests/man-executable-page-on-path, src/tests/man-invalid-db-entry, + src/tests/man-language-specific-requests, + src/tests/man-mandatory-manpath, src/tests/man-missing-locales, + src/tests/man-override-dir, src/tests/man-recode-in-place, + src/tests/man-recode-suffix, src/tests/man-so-links-same-section, + src/tests/man-suffixed-extension, + src/tests/man-symlinks-with-matching-names, + src/tests/manconv-coding-tags, src/tests/manconv-guess-from-encoding, + src/tests/manconv-incomplete-char-at-eof, + src/tests/manconv-odd-combinations, src/tests/mandb-basic, + src/tests/mandb-bogus-symlink, src/tests/mandb-cachedir-tag, + src/tests/mandb-empty-page, src/tests/mandb-purge-updates-timestamp, + src/tests/mandb-regular-file-symlink-changes, + src/tests/mandb-symlink-beats-whatis-ref, + src/tests/mandb-symlink-target-timestamp, + src/tests/mandb-whatis-broken-link-changes, + src/tests/whatis-path-to-executable, src/tests/zsoelim-so-includes: Use + ': "${var=default}"' idiom to assign default values rather than + ': ${var=default}', pacifying shellcheck. + +2022-03-06 Nikola Forró + + Add --with-snapdir configure option + + * m4/man-arg-snapdir.m4: New file. + * configure.ac: Call MAN_ARG_SNAPDIR. + * src/man_db.conf.in: Use @snapdir@ rather than hardcoding /snap. + * NEWS.md: Document this. + +2022-03-06 Colin Watson + + Tidy up NEWS.md slightly + + * NEWS.md: Reorder fixes and improvements; add credit for last commit. + +2022-03-06 Mihail Konev + + man(1): Fix override dir handling + + Previously, override dir was affecting only some cases of manpath + determination. Apply it only when all paths have been gathered instead. + + Also look for override dir when sorting candidates. + + Fixes src/tests/man-override-dir failing when --with-override-dir=od is + passed to ./configure. + + [cjwatson: Refactored candidate comparison to use a strcmp-style + function, and simplified the addition of override directories a little + more.] + + * src/man.c (compare_override_dir): New function. + (compare_candidates): Compare override directory status between + comparing section extensions and comparing locale elements. + * src/manp.c (insert_override_dir): Remove. + (get_manpath_from_path, add_man_subdirs): Remove calls to + insert_override_dir. + (create_pathlist): Add OVERRIDE_DIR at the canonicalization stage + instead. + * NEWS.md: Document this. + + Reported-by: Nikola Forró + Tested-by: Nikola Forró + +2022-03-06 Colin Watson + + Update to Gnulib 20220301 + + In line with Gnulib, we now require Automake 1.14. + + * bootstrap.conf (GNULIB_REVISION): Set to + 8c4f4d7a3c28f88b64fce2fb1d0dc0e570d1a482. + (buildreq): Bump required automake version to 1.14. + * configure.ac (AM_INIT_AUTOMAKE): Bump minimum version to 1.14. + * NEWS.md: Document this. + +2022-03-06 Colin Watson + + Add some hardening options to the systemd service + + Based on a patch by Johannes Segitz in the openSUSE packaging, although + I added `PrivateTmp=true` and `LockPersonality=true` as well. + + * init/systemd/man-db.service.in: Add some hardening options. (This may + produce warnings with `systemd < 244`.) + * NEWS.md: Document this. + +2022-03-05 Colin Watson + + Make the man-db manual build reproducible + + Inspired by a patch from B. Wiedemann, but implemented differently. + + * manual/Makefile.am (version): Set "td" string to the package's release + date, since otherwise groff's me package will use the current date. + * NEWS.md: Document this. + +2022-03-05 Dr. Werner Fink + + Fix showing HTML, as firefox runs into background too fast + + [cjwatson: I'm not 100% keen on this approach, since it randomly depends + on how long the browser happens to take to launch and might be a bit + annoying for users of light browsers such as w3m, but there doesn't seem + to be any other good alternative for the more common case of people + using typical graphical browsers.] + + Fixes Debian bug #335411 and Savannah bug #59542. + + * src/man.c (format_display): Sleep for a few seconds after starting the + browser, since it may background itself before loading files. + * NEWS.md: Document this. + +2022-02-18 Мирослав Николић + + Update Serbian manual page translation + + * man/po4a/po/sr.po: Update from Translation Project. + +2022-02-17 Remus-Gabriel Chelu + + Update Romanian translation + + * po/ro.po: Update from Translation Project. + * man/THANKS: Update translator credit. + +2022-02-15 Remus-Gabriel Chelu + + Update Romanian manual page translation + + * man/po4a/po/ro.po: Update from Translation Project. + +2022-02-15 Remus-Gabriel Chelu + + Update Romanian manual page translation + + * man/po4a/po/ro.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2022-02-10 Colin Watson + + Release man-db 2.10.1 + +2022-02-10 Colin Watson + + Add a top-level update-po target + + This simplifies the common task of ensuring that both program and manual + page translation files are up to date. + + * Makefile.am (update-po): New target. + +2022-02-09 Colin Watson + + Fix warnings when building without zlib + + * src/decompress.c (decompress_new_inprocess): Only define this function + if HAVE_LIBZ is defined. + (OPEN_FLAGS_UNUSED): New macro, defined to MAYBE_UNUSED if HAVE_LIBZ is + undefined. + (decompress_open): Declare flags as unused if HAVE_LIBZ is defined. + +2022-02-08 Colin Watson + + Use Gnulib raise module + + This can be made slightly more portable (e.g. to MinGW). + + * bootstrap.conf (gnulib_modules): Add raise. + * lib/cleanup.c (sighandler): Call raise rather than kill. + +2022-02-08 Colin Watson + + Merge branch 'libintl' into 'main' + + libdb: link against libintl explicitly + + See merge request cjwatson/man-db!3 + +2022-02-08 Colin Watson + + Use @LTLIBINTL@ rather than $(LIBINTL) + + This matches our other Makefiles. + +2022-02-08 Boyuan Yang <073plan@gmail.com> + + Update Simplified Chinese manual page translation + + Fixes Debian bug #1005139. + + * man/po4a/po/zh_CN.po: Update from Translation Project. + +2022-02-08 Colin Watson + + Fix building on Cygwin + + Achim reported that 2.10.0 no longer builds on Cygwin, while 2.9.4 did. + This was magnificently obscure, at least to this Unix-head. Initially + it appeared to be an issue with inter-library linking between libman and + libmandb, but 2.9.4 relied on that too, just slightly less so. + + The actual problem was that libman only exported + `gl_get_setlocale_null_lock` and not all the other symbols it's supposed + to export, which is because that was explicitly marked for export and no + other symbols were. Building libman with `-Wl,--export-all-symbols` + fixes this; libman is intended as an aggregation of various helper + functions, including those from Gnulib, and it doesn't make sense to be + especially selective since it's only installed as a private library + anyway. + + (I'm still not exactly sure why 2.9.4 didn't do the same thing, but this + seems to be a good enough fix.) + + * configure.ac: Set LIBMAN_EXPORT_LDFLAGS to '-Wl,--export-all-symbols' + when linking with GNU ld on Windows platforms. + * lib/Makefile.am (libman_la_LDFLAGS): Add $(LIBMAN_EXPORT_LDFLAGS). + * src/Makefile.am (LIBMAN): Remove $(top_builddir)/gl/lib/libgnu.la; as + a convenience library, this is already incorporated into libman.la, and + specifying it again causes multiple-definition errors on Cygwin. + * src/tests/Makefile.am (get_mtime_LDADD): Likewise. + * NEWS.md: Document this. + +2022-02-08 Colin Watson + + Document fix for building without iconv + + * NEWS.md: Document previous change. + +2022-02-08 Colin Watson + + Fix building without iconv + + * src/convert.c (convert_to_locale) [!HAVE_ICONV]: Declare a function + rather than a macro. + (convert_to_locale): Add ATTRIBUTE_MALLOC. + +2022-02-08 Colin Watson + + Remove some unused includes + + * lib/encodings.c: Remove unused #include "pipeline.h". Explicitly + include , previously included implicitly via "pipeline.h". + * lib/security.c, lib/util.c: Remove unused #include "pipeline.h". + +2022-02-07 Fabian Groffen + + libdb: link against libintl explicitly + + Necessary since gettext is used for translations. + + [sam: originally found downstream in Gentoo on Gentoo Prefix on macOS.] + +2022-02-06 Colin Watson + + Suppress Clang warnings with -Wconstant-logical-operand + + * src/lexgrog.l (find_name): Explicitly test `*PROG_COL != '\0'` rather + than just `*PROG_COL`, to pacify `clang -Wconstant-logical-operand`. + * src/man.c (make_roff_command, make_display_command): Likewise. + +2022-02-06 Colin Watson + + Revert "Reduce indentation depth using C99" + + This reverts commit c4d20840f3487588c4a0da4397b1acb6dc83a1e5. Even in + C99, a declaration isn't valid immediately after a label; this didn't + become valid until C2x, although gcc allows it as an extension. + + Fixes https://gitlab.com/cjwatson/man-db/-/issues/2. + + * src/man.c (parse_opt): Restore enclosing block for OPT_WARNINGS. + * NEWS: Document this. + +2022-02-04 Colin Watson + + Fix another edge case in mandb-symlink-target-timestamp + + * src/tests/mandb-symlink-target-timestamp: Fix handling of the case + where the nanosecond part of a timestamp is exactly 0 (probably because + the filesystem doesn't support nanosecond resolution). + +2022-02-04 Colin Watson + + Fix occasional mandb-symlink-target-timestamp test failure + + * src/tests/mandb-symlink-target-timestamp: Fix handling of the case + where the nanosecond part of a timestamp starts with a zero. + * NEWS.md: Document this. + +2022-02-04 Colin Watson + + Update man-db.lsm properly + + Release man-db 2.10.0 + +2022-01-31 Colin Watson + + gitlab-ci: Run tests with VERBOSE=1 + + This makes it easier to diagnose test failures. + + * .gitlab-ci.yml (build-distcheck:script, build-out-of-tree:script): Set + VERBOSE=1. + +2022-01-31 Colin Watson + + man: Avoid spurious error messages due to subpages + + Since man-db 2.4.2, `man` has behaved as if the `-l` option was given if + a manual page argument contains a slash. Since man-db 2.5.6, this has + interacted slightly poorly with the subpage feature, emitting spurious + error messages if given multiple manual page arguments some of which + include a slash. `man` no longer emits spurious error messages in this + case. + + Fixes Savannah bug #53708. + + * src/man.c (man): Move name-contains-slash case to ... + (man_maybe_local): ... here (new function). + (main): Call man_maybe_local instead of man where checking for names + containing slashes is acceptable. + * NEWS.md: Document this. + +2022-01-31 Colin Watson + + mandb: Fix handling of link target mtimes + + Depending on directory iteration order, mandb sometimes incorrectly + stored the mtime of a symlink as the mtime of its target as well. + + Fixes Debian bug #691643. + + * src/descriptions_store.c (store_descriptions): When adding entries + based on an ult_src trace, use the mtime of the target file if possible + rather than the mtime of the base entry. + * src/tests/Makefile.am (ALL_TESTS): Add mandb-symlink-target-timestamp. + * src/tests/get-mtime.c (main): Use lstat rather than stat. + * src/tests/mandb-symlink-target-timestamp: New file. + * NEWS.md: Document this. + +2022-01-30 Colin Watson + + Update translation files + + * po/man-db.pot, po/*.po: Update. + +2022-01-30 Colin Watson + + Update to Gnulib 20220130 + + * bootstrap: Sync to Gnulib 735f319cde4ab7e98294557181d682564241d846. + * bootstrap.conf (GNULIB_REVISION): Set to + 735f319cde4ab7e98294557181d682564241d846. + +2022-01-30 Colin Watson + + Simplify static analysis of fatal errors + + The usual idiom for fatal error reporting in man-db is `error (FATAL, + ...)` (there are a few cases using different exit codes, but they're + less common). Unfortunately, there's no easy way to tell the compiler + that this call doesn't return, because `error (0, ...)` *does* return. + As a result, some call sites required extra work to give the compiler + this information, which can sometimes make a difference to static + analysis. + + To simplify this, add a new `fatal` helper function which always exits + `FATAL` (i.e. 2) and never returns. This is declared with `_Noreturn` + so that the compiler can straightforwardly know what's going on. + + * bootstrap.conf (gnulib_modules): Add verror. + (XGETTEXT_OPTIONS): Add --flag=fatal:2:c-format. + * lib/fatal.c, lib/fatal.h: New files. + * lib/Makefile.am (libman_la_SOURCES): Add fatal.c and fatal.h. + * src/tests/Makefile.am (AM_CPPFLAGS): Add -I$(top_srcdir)/lib. + (get_mtime_LDADD): Add $(top_builddir)/lib/libman.la. + + * lib/pathsearch.c (pathsearch, directory_on_path): Use fatal. + * lib/sandbox.c (can_load_seccomp, make_seccomp_filter, _sandbox_load): + Likewise. + * lib/security.c (gripe_set_euid): Likewise. + * lib/xregcomp.c (xregcomp): Likewise. + * libdb/db_lookup.c (gripe_corrupt_data, dblookup_pattern): Likewise. + * libdb/db_ver.c (dbver_wr): Likewise. + * src/accessdb.c (main): Likewise. + * src/catman.c (parse_for_sec): Likewise. + * src/check_mandirs.c (chown_if_possible): Likewise. + * src/man-recode.c (recode): Likewise. + * src/man.c (open_cat_stream, format_display, gripe_converting_name): + Likewise. + * src/manconv.c (add_output): Likewise. + * src/manp.c (add_dir_to_path_list): Likewise. + * src/tests/get-mtime.c (main): Likewise. + * src/whatis.c (do_apropos): Likewise. + * src/zsoelim.l (\"?[^ \t\n\"]+\"?): Likewise. + + * libdb/db_lookup.c (gripe_corrupt_data, gripe_replace_key): Declare as + _Noreturn. + + * src/accessdb.c (main): Remove now-unnecessary assertion. + * src/man.c (gripe_converting_name): Remove now-unnecessary abort. + +2022-01-30 Colin Watson + + docs: Move COPYING and COPYING.LIB to top level + + I think people are more likely to expect to find them here - I recently + even found myself confused by their previous placement. + + * docs/COPYING, docs/COPYING.LIB: Move to ... + * COPYING, COPYING.LIB: ... here, respectively. + * lib/README: Update references. + +2022-01-30 Colin Watson + + man: Don't modify MANSECT environment variable + + Reported and diagnosed by Rob Hoelz. Fixes Savannah bug #58896. + + * src/man.c (get_section_list): Copy colon_sep_section_list before + passing it to strtok. + * NEWS.md: Document this. + +2022-01-30 Colin Watson + + libdb: Pacify gcc -Wempty-body + + * libdb/mydbm.h (MYDBM_REORG) [NDBM, BTREE]: Change no-op macro + definition to avoid "suggest braces around empty body" warning in mandb. + +2022-01-30 Alejandro Cendejas Tena + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2022-01-30 Colin Watson + + mandb: Don't modify DB without changing its mtime + + In d9ebedad15 (man-db 2.7.0), mandb started relying on the modification + times of database files themselves rather than using a special row, in + order to make databases reproducible between otherwise-identical + installations (subject to predictable behaviour from the underlying + database). + + There was a difficulty with this change. Because purging deleted pages + from the database opened and closed the database in a separate phase + before the main phase of looking for updated manual pages, and because + the main phase relies on comparing against the mtime of the database to + find changed files, I had to arrange to restore the original mtime at + the end of the purge phase in order to avoid confusing the main phase + into being a no-op. However, in some cases (perhaps due to other bugs, + but nevertheless), it's possible for the purge phase to find work to do + without the main phase ever finding any modified directories, which + meant that the net effect of mandb would be to modify its database + without changing its mtime. This is bad form, and confused some backup + systems into believing that the filesystem had been corrupted, since + files having their contents changed without updating their mtime is + indeed a likely symptom of filesystem corruption. + + To avoid this, restructure our database-handling code so that a given + mandb run opens any given database at most once. This means that we no + longer need to modify mtimes manually, so the usual filesystem rules + apply. + + Fixes Debian bug #1004355 and Ubuntu bug #1411633. + + * bootstrap.conf (gnulib_modules): Remove futimens. + * libdb/db_btree.c (man_btree_close): Rename to ... + (man_btree_free): ... this. Check whether wrap->file is set. Free + wrap->mtime. + (man_btree_new): New function. + (man_btree_open): Convert to running on the result of man_btree_new. + (man_btree_get_time): Cache return value in wrap->mtime. + (man_btree_set_time): Remove. + * libdb/db_gdbm.c (man_gdbm_new): New function. + (man_gdbm_open_wrapper): Convert to running on the result of + man_gdbm_new. + (man_gdbm_get_time): Cache return value in wrap->mtime. + (man_gdbm_set_time): Remove. + (raw_close): Check whether wrap->file is set. + (man_gdbm_close): Rename to ... + (man_gdbm_free): ... this. + * libdb/db_ndbm.c (raw_close): Check whether wrap->file is set. + (man_ndbm_close): Rename to ... + (man_ndbm_free): ... this. + (man_ndbm_new): New function. + (man_ndbm_open): Convert to running on the result of man_ndbm_new. + (man_ndbm_get_time): Cache return value in wrap->mtime. + (man_ndbm_set_time): Remove. + * libdb/db_xdbm.c (man_xdbm_close): Rename to ... + (man_xdbm_free): ... this. Update all callers. Free dbf->mtime. + * libdb/db_xdbm.h (man_xdbm_close): Rename to ... + (man_xdbm_free): ... this. + * libdb/mydbm.h (man_gdbm_wrapper, man_ndbm_wrapper, man_btree_wrapper): + Add mtime. + (man_gdbm_new, man_ndbm_new, man_btree_new): Add prototypes. + (man_gdbm_open_wrapper, man_ndbm_open, man_btree_open): Update + prototypes. + (man_gdbm_set_time, man_ndbm_set_time, man_btree_set_time): Remove + prototypes. + (man_gdbm_close, man_ndbm_close, man_btree_close): Rename to ... + (man_gdbm_free, man_ndbm_free, man_btree_free): ... these, respectively. + (MYDBM_NEW): New macro. + (MYDBM_CTRWOPEN, MYDBM_RWOPEN, MYDBM_RDOPEN): Rename file argument to + wrap. + (MYDBM_CLOSE): Rename to ... + (MYDBM_FREE): ... this. + (MYDBM_SET_TIME): Remove macro. + + * src/catman.c (parse_for_sec): Take a MYDBM_FILE argument rather than a + database path. + * src/check_mandirs.c (gripe_rwopen_failed, testmandirs, create_db, + update_db, purge_missing): Likewise. + * src/mandb.c (update_one_file, update_db_wrapper): Likewise. + * src/straycats.c (straycats): Likewise. + * src/check_mandirs.h (create_db, update_db, purge_missing): Update + prototypes. + * src/straycats.h (straycats): Likewise. + + * src/check_mandirs.c (ensure_db_open): New function. + (testmandirs): Only open the database if it wasn't already open, and + don't close it. + (update_db, purge_missing): Likewise. + * src/mandb.c (update_one_file): Likewise. + * src/straycats.c (straycats): Assert that the database is already open, + and don't close it. + + * src/accessdb.c (main): Update database opening code. + * src/catman.c (post_fork): Update database closing code. + (parse_for_sec): Move database opening and closing code to ... + (main): ... here, and update it. + * src/man.c (dbdelete_wrapper): Update database opening and closing + code. + * src/whatis.c (search): Update database opening and closing code. + + * src/check_mandirs.c (purge_missing): Don't reorganize the database. + * src/mandb.c (mandb): Create a MYDBM_FILE from the database path, and + close and free it before returning. Rearrange purging so that it runs + on the temporary database copy, which we close and remove if + purge_missing finds a consistency problem requiring us to rescan from + scratch. Unless purging requires a rescan, all of the purge, main, and + stray cats phases now run on the same open database file. Reorganize + the database before closing it if the purge phase did any work. + (process_manpath): Rename the temporary database into place if either of + the purge or stray cats phases did any work, even if the main phase + didn't. + + * src/check_mandirs.c (update_db_time): Remove. + (create_db): Don't manually update the database mtime. + (update_db, purge_missing): Likewise. + + * src/tests/Makefile.am (ALL_TESTS): Add mandb-purge-updates-timestamp. + (check_PROGRAMS): Add get-mtime. + (get_mtime_SOURCES, get_mtime_LDADD): Add. + * src/tests/get-mtime.c: New file: test helper to get a file's mtime + portably. + * src/tests/mandb-purge-updates-timestamp: New file. + * .gitignore: Add src/tests/get-mtime. + + * NEWS: Document this. + +2022-01-29 Colin Watson + + man: Make dbdelete_wrapper use the correct database + + Even if it has permissions to delete stale entries from the database, + dbdelete_wrapper can't assume that the most recently opened database is + the one from which it should delete the entry; it needs to use the + database to which the candidate in question belongs. + + * src/man.c (database): Remove global variable. + (dbdelete_wrapper): Add a manpath argument, and attempt to open the + associated database locally. + (display_database_check): Pass the candidate's path (i.e. manpath) to + dbdelete_wrapper. + (try_db): Make the database path a local variable. Reorganize cleanup + paths. + (main): Stop freeing database, since it's no longer a global variable. + +2022-01-29 Colin Watson + + mandb: Fix some details of error handling + + * src/check_mandirs.c (testmandirs): Return -1 rather than -errno on + failure to create the database. + (create_db, update_db): Only call update_db_time if amount > 0, rather + than if it is non-zero (since it may be negative to indicate an error, + and updating the database time doesn't make sense in that case). + (update_db): Return -1 rather than EOF. + * src/mandb.c (update_db_wrapper): Check whether amount is non-zero + rather than whether it is unequal to EOF. + +2022-01-29 Colin Watson + + libdb: Remove unused MYDBM_CRWOPEN macro + + * libdb/mydbm.h (MYDBM_CRWOPEN): Remove. + +2022-01-29 Colin Watson + + mandb: Call purge_missing and straycats from mandb + + We can simplify some logic by pushing these down a layer. + + * src/check_mandirs.c (purge_missing): Remove will_run_mandb argument, + which was always true due to --filename implying --no-purge. + * src/check_mandirs.h (purge_missing): Update prototype. + * src/mandb.c (process_manpath): Move purge_missing and straycats calls + to ... + (mandb): ... here. + +2022-01-29 Colin Watson + + mandb: Factor out some duplicate code + + * src/mandb.c (mandb): Move common create/update logic outside the + database-type-specific #ifdefs. + +2022-01-26 Colin Watson + + Use bool in more places in mandb + + * src/check_mandirs.c (testmandirs): Change "create" parameter and + "created" local variable types to bool. Update all callers. + (check_multi_key): Change "valid" local variable to bool. + (purge_missing): Change "will_run_mandb" parameter and "db_exists" local + variable types to bool. Update all callers. + * src/check_mandirs.h (purge_missing): Update prototype. + * src/mandb.c (struct tried_catdirs_entry): Change "seen" element type + to bool. Update all users. + (mandb): Change "should_create" and "cachedir_tag_exists" local variable + types to bool. + (process_manpath): Change "run_mandb" local variable type to bool. + (is_lang_dir): Return bool. + +2022-01-26 Yi-Jyun Pan + + Update Traditional Chinese translation + + * po/zh_TW.po: Update from Translation Project. + * man/THANKS: Update translator credit. + +2022-01-25 Colin Watson + + Add Spanish translator credit + + * man/THANKS: Add translator credit. + +2022-01-25 Petr Pisar + + Update Czech translation + + * po/cs.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2022-01-24 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2022-01-24 Alejandro Cendejas Tena + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2022-01-24 Alejandro Cendejas Tena + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2022-01-24 Colin Watson + + Fix upload/release machinery to handle .tar.xz + + Release man-db 2.10.0-pre1 + +2022-01-24 Colin Watson + + Improve documentation of search path handling + + Fixes Savannah bug #61862. + + * man/man5/manpath.man5 (SEARCH PATH): New section. + * man/man1/apropos.man1 (ENVIRONMENT): Refer to manpath(5) for details + of MANPATH. + * man/man1/man.man1 (ENVIRONMENT): Likewise. + * man/man1/manpath.man1 (ENVIRONMENT): Likewise. + * man/man1/whatis.man1 (ENVIRONMENT): Likewise. + * man/man8/catman.man8 (ENVIRONMENT): Likewise. + +2022-01-24 Colin Watson + + Fix typos in descriptions of --systems + + Fixes Savannah bug #61861. + + * man/man1/apropos.man1 (OPTIONS): "system's" → "systems'". + * man/man1/man.man1 (Finding manual pages): Likewise. + * man/man1/manpath.man1 (OPTIONS): Likewise. + * man/man1/whatis.man1 (OPTIONS): Likewise. + +2022-01-24 Colin Watson + + Merge branch 'optimize-decompression' into 'main' + + Significantly improve mandb performance + + See merge request cjwatson/man-db!2 + +2022-01-24 Colin Watson + + Optimize manconv_inprocess for UTF-8 target encoding + + If the target encoding is UTF-8, then manconv's first stage (trial + conversion from UTF-8) can more efficiently be replaced with UTF-8 + validation, leaving the original decompressed buffer unchanged on + success. Suggested by Steinar H. Gunderson. + + * src/manconfig.h (UNLIKELY): New macro. + * src/decompress.c (decompress_inprocess_buf): New function. + * src/decompress.h (decompress_inprocess_buf): Add prototype. + * src/utf8.c, src/utf8.h: New files, based on glib's UTF-8 validation + code. + * src/manconv_client.c (manconv_inprocess): Optimize case where + source_encoding is not UTF-8 and target_encoding is UTF-8 by returning + early if UTF-8 validation passes. + * src/Makefile.am (lexgrog_SOURCES, man_SOURCES, man_recode_SOURCES, + mandb_SOURCES): Add utf8.c and utf8.h. + +2022-01-24 Colin Watson + + Significantly improve mandb performance + + Forking large numbers of subprocesses is slow. An ideal fix would + involve work in libpipeline (e.g. generator functions or + multithreading), but in the meantime we can do much better in the common + case of moderately-sized pages compressed using zlib by doing in-process + decompression. On my test system, this takes `mandb -c` from 344 + seconds (or 152 seconds with `MAN_DISABLE_SECCOMP=1` before 50200d151d, + or 78 seconds with `MAN_DISABLE_SECCOMP=1` after 50200d151d) to 10 + seconds. + + Thanks to Steinar H. Gunderson for a proof of concept, which I reworked + extensively. + + Fixes Debian bugs #630799 and #1003089, and Ubuntu bug #1858777. + + * NEWS.md: Document this. Bump version to 2.10.0. + * src/decompress.c (enum decompress_tag): Add DECOMPRESS_INPROCESS. + (struct decompress_inprocess): New structure. + (struct decompress): Add an inprocess element. + (decompress_new_inprocess, decompress_try_zlib, decompress_is_pipeline, + decompress_inprocess_len, decompress_inprocess_replace): New functions. + (decompress_open): Add flags argument. Try in-process zlib + decompression if requested via DECOMPRESS_ALLOW_INPROCESS. Update all + callers to pass a flags argument (0 unless otherwise stated). + (decompress_start, decompress_read, decompress_peek, + decompress_peek_skip, decompress_readline, decompress_peekline, + decompress_wait, decompress_free): Implement in-process mode. + * src/decompress.h (DECOMPRESS_ALLOW_INPROCESS): Define. + (decompress_open): Update prototype. + (decompress_fdopen): Update comment to indicate that this always uses + pipeline-based decompression. + (decompress_is_pipeline, decompress_inprocess_len, + decompress_inprocess_replace): Add prototypes. + (decompress_start, decompress_wait): Update comments to document + behaviour for in-process decompressors. + + * src/manconv.c (add_output): Add output buffer argument; append to + output buffer if given, otherwise write to stdout as before. + (try_iconv): Add and pass output buffer argument. + (manconv): Likewise. Update all callers to pass output buffer argument + (NULL unless otherwise stated). + * src/manconv.h (struct manconv_outbuf): New structure. + (manconv): Update prototype. + * src/manconv_client.c (manconv_inprocess): New function. + * src/manconv_client.h (manconv_inprocess): Add prototype. + + * src/lexgrog.l (find_name): Request in-process decompression unless + operating on a cat page. Use manconv_inprocess rather than add_manconv + in the in-process case. + * src/man.c (grep): Request in-process decompression. + * src/ult_src.c (ult_src): Likewise. + * src/zsoelim.l (try_compressed, zsoelim_open_file): Likewise. + +2022-01-24 Colin Watson + + Avoid a manconv subprocess in more cases + + Suggested by Steinar H. Gunderson. + + * src/manconv_client.c (add_manconv): Return early if the source and + target encodings are equal, not just if they're both UTF-8. + +2022-01-22 Colin Watson + + Make manconv error handling less abrupt + + Exiting immediately on errors works OK if manconv is only ever used in a + subprocess, but that approach makes it hard to use in an in-process + context. + + * src/manconv.c (add_output): New function, factored out of try_iconv + and manconv. + (tried_iconv): New enumeration. + (try_iconv): Use add_output. Return TRIED_ICONV_FATAL where we would + previously have exited the process. + (manconv): Use add_output. Return non-zero if add_output returns + non-zero or try_iconv returns TRIED_ICONV_FATAL. + * src/manconv.h (manconv): Update prototype. + * src/manconv_client.c (manconv_stdin): Exit with FATAL if manconv + returns non-zero. + * src/manconv_main.c (main): Likewise. + +2022-01-22 Colin Watson + + Clarify argument naming in add_manconv + + Suggested by Steinar H. Gunderson. + + * src/manconv_client.c (add_manconv): Rename source to source_encoding, + and target to target_encoding. + * src/manconv_client.h (add_manconv): Update prototype. + +2022-01-19 Colin Watson + + Add a layer of abstraction to decompression + + It would be useful to have an optimized version of the common case of + zlib decompression that doesn't involve forking subprocesses. As + preparation for this, insert an abstraction layer around code that reads + from decompressors. This abstraction layer looks almost identical to + the `libpipeline` API except for name changes, but having it allows us + to implement decompression in some other way. + + Code that requires `libpipeline`-based decompression can use + `decompress_get_pipeline` to assert that the decompressor uses + `libpipeline` and return the underlying `pipeline *`. + + * src/decompress.c (enum decompress_tag, struct decompress, + decompress_new_pipeline, decompress_get_pipeline, decompress_start, + decompress_read, decompress_peek, decompress_peek_skip, + decompress_readline, decompress_peekline, decompress_wait, + decompress_free): Add. + (decompress_open, decompress_fdopen): Return `decompress *` rather than + `pipeline *`. + * src/decompress.h (decompress): New typedef. + (decompress_open, decompress_fdopen): Update prototypes. + (decompress_get_pipeline, decompress_start, decompress_read, + decompress_peek, decompress_peek_skip, decompress_readline, + decompress_peekline, decompress_wait, decompress_free): Add prototypes. + + * src/lexgrog.l (YY_INPUT, find_name, find_name_decompressed): Use + decompression API. + * src/man-recode.c (recode): Likewise. + * src/man.c (get_preprocessors_from_file, get_preprocessors, + make_roff_command, format_display_and_save, format_display, + display_catman, display, display_pages, grep): Likewise. + * src/manconv.c (check_preprocessor_encoding, try_iconv, manconv): + Likewise. + * src/manconv_client.c (manconv_stdin): Likewise. + * src/manconv_main.c (main): Likewise. + * src/straycats.c (check_for_stray): Likewise. + * src/ult_src.c (ult_src): Likewise. + * src/zsoelim.l (YY_INPUT, <>, zsoelim_parse_file, try_compressed, + zsoelim_open_file): Likewise. + + * src/lexgrog.h (find_name_decompressed): Update prototype. + * src/manconv.h (check_preprocessor_encoding, manconv): Likewise. + +2022-01-19 Alejandro Cendejas Tena + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2022-01-18 Colin Watson + + Fix missing options when invoking troff + + Broken by 000cda3ec5. + + * configure.ac: Move PROG_TROFF definition after all assignments to + $troff. + +2022-01-18 Colin Watson + + Fix override-dir handling + + Broken by 000cda3ec5. + + * m4/man-arg-override-dir.m4 (MAN_ARG_OVERRIDE_DIR): Remove superfluous + "$" from AC_DEFINE_UNQUOTED call. + +2022-01-17 Colin Watson + + Remove AM_MAINTAINER_MODE + + I enabled this in fb4afb0b75, saying that timestamps were too fragile + for the rebuild rules to work well. However, I've changed my mind: git + is good at making sure that file modification times are updated when + checking out a different commit, and tarballs include timestamp + information. Moreover, with `AM_MAINTAINER_MODE` and without passing + `--enable-maintainer-mode`, flex output isn't automatically regenerated, + which is impossibly annoying and has tripped me up countless times since + 2010. + + * configure.ac (AM_MAINTAINER_MODE): Remove. + +2022-01-17 Colin Watson + + NEWS.md: Document previous commit + +2022-01-17 Colin Watson + + Merge branch 'C0rn3j-main-patch-74046' into 'main' + + man-db.timer: Use RandomizedDelaySec over AccuracySec + + See merge request cjwatson/man-db!1 + +2022-01-17 Colin Watson + + Avoid libpipeline linkage in libman + + Since it's only used by one function, and not all of man-db's tools need + libpipeline in their own right (e.g. accessdb), it seems worth pushing + this up a layer. + + * lib/encodings.c (struct conversion_entry, conversion_table, + convert_encoding, check_preprocessor_encoding): Move to ... + * src/manconv.c: ... here. + * lib/encodings.h (check_preprocessor_encoding): Move to ... + * src/manconv.h: ... here. + * lib/Makefile.am (libman_la_CPPFLAGS): Remove $(libpipeline_CFLAGS). + (libman_la_LDFLAGS): Remove $(libpipeline_LIBS). + * src/man-recode.c, src/man.c, src/manconv.c: Include manconv.h. + +2022-01-17 Colin Watson + + Pacify cppcheck in check_preprocessor_encoding + + * lib/encoding.c (check_preprocessor_encoding): Explicitly initialize + directive_end and ppsearch. If directive is non-NULL by the time these + are used then they're always initialized, but cppcheck didn't manage to + spot that. + +2022-01-16 Colin Watson + + Update to Gnulib 20220116 + + * bootstrap: Sync to Gnulib 1eae0f7ea3c220d054025f2c9211700665f9f4a0. + * bootstrap.conf (GNULIB_REVISION): Set to + 1eae0f7ea3c220d054025f2c9211700665f9f4a0. + +2022-01-16 Colin Watson + + Move some more declarations out of manconfig.h + + Header includes should be in the same translation unit as the code that + uses them rather than being ambient across the whole project. + + * include/manconfig.h: Remove obsolete header comment about program + paths. + + * include/manconfig.h: Remove includes of "xvasprintf.h", , + "xalloc.h", and "xstrndup.h", as well as "struct pipeline" declaration. + Update all files that relied on these to include/declare them directly + instead as needed. + + * include/manconfig.h (MAN_DB, mkdbname): Move to ... + * libdb/mydbm.h: ... here. + +2022-01-16 Colin Watson + + Move appendstr out of manconfig.h + + * include/manconfig.h (appendstr): Move to ... + * lib/appendstr.h: ... here (new file). + * lib/Makefile.am (libman_la_SOURCES): Add appendstr.h. + * lib/README: Update file names. + * lib/appendstr.c, libdb/db_delete.c, src/catman.c, src/check_mandirs.c, + src/compression.c, src/filenames.c, src/globbing.c, src/man.c, + src/manconv_client.c, src/manconv_main.c, src/manp.c, src/straycats.c, + src/whatis.c, src/zsoelim.l: Include appendstr.h. + +2022-01-16 Colin Watson + + Move debug-related declarations out of manconfig.h + + * include/manconfig.h (debug_level, init_debug, debug, debug_error): + Move to ... + * lib/debug.h: ... here (new file). + * lib/Makefile.am (libman_la_SOURCES): Add debug.h. + * lib/README: Update file names. + * lib/debug.c, lib/encodings.c, lib/sandbox.c, lib/security.c, + lib/util.c, libdb/db_btree.c, libdb/db_delete.c, libdb/db_gdbm.c, + libdb/db_lookup.c, libdb/db_store.c, libdb/db_ver.c, src/accessdb.c, + src/catman.c, src/check_mandirs.c, src/descriptions.c, + src/descriptions_store.c, src/filenames.c, src/globbing.c, + src/globbing_test.c, src/lexgrog_test.c, src/man-recode.c, src/man.c, + src/manconv.c, src/manconv_main.c, src/mandb.c, src/manp.c, + src/manpath.c, src/straycats.c, src/ult_src.c, src/whatis.c, + src/zsoelim.l, src/zsoelim_main.c: Include debug.h. + +2022-01-16 Colin Watson + + Move create_tempdir out of manconfig.h + + * include/manconfig.h (create_tempdir): Move to ... + * lib/tempfile.h: ... here (new file). + * lib/Makefile.am (libman_la_SOURCES): Add tempfile.h. + * lib/tempfile.c, src/man.c: Include tempfile.h. + +2022-01-16 Colin Watson + + Move util.c-related declarations out of manconfig.h + + * include/manconfig.h (is_changed, is_directory, escape_shell, + remove_directory, trim_spaces, lang_dir, init_locale): Move to ... + * lib/util.h: ... here (new file). + * lib/Makefile.am (libman_la_SOURCES): Add util.h. + * lib/util.c, src/accessdb.c, src/catman.c, src/check_mandirs.c, + src/descriptions.c, src/globbing.c, src/globbing_test.c, src/lexgrog.l, + src/lexgrog_test.c, src/man-recode.c, src/man.c, src/manconv_main.c, + src/mandb.c, src/manp.c, src/manpath.c, src/straycats.c, src/whatis.c, + src/zsoelim_main.c: Include util.h. + +2022-01-16 Colin Watson + + Move comp_info and comp_file out of manconfig.h + + * include/manconfig.h (comp_info, comp_file): Move to ... + * src/compression.h: ... here (new file). + * src/Makefile.am (lexgrog_SOURCES, man_SOURCES, man_recode_SOURCES, + mandb_SOURCES): Add compression.h. + * src/compression.c, src/filenames.c, src/man-recode.c, src/man.c, + src/straycats.c, src/ult_src.c: Include compression.h. + +2022-01-16 Colin Watson + + Move straycats out of manconfig.h + + * include/manconfig.h (straycats): Move to ... + * src/straycats.h: ... here (new file). + * src/Makefile.am (mandb_SOURCES): Add straycats.h. + * src/mandb.c, src/straycats.c: Include straycats.h. + +2022-01-16 Colin Watson + + Use lexgrog type definitions consistently + + * include/manconfig.h (MANPAGE, CATPAGE): Move to ... + * src/lexgrog.h (MANPAGE, CATPAGE): ... here. + * src/lexgrog.l (find_name, find_name_decompressed): Compare p_lg->type + against CATPAGE rather than testing its truth value. + * src/lexgrog_test.c (main): Set type to MANPAGE/CATPAGE rather than + 0/1. + +2022-01-16 Colin Watson + + Update translation files + + * po/man-db.pot, po/*.po: Update. + +2022-01-16 Colin Watson + + Fix build system following changes to include/*.h + + * Makefile.am (noinst_HEADERS): Add include/comp_src.h and + include/manconfig.h. + * lib/Makefile.am (libman_la_CPPFLAGS): Replace + -I$(top_builddir)/include with -I$(top_srcdir)/include. + * libdb/Makefile.am (libmandb_la_CPPFLAGS): Likewise. + * src/Makefile.am (AM_CPPFLAGS): Likewise. + * src/tests/Makefile.am (AM_CPPFLAGS): Likewise. + +2022-01-16 Colin Watson + + Remove Checker support + + The GNU Checker package was last released in 2005, and its web page + (https://www.gnu.org/software/checker/) says that it has been + decommissioned in favour of Valgrind. + + * include/manconfig.h (chkr_garbage_detector): Remove. + * src/man.c (main): Remove call to chkr_garbage_detector. + * src/mandb.c (main): Likewise. + * src/whatis.c (search): Likewise. + +2022-01-16 Colin Watson + + Remove obsolete include/README + + * include/README: Remove; it claimed that this directory contains files + created by configure, which is no longer true, and it said nothing else + useful. + * Makefile.am (dist_noinst_DATA): Remove include/README. + +2022-01-16 Colin Watson + + Stop generating include/*.h from configure + + This was inconvenient when making changes to those central header files. + All `configure`-generated preprocessor symbols are now in `config.h`. + + * configure.ac: Define various PROG_* symbols. Remove AC_SUBST calls + for compressors and decompressors. + (AC_CONFIG_FILES): Remove include/comp_src.h and include/manconfig.h. + * m4/man-arg-override-dir.m4: Define OVERRIDE_DIR symbol. + * include/manconfig.h.in: Rename to ... + * include/manconfig.h: ... this. Remove PROG_*, OVERRIDE_DIR, and + COMPRESS_EXT definitions. + * include/comp_src.h.in: Rename to ... + * include/comp_src.h: ... this. + * README.md: Update references to include/manconfig.h. + * .gitignore: Remove include/*.h. + +2022-01-16 Colin Watson + + Rename program preprocessor symbols to PROG_* + + This is mainly in order to avoid potential confusion with `PIC` (defined + when building position-independent code), but I renamed all these + variables for consistency. + + * include/manconfig.h.in (PAGER, CAT, WEB_BROWSER, TR, GREP, TROFF, + NROFF, EQN, NEQN, TBL, COL, VGRIND, REFER, GRAP, PIC, COMPRESSOR, + GUNZIP, UNCOMPRESS, BUNZIP2, UNLZMA, UNXZ, LZIP, UNZSTD): Rename to ... + (PROG_PAGER, PROG_CAT, PROG_BROWSER, PROG_TR, PROG_GREP, PROG_TROFF, + PROG_NROFF, PROG_EQN, PROG_NEQN, PROG_TBL, PROG_COL, PROG_VGRIND, + PROG_REFER, PROG_GRAP, PROG_PIC, PROG_COMPRESSOR, PROG_GUNZIP, + PROG_UNCOMPRESS, PROG_BUNZIP2, PROG_UNLZMA, PROG_UNXZ, PROG_LZIP, + PROG_UNZSTD): ... these (respectively). Update all references. + +2022-01-16 Colin Watson + + Move lexgrog-related bits out of manconfig.h + + It's generally cleaner for things like this to be in a dedicated header + file. + + * include/manconfig.h.in (struct lexgrog, find_name, + find_name_decompressed): Move to ... + * src/lexgrog.h: ... here (new file). Simplify declarations slightly. + * include/manconfig.h.in (lexgrog filter enum): Move to ... + * src/lexgrog.l: ... here. + * src/Makefile.am (lexgrog_SOURCES, mandb_SOURCES): Add lexgrog.h. + * src/check_mandirs.c, src/lexgrog.l, src/lexgrog_test.c, + src/straycats.c: Include lexgrog.h. + +2022-01-16 Martin + + man-db.timer: Use RandomizedDelaySec Avoids congesting resources, otherwise this runs daily at 12:00 and 00:00 https://www.freedesktop.org/software/systemd/man/systemd.timer.html + +2022-01-09 Colin Watson + + Recognize Arabic and Persian translations of NAME + + * src/lexgrog.l (ar_name, fa_name): Add. + (name): Add ar_name and fa_name. + * NEWS.md: Document this. + +2022-01-09 Colin Watson + + Note Macedonian support + + * src/lexgrog.l: Note that bg_name also works for mk (Macedonian). + +2022-01-09 Colin Watson + + Downgrade "malformed .lf request" warning to debug + + Fixes Debian bug #998426. + + * src/zsoelim.l (.): Downgrade and rephrase message, + since *roff arithmetic expressions are valid here and we can't + reasonably parse them. + * NEWS.md: Document this. + +2022-01-09 Colin Watson + + NEWS.md: Fix rendering with some parsers + +2022-01-09 Colin Watson + + Use MAYBE_UNUSED rather than _GL_UNUSED + + We should be using the public name from Gnulib's `attribute.h`. + + * lib/orderfiles.c (order_files) [!HAVE_LINUX_FIEMAP_H && + !HAVE_POSIX_FADVISE]: Use MAYBE_UNUSED rather than _GL_UNUSED. + * lib/sandbox.c (_sandbox_load) [!HAVE_LIBSECCOMP]: Likewise. + * lib/security.c (drop_privs): Likewise. + * libdb/db_ndbm.c (unsorted_nextkey): Likewise. + * src/accessdb.c (help_filter): Likewise. + * src/check_mandirs.c (chown_if_possible) [!MAN_OWNER]: Likewise. + * src/convert.c (close_conv_to_locale): Likewise. + * src/decompress.c (decompress_zlib): Likewise. + * src/lexgrog_test.c (help_filter): Likewise. + * src/man.c (help_filter, squeeze_blank_lines, disable_hyphenation, + disable_justification): Likewise. + * src/manconv.c (manconv): Likewise. + * src/manp.c (free_config_file): Likewise. + * src/tests/fspause.c (main): Likewise. + * src/whatis.c (help_filter): Likewise. + * src/zsoelim_main.c (parse_opt): Likewise. + +2022-01-09 Colin Watson + + lexgrog: Produce output in the user's locale + + Fixes Debian bug #970482. + + * src/whatis.c (simple_convert): Move to ... + * src/convert.c: ... here (new file). Rename to convert_to_locale, and + automatically handle setup/teardown of the iconv descriptor. + * src/convert.h: New file. + + * src/whatis.c (display): Use convert_to_locale instead of + simple_convert. + (main): Remove setup/teardown of iconv descriptor, now handled + automatically by convert_to_locale. + * src/lexgrog_test.c (main): Convert name and whatis to the user's + locale. + * src/Makefile.am (lexgrog_SOURCES, whatis_SOURCES): Add convert.c and + convert.h. + * NEWS.md: Document this. + +2022-01-03 Colin Watson + + Add man-pages(7) reference to man(1) + + Fixes Debian bug #974174. + + * man/man1/man.man1 (DESCRIPTION): Add man-pages(7) reference to + description of section 7. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + * NEWS.md: Document this. + +2022-01-03 Colin Watson + + Document MAN_DISABLE_SECCOMP and PIPELINE_DEBUG + + Fixes Debian bug #941622. + + * man/man1/man.man1 (ENVIRONMENT): Document MAN_DISABLE_SECCOMP and + PIPELINE_DEBUG. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + * NEWS: Document this. + +2022-01-03 Colin Watson + + NEWS: Document previous commit + +2022-01-03 Colin Watson + + Reduce overhead of MAN_DISABLE_SECCOMP=1 + + If MAN_DISABLE_SECCOMP=1 is set (or if seccomp is otherwise + unavailable), then there's no need to call seccomp_init and friends, + which can have significant overhead even if we never actually load the + resulting filter. + + Pointed out by Steinar H. Gunderson in https://bugs.debian.org/1003089. + + * lib/sandbox.c (make_seccomp_filter): Return NULL early if + can_load_seccomp returns false. + (_sandbox_load): Return early if the relevant context is NULL. + (sandbox_free): Only call seccomp_release if the relevant context is + non-NULL. + +2022-01-03 Colin Watson + + Indicate that merge requests are preferred + + * docs/HACKING.md (Sending patches): Describe merge request workflow and + indicate that it is preferred. + +2022-01-03 Colin Watson + + Reformat hacking documentation as Markdown + + * docs/HACKING: Move to ... + * docs/HACKING.md: ... here. Reformat as Markdown. + * docs/Makefile.am (dist_noinst_DATA): Replace HACKING with HACKING.md. + +2022-01-03 Colin Watson + + Add release automation + + When a tag is pushed to GitLab, upload the bootstrapped source tarball + to the package registry, and create a release in GitLab associated with + the tag. + + * .gitlab-ci.yml (stages): Remove test, since it had no jobs. Add + upload and release. + (build-distcheck:script): Configure with --enable-maintainer-mode, to + ensure that flex-generated scanners are fresh. + (upload, release): New jobs. + * release.sh: Remove. GitLab CI handles building releases now. + * Makefile.am (EXTRA_DIST): Remove release.sh. + * docs/HACKING: Update for GitLab-based release process. + +2022-01-03 Colin Watson + + Reformat release notes as Markdown + + * NEWS: Move to ... + * NEWS.md: ... here. Reformat as Markdown. + * Makefile.am (dist_noinst_DATA): Remove NEWS; Automake automatically + includes this file (or NEWS.md) in the distribution without help. + * README.md, docs/HACKING: Refer to NEWS.md instead of NEWS. + +2022-01-02 Colin Watson + + Remove superfluous quotes + + * Makefile.am (gen_start_date): Remove superfluous quotes. + +2022-01-02 Colin Watson + + Add build-distcheck CI artifact + + This should eventually allow publishing release tarballs built by a CI + process rather than on my laptop. + + * .gitlab-ci.yml (variables): Set GIT_DEPTH to 0; we need full history + in order to build the ChangeLog file. + (bootstrap:before_script): Add wget, needed to fetch Gnulib PO files. + (build-distcheck:before_script): Add git, needed by gitlog-to-changelog. + (build-distcheck:artifacts): Add bootstrapped/*.tar.xz. + +2022-01-02 Colin Watson + + Switch CI image to debian:unstable + + This gives us newer versions of various dependencies such as the + autotools. + + * .gitlab-ci.yml (default:image): Switch from gcc to debian:unstable. + (pre-commit:before_script, bootstrap:before_script): Explicitly install + git. + +2022-01-02 Colin Watson + + Pacify gcc -fanalyzer in manconv + + * src/manconv_main.c (main): Assert that from_code is non-NULL; this is + guaranteed by the argp state machine, but the compiler can't prove that. + +2022-01-02 Colin Watson + + Fix crash in globbing if run with no arguments + + * src/globbing_test.c (parse_opt): Emit a usage message if there are no + non-option arguments. + (main): Assert that remaining_args is non-NULL; this is now guaranteed + by the argp state machine, but the compiler can't prove that. + * NEWS: Document this. + +2022-01-02 Colin Watson + + Pacify gcc -fanalyzer in catman + + It isn't actually possible for sections to be NULL after argp parsing + has finished, but "gcc -fanalyzer" can't easily determine that, and it's + easy enough to arrange for it not to matter. + + * src/catman.c (main): Handle case where sections is NULL. + +2022-01-02 Colin Watson + + Pacify gcc -fanalyzer in some database functions + + In GCC 11.2.0, -fanalyzer seems to get confused by copies by assignment + of "struct datum", and thinks that there are use-after-free or + double-free possibilities with multiple loop iterations. These seem to + be false positives, so ignore them for now. + + * libdb/db_lookup.c (dblookup_pattern): Ignore false use-after-free + diagnostic. + * src/accessdb.c (main): Ignore false double-free diagnostics. + * src/catman.c (parse_for_sec): Ignore false use-after-free diagnostics. + * src/check_mandirs.c (sanity_check_db): Ignore false double-free + diagnostics. + (purge_pointers, purge_missing): Ignore false use-after-free + diagnostics. + * src/whatis.c (do_apropos): Ignore false use-after-free and double-free + diagnostics. + +2022-01-02 Colin Watson + + Pacify gcc -fanalyzer in dbdelete + + The refs list can't in fact be empty by this point (because we checked + earlier that we could look up this_ref in it), but it's hard for "gcc + -fanalyzer" to prove that, so help it understand that multi_content can + never end up being NULL. + + * libdb/db_delete.c (dbdelete): Initialize multi_content before looping + over refs. + +2022-01-02 Colin Watson + + Assert that some xasprintf calls return non-NULL + + "gcc -fanalyzer" notices that xasprintf can return NULL in some + situations (string length > INT_MAX, invalid format string, or multibyte + conversion error), and that we weren't handling this in various cases + where we use the return value in contexts that require non-NULL values. + The situations seem obscure enough for simple asserts to be appropriate. + + * lib/pathsearch.c (pathsearch): Assert that xasprintf returns non-NULL. + * lib/tempfile.c (create_tempdir): Likewise. + * lib/util.c (remove_directory): Likewise. + * libdb/db_lookup.c (make_multi_key): Likewise. + * libdb/db_store.c (make_content, dbstore): Likewise. + * src/check_mandirs.c (add_dir_entries, fix_permissions_tree): Likewise. + * src/compression.c (comp_file): Likewise. + * src/globbing.c (look_for_file): Likewise. + * src/man.c (main): Likewise. + * src/mandb.c (mandb, purge_catsubdirs): Likewise. + * src/manp.c (pathappend): Likewise. + * src/ult_src.c (find_include): Likewise. + * src/whatis.c (use_grep): Likewise. + * src/zsoelim.l (zsoelim_open_file): Likewise. + +2022-01-02 Colin Watson + + Fix path searching crash if getcwd fails + + xgetcwd can return NULL if getcwd returns NULL for reasons other than + ENOMEM, so we should handle this. Found by "gcc -fanalyzer". + + * lib/pathsearch.c (pathsearch, directory_on_path): Emit a fatal error + if xgetcwd returns NULL. + * po/POTFILES.in: Add lib/pathsearch.c. + * NEWS: Document this. + +2022-01-02 Colin Watson + + Update to Gnulib 20211231 + + In line with Gnulib, we now require Autoconf 2.64. + + * bootstrap: Sync to Gnulib 14db2b71b5bd05b94ec6126617fd32cd5f1016cd. + * bootstrap.conf (GNULIB_REVISION): Set to + 14db2b71b5bd05b94ec6126617fd32cd5f1016cd. + (buildreq): Bump required autoconf version to 2.64. + * configure.ac (AC_PREREQ): Bump to 2.64. + (--enable-gcc-warnings): New option, based on code in coreutils. Use + this to enable -fanalyzer only if --enable-gcc-warnings=expensive is + used; it's useful but slow. + * include/manconfig.h.in (create_tempdir, appendstr): Move NODISCARD to + the start of these function declarations, required by draft C2x. + * patches/argp-domain.patch: Rebase. + * NEWS: Document this. + +2022-01-02 Colin Watson + + Fix NULL dereference in get_locale_charset callers + + * lib/encodings.c (get_canonical_charset_name): Declare argument and + return value as non-NULL. + (get_locale_charset): Declare return value as non-NULL. Fall back to + "ANSI_X3.4-1968" if locale_charset returned NULL or the empty string. + +2022-01-02 Colin Watson + + Trim down direct Gnulib dependencies a little + + * bootstrap.conf (gnulib_modules): Add c99 (already used indirectly, but + seems like a good idea to request directly now). Remove getopt-gnu, + lock, and unsetenv, none of which we use directly. Replace fcntl with + fcntl-h and signal with signal-h, since we use the corresponding header + files directly but not the corresponding functions. + * .gitignore: Remove lib/getopt.h. + +2022-01-01 Colin Watson + + Fix warnings with Autoconf >= 2.70 + + * configure.ac (AC_PROG_LEX): Add noyywrap argument (new in Autoconf + 2.70, but ignored in previous versions). + * m4/man-bdb.m4 (MAN_CHECK_BDB): Autoconf 2.70 warns about non-literal + arguments to AC_CHECK_HEADERS. Refactor loops so that the header and + library names are visible to m4. + +2022-01-01 Colin Watson + + Add an SC_ALLOW_PERMISSIVE macro + + This plays slightly better with clang-format. + + * lib/sandbox.c (SC_ALLOW_PERMISSIVE): New macro. + (make_seccomp_filter): Use SC_ALLOW_PERMISSIVE instead of forms such as + "if (permissive) SC_ALLOW (name);". + +2022-01-01 Colin Watson + + Use Gnulib attribute.h properly + + manconfig.h previously used _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM without + first including "stdio.h", which caused build failures. We should be + using the public names anyway. + + * bootstrap.conf (gnulib_modules): Add attribute. + + * include/manconfig.h.in (create_tempdir, appendstr): Use NODISCARD + rather than _GL_ATTRIBUTE_NODISCARD. + + * include/manconfig.h.in (debug, debug_error): Use ATTRIBUTE_FORMAT + rather than _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM. + * lib/debug.c (vdebug): Likewise. + + * include/manconfig.h.in (appendstr): Use ATTRIBUTE_SENTINEL rather than + _GL_ATTRIBUTE_SENTINEL. + + * lib/encodings.c (get_page_encoding): Use ATTRIBUTE_MALLOC rather than + _GL_ATTRIBUTE_MALLOC. + * lib/util.c (trim_spaces): Likewise. + + * lib/encodings.c (is_roff_device, get_output_encoding, + get_less_charset, get_jless_charset): Use ATTRIBUTE_PURE rather than + _GL_ATTRIBUTE_PURE. + * lib/glcontainers.c (string_equals, string_hash): Likewise. + * lib/security.c (running_setuid): Likewise. + * src/manp.c (canonicalized_path_equals, canonicalized_path_hash): + Likewise. + * src/whatis.c (match): Likewise. + + * libdb/db_lookup.c (dash_if_unset): Use ATTRIBUTE_CONST rather than + _GL_ATTRIBUTE_CONST. + * libdb/db_store.c (compare_ids): Likewise. + +2022-01-01 Colin Watson + + Reduce indentation depth using C99 + + * src/man.c (parse_opt): Remove an enclosing block and associated + indentation level, since C99 allows mixing declarations and code. + +2022-01-01 Colin Watson + + Pacify pre-commit + + * lib/mp.h: Remove trailing whitespace. + +2022-01-01 Colin Watson + + Simplify interface to container iterator macros + + The Gnulib container iterator macros (GL_LIST_FOREACH_* and + GL_MAP_FOREACH_*) have to run code both before and after a chunk of + user-supplied code. This previously required a START/END macro pair + used something like this: + + GL_LIST_FOREACH_START (names, name) { + ... + } GL_LIST_FOREACH_END (names); + + This doesn't look natural in C, and so it was easy to get it wrong. + + It's possible to do better, at the cost of some tricky macros. + Fortunately, Simon Tatham has already done the hard work in + https://www.chiark.greenend.org.uk/~sgtatham/mp/, and the necessary + header file is MIT-licensed, so we can incorporate it. Now these + iterator macros are used more like this, which is a much more natural C + style: + + GL_LIST_FOREACH (names, name) { + ... + } + + * lib/mp.h: New file. + * lib/Makefile.am (libman_la_SOURCES): Add mp.h. + * lib/README: Add mp.h. Rephrase introductory text about licensing to + account for an MIT-licensed file. + * lib/glcontainers.h (GL_LIST_FOREACH_START, GL_LIST_FOREACH_END): + Rewrite as ... + (GL_LIST_FOREACH): ... this. Update all callers. + (GL_MAP_FOREACH_START, GL_MAP_FOREACH_END): Rewrite as ... + (GL_MAP_FOREACH): ... this. Update all callers. + * NEWS, README.md, docs/HACKING: Document C99 compiler requirement. + +2022-01-01 Colin Watson + + Simplify some GCC attribute handling + + * include/manconfig.h.in (ATTRIBUTE_FORMAT_PRINTF, + ATTRIBUTE_WARN_UNUSED_RESULT, ATTRIBUTE_SENTINEL): Remove in favour of + Gnulib-provided macros. + (create_tempdir, appendstr): Use _GL_ATTRIBUTE_NODISCARD rather than + ATTRIBUTE_WARN_UNUSED_RESULT. + (debug, debug_error): Use _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM rather than + ATTRIBUTE_FORMAT_PRINTF. + (appendstr): Use _GL_ATTRIBUTE_SENTINEL rather than ATTRIBUTE_SENTINEL. + * lib/debug.c (vdebug): Use _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM rather + than ATTRIBUTE_FORMAT_PRINTF. + +2022-01-01 Colin Watson + + Introduce pre-commit + + * .pre-commit-config.yaml: New file. + * .gitlab-ci.yml (stages): Add bootstrap. + (pre-commit): New job. + (bootstrap): Move to bootstrap stage. + + Remove trailing whitespace from all files. + +2022-01-01 Colin Watson + + Update licence texts + + There are no substantive licensing changes here, only formatting + adjustments and referring to the "GNU Lesser General Public License" + rather than the "GNU Library General Public License". + + * docs/COPYING: Update from current contents of + https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. + * docs/COPYING.LIB: Update from current contents of + https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt. + +2021-12-31 Colin Watson + + Document migration to GitLab + + * README.md: Add link to GitLab repository. + (Contacting the maintainer): Add GitLab issues link. + * docs/HACKING (Revision control): Update for GitLab. + * man/man1/apropos.man1 (BUGS): Add GitLab issues link. + * man/man1/lexgrog.man1 (BUGS): Likewise. + * man/man1/man-recode.man1 (BUGS): Likewise. + * man/man1/man.man1 (BUGS): Likewise. + * man/man1/manconv.man1 (BUGS): Likewise. + * man/man1/manpath.man1 (BUGS): Likewise. + * man/man1/whatis.man1 (BUGS): Likewise. + * man/man1/zsoelim.man1 (BUGS): Likewise. + * man/man5/manpath.man5 (BUGS): Likewise. + * man/man8/accessdb.man8 (BUGS): Likewise. + * man/man8/catman.man8 (BUGS): Likewise. + * man/man8/mandb.man8 (BUGS): Likewise. + * NEWS: Document this. + +2021-11-17 Colin Watson + + Reformat README + + * README: Move to ... + * README.md: ... here. Reformat as Markdown. + * Makefile.am (dist_noinst_DATA): Replace README with README.md. + * docs/INSTALL.quick: Likewise. + +2021-11-16 Colin Watson + + Add .gitlab-ci.yml + +2021-09-19 Colin Watson + + Update some obsolete Autoconf macros + + * configure.ac: Replace AC_GNU_SOURCE and AC_ISC_POSIX with + AC_USE_SYSTEM_EXTENSIONS. Replace AC_CONFIG_HEADER with + AC_CONFIG_HEADERS. Remove an obsolete comment. + +2021-09-19 Colin Watson + + Stop using obsolete AC_TRY_LINK + + This has been obsolete since Autoconf 2.55. Use its AC_LINK_IFELSE + expansion instead. + + * m4/man-bdb.m4 (MAN_CHECK_BDB): Expand AC_TRY_LINK call using + AC_LINK_IFELSE. + +2021-09-18 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2021-09-18 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2021-07-11 Colin Watson + + Fix mishandling of suffix matches in manpath + + Fixes Savannah bug #60906. + + * src/manp.c (pathappend): strstr might return matches that are not at + the start of a manpath element, resulting in incorrect truncation. Skip + any such matches. + +2021-02-08 Colin Watson + + Release man-db 2.9.4 + +2021-02-08 Colin Watson + + Fix distribution of Romanian manual page translation + + Accidentally omitted from 1c7b46aecbed76c9833e0a5c833fc2ffd1a7a85a. + + * man/Makefile.am (DIST_SUBDIRS): Add ro. + +2021-02-08 Мирослав Николић + + Update Serbian manual page translation + + * man/po4a/po/sr.po: Update from Translation Project. + +2020-12-11 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2020-09-13 Colin Watson + + Handle \[en] escapes in NAME section + + Fixes Debian bug #970122. + + * src/lexgrog.l (MAN_NAME): Treat "\[en]" (and similar) as another + synonym for "\-", and thus as a separator. (This spelling is + groff-specific; the older "\(en" spelling was already accepted.) + * NEWS: Document this. + +2020-08-22 Colin Watson + + Fix gcc -Wzero-length-bounds warning + + * lib/orderfiles.c (order_files): Avoid accessing an element of a + zero-length array. + +2020-08-22 S. Gilles + + Allow clock_gettime64; return ENOSYS so libcs can engage fallbacks + + libcs such as musl expect ENOSYS to be returned (not EPERM) in their + fallback code, so change the seccomp filter to be more agreeable to + them. + + At the same time, clock_gettime is permitted in the filter, so permit + clock_gettime64 as well -- it will be needed by 2038 in any case. + + * lib/sandbox.c (make_seccomp_filter): Set default action to + SCMP_ACT_ERRNO (ENOSYS). Allow clock_gettime64. + * NEWS: Document this. + +2020-07-04 Colin Watson + + Add Romanian manual page translation + + * man/po4a/po/ro.po: New from Translation Project (thanks, Florentina + Mușat). + * configure.ac (AC_CONFIG_FILES): Add man/ro/Makefile. + * man/LINGUAS.po4a: Add ro. + * man/Makefile.am (DIST_SUBDIRS): Add ro. + * man/ro/Makefile.am, man/ro/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/ro.po. + * man/po4a/po4a.cfg (po4a_langs): Add ro. + * man/THANKS: Update translator credit. + * .gitignore: Add man/ro/man1, man/ro/man5, and man/ro/man8. + +2020-07-04 Colin Watson + + Remove "Type" column from DB table in mandb(8) + + The database types table in mandb(8) has always been a bit + dubiously-placed; it's really more about how man-db is configured, and + as such makes more sense in manual/db.me (which indeed has an extended + version of the same table). It causes particular problems in translated + versions of this page, where it's very easy for it to become too wide + and cause "make check" failures. + + A proper fix for this would probably require updating existing + translations, but an easy improvement is to remove the "Type" column: it + has negligible relevance here, and removing it makes it much easier for + translated versions to stay within page width limits. + + * man/man8/mandb.man8 (DATABASE CACHES): Remove "Type" column from + table. + +2020-07-02 Colin Watson + + Recognise Romanian translations of NAME + + * src/lexgrog.l (ro_name): Add. + (name): Add ro_name. + * NEWS: Document this. + +2020-06-24 Florentina Mușat + + Update Romanian translation + + * po/ro.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2020-06-22 Colin Watson + + Release man-db 2.9.3 + +2020-06-22 Colin Watson + + Avoid po4a confusion with \c + + po4a >= 0.58 (I think) changes its handling of \c slightly, resulting in + incorrect output for the admittedly awkward uses of \c in man(1). + Rearrange markup to avoid this. + + * man/man1/man.man1 (OVERVIEW): Recast description of the syntax of + locale environment variables using \f[BIR] rather than .B/.RI and \c. + (Controlling formatted output): Coalesce markup for the default prompt + into a single .BI macro, avoiding the need for \c. Unfuzzy most + translations. + * NEWS: Document this. + +2020-06-22 Colin Watson + + Fix po4a version comparison + + po4a's versions don't quite conform to Perl's standard versioning + arrangements, producing very confusing results when trying to compare + two-component and three-component versions (because "0.47" is equivalent + to "v0.470.0"). Perhaps we should use some other version comparison + system instead, but in the meantime patch things up so that what we + currently use behaves more sensibly. + + * man/po4a/Locale/Po4a/Manext.pm (_parse_version): New subroutine. + (shiftline, pushline, translate): Use _parse_version, and always use a + leading "v" on the right-hand side. + +2020-06-01 Colin Watson + + Clarify description of zstd in configure + + Suggested by crabbed halo ablution in Savannah bug #57558. + + * configure.ac: Describe zstd as "LZ77/entropy-coding compression + utility". + +2020-06-01 Colin Watson + + Release man-db 2.9.2 + +2020-06-01 Colin Watson + + Update to Gnulib 20200531 + + * bootstrap: Sync to Gnulib d4429157c13b49d1749f5ea18fb30e24ffa646aa. + * bootstrap.conf (GNULIB_REVISION): Set to + d4429157c13b49d1749f5ea18fb30e24ffa646aa. + +2020-06-01 Bernhard Rosenkränzer + + Add support for zstd-compressed manual pages + + * configure.ac: Check for zstd. + * include/comp_src.h.in (comp_list): Add zstd. + * include/manconfig.h.in: Define UNZSTD. + * NEWS: Document this. + +2020-05-31 Colin Watson + + Fix configure logic for enabling COMP_CAT + + Only enable COMP_CAT if a compressor is defined. (We don't have all + possible decompression utilities set up to be compressors too.) + + * configure.ac: Only enable COMP_CAT if $compressor is non-empty. + +2020-05-31 Colin Watson + + Make gxditview work with seccomp sandbox + + "man -X" and friends used to work by running groff with -X, causing it + to run gxditview itself. This didn't work with the seccomp sandbox: the + sorts of system calls that a text processor needs to make are not very + much related to the sorts of system calls that an X client needs to + make. + + Instead, run groff with -X -Z to pass the appropriate options to troff + but stop it from running gxditview, and then run gxditview ourselves + without sandboxing. This also lets us set a better window title. + + * src/man.c (make_roff_command): In gxditview mode, run groff with -Z as + well as -X. + (make_display_command): In gxditview mode, add an appropriate gxditview + process. + (display): In gxditview mode, call the ordinary "display formatted page" + logic, without saving a cat page. + +2020-05-31 Colin Watson + + * NEWS: Move misplaced entry to "Fixes". + +2020-05-31 Colin Watson + + Fix document font size for -X75-12 and -X100-12 + + Reported by Konrad Schwarz. + + * src/man.c (make_roff_command): Add the "-rS12" argument if the + argument to -X contains "-12". + * NEWS: Document this. + +2020-05-17 Stéphane Aulery + + Update French manual page translation + + * man/po4a/po/fr.po: Update from Translation Project. + * man/THANKS: Update translator credit. + +2020-04-12 Mario Blättermann + + Update German manual page translation + + Fixes Debian bug #955320. + + * man/po4a/po/de.po: Update from Translation Project. + +2020-04-12 Colin Watson + + NEWS: Remove superfluous ")" + +2020-04-03 Boyuan Yang <073plan@gmail.com> + + Update Simplified Chinese manual page translation + + * man/po4a/po/zh_CN.po: Update from Translation Project. + +2020-04-02 Мирослав Николић + + Update Serbian translation + + * po/sr.po: Update from Translation Project. + +2020-03-29 Colin Watson + + Add bug tracker link to manual pages + + Fixes Savannah bug #58039. + + * man/man1/apropos.man1 (BUGS), man/man1/lexgrog.man1 (BUGS), + man/man1/man-recode.man1 (BUGS), man/man1/man.man1 (BUGS), + man/man1/manconv.man1 (BUGS), man/man1/manpath.man1 (BUGS), + man/man1/whatis.man1 (BUGS), man/man1/zsoelim.man1 (BUGS), + man/man8/accessdb.man8 (BUGS), man/man8/catman.man8 (BUGS), + man/man8/mandb.man8 (BUGS): New section, containing a link to the bug + tracker. + * man/man5/manpath.man5 (BUGS): Add a link to the bug tracker. + * NEWS: Document this. + +2020-03-28 Bjarni Ingi Gislason + + man/man8/*: Fix misuse of two-fonts macros + + Correct the misuse of a two-fonts macro, which function is to + + 1) use the first font for each odd numbered argument and the second + font for all others. + + 2) join (output) the arguments without an intervening space. + + Fixes Debian bug #955187. + + * man/man8/accessdb.man8 (OPTIONS): Use a one-font macro when there is + only a single argument. + * man/man8/catman.man8 (OPTIONS): Likewise. + * man/man8/mandb.man8 (OPTIONS): Likewise. + +2020-03-28 Bjarni Ingi Gislason + + man/man1/*: Fix misuse of two-fonts macros + + Correct the misuse of a two-fonts macro, which function is to + + 1) use the first font for each odd numbered argument and the second + font for all others. + + 2) join (output) the arguments without an intervening space. + + Fixes Debian bug #955185. + + * man/man1/lexgrog.man1 (OPTIONS): Use a one-font macro when there is + only a single argument. + * man/man1/man-recode.man1 (OPTIONS): Likewise. + * man/man1/man.man1 (DESCRIPTION): Likewise. + * man/man1/whatis.man1 (OPTIONS): Likewise. + * man/man1/zsoelim.man1 (DESCRIPTION): Likewise. + +2020-02-25 Colin Watson + + Release man-db 2.9.1 + +2020-02-25 Colin Watson + + Update to Gnulib 20200224 + + * bootstrap: Sync to Gnulib d279bc6d9f9323e19ad8c32b6d12ff96dfb0f5ba. + * bootstrap.conf (GNULIB_REVISION): Set to + d279bc6d9f9323e19ad8c32b6d12ff96dfb0f5ba. + (gnulib_modules): Add havelib, needed for AM_GNU_GETTEXT in + configure.ac. + +2020-01-27 Colin Watson + + Add cat path configuration for /snap/man + + Add MANDB_MAP entry mapping the prospective /snap/man directory to + /var/cache/man/snap, as discussed with the snapd team. + + * src/man_db.conf.in: Add "MANDB_MAP /snap/man /var/cache/man/snap". + * NEWS: Document this. + +2019-12-26 Felipe Castro + + Update Esperanto translation + + * po/eo.po: Update from Translation Project. + +2019-12-26 Sebastian Rasmussen + + Update Swedish manual page translation + + * man/po4a/po/sv.po: Update from Translation Project. + +2019-12-26 Sebastian Rasmussen + + Update Swedish translation + + * po/sv.po: Update from Translation Project. + +2019-11-23 Colin Watson + + Drop fdutimens patch for GNU/Hurd + + The bug (https://bugs.debian.org/762677) that this was working around + was fixed in glibc 2.28, or Debian glibc 2.27-2. + + * patches/fdutimens-hurd.patch: Remove. + * bootstrap.conf (bootstrap_post_import_hook): Stop applying + patches/fdutimens-hurd.patch. + * Makefile.am (EXTRA_DIST): Remove patches/fdutimens-hurd.patch. + * NEWS: Document this. + +2019-10-23 Colin Watson + + Release man-db 2.9.0 + +2019-10-23 Antonio Ceballos Roa + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2019-10-18 Antonio Ceballos Roa + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2019-10-10 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2019-10-10 Antonio Ceballos Roa + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2019-10-07 Antonio Ceballos Roa + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + +2019-10-05 Antonio Ceballos Roa + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + * man/THANKS: Update translator credit. + +2019-10-05 Yuri Kozlov + + Update Russian manual page translation + + * man/po4a/po/ru.po: Update from Translation Project. + +2019-10-05 Pedro Albuquerque + + Update Portuguese manual page translation + + * man/po4a/po/pt.po: Update from Translation Project. + +2019-10-05 Pedro Albuquerque + + Update Portuguese translation + + * po/pt.po: Update from Translation Project. + +2019-10-05 Rafael Fontenelle + + Update Brazilian Portuguese manual page translation + + * man/po4a/po/pt_BR.po: Update from Translation Project. + +2019-10-03 Colin Watson + + Fix language/territory candidate comparison logic + + When I extracted the COMPARE_LOCALE_ELEMENTS macro, I apparently left in + an explicit reference to territory that should have been the "elt" + parameter. As a result, some cases of language and territory comparison + went wrong, in particular resulting in pt_BR users seeing pt pages ahead + of pt_BR pages. + + Reported by Rafael Fontenelle. + + * src/man.c (compare_candidates): Fix incorrect territory-specific + comparison in COMPARE_LOCALE_ELEMENTS. + * NEWS: Document this. + +2019-10-03 Stéphane Aulery + + Update French translation + + * po/fr.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2019-10-03 Mario Blättermann + + Update German translation + + * po/de.po: Update from Translation Project. + +2019-10-03 Yuri Kozlov + + Update Russian translation + + * po/ru.po: Update from Translation Project. + +2019-10-03 Boyuan Yang <073plan@gmail.com> + + Update Simplified Chinese translation + + * po/zh_CN.po: Update from Translation Project. + +2019-10-03 Antonio Ceballos Roa + + Update Spanish translation + + * po/es.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2019-10-03 pan93412 + + Update Traditional Chinese translation + + * po/zh_TW.po: Update from Translation Project. + +2019-10-03 Rafael Fontenelle + + Update Brazilian Portuguese translation + + * po/pt_BR.po: Update from Translation Project. + +2019-10-01 Colin Watson + + Release man-db 2.9.0-pre1 + +2019-09-30 Colin Watson + + Add a new man-recode program + + This has an interface designed for bulk conversion, and so can be much + faster than running "man --recode" on each page. + + Fixes Debian bug #933576. + + * bootstrap.conf (gnulib_modules): Add renameat, tempname, and unlinkat. + * src/man-recode.c: New file. + * src/Makefile.am (bin_PROGRAMS): Add man-recode. + (man_recode_LDADD, man_recode_SOURCES): Add. + * src/tests/man-recode-in-place, src/tests/man-recode-suffix: New files. + * src/tests/Makefile.am (ALL_TESTS): Add man-recode-in-place and + man-recode-suffix. + * .gitignore: Add src/man-recode. + * po/POTFILES.in: Add src/man-recode.c. + + * m4/man-trans-subst.m4 (MAN_TRANS_SUBST): Adjust to support program + names containing dashes. + * configure.ac: Add substitutions for man-recode. + + * man/man1/man-recode.man1: New file. + * man/man1/man.man1 (Main modes of operation): Add a note to the + description of --recode suggesting man-recode instead. + * man/man1/manconv.man1 (SEE ALSO): Add reference to man-recode(1). + * man/Makefile.am (man1_MANS): Add man1/man-recode.1. + * man/da/Makefile.am (man1_MANS): Likewise. + * man/de/Makefile.am (man1_MANS): Likewise. + * man/es/Makefile.am (man1_MANS): Likewise. + * man/fr/Makefile.am (man1_MANS): Likewise. + * man/id/Makefile.am (man1_MANS): Likewise. + * man/ja/Makefile.am (man1_MANS): Likewise. + * man/nl/Makefile.am (man1_MANS): Likewise. + * man/pl/Makefile.am (man1_MANS): Likewise. + * man/pt/Makefile.am (man1_MANS): Likewise. + * man/pt_BR/Makefile.am (man1_MANS): Likewise. + * man/ru/Makefile.am (man1_MANS): Likewise. + * man/sr/Makefile.am (man1_MANS): Likewise. + * man/sv/Makefile.am (man1_MANS): Likewise. + * man/tr/Makefile.am (man1_MANS): Likewise. + * man/zh_CN/Makefile.am (man1_MANS): Likewise. + * man/po4a/po4a.cfg: Add support for man-recode. + * man/replace.sin.in: Substitute %man_recode% and %thman_recode%. + + * NEWS: Document this. + +2019-09-30 Colin Watson + + manconv: Guess input encoding if necessary + + * src/manconv_main.c (args_doc): Mark -f option as optional. + (parse_opt): Don't fail if no input encoding was specified. + (main): If no input encoding was specified, guess it from the file name + in the same way that man does. + * man/man1/manconv.man1 (SYNOPSIS): Mark -f option as optional. + (OPTIONS): Describe new default behaviour for -f. + * configure.ac: Disable -Winline; we don't care about gl_list_add_last + not always being inlined. + * NEWS: Document this. + +2019-09-30 Colin Watson + + lexgrog, zsoelim: Suppress more compiler warnings + + -Wsuggest-attribute=malloc was added in GCC 8, so don't try to ignore it + with earlier versions. + + * src/lexgrog.l: Guard '#pragma GCC diagnostic ignored + "-Wsuggest-attribute=malloc"' so that it is only invoked with GCC >= 8. + * src/zsoelim.l: Likewise. + +2019-09-11 Colin Watson + + apropos(1), whatis(1): Fix typo + + Already fixed in man(1) by commit + 68ef9f324832c790a7e3565f726fa1bc9a6d0178. + + * man/man1/apropos.man1 (ENVIRONMENT): an -> and. + * man/man1/whatis.man1 (ENVIRONMENT): Likewise. + +2019-09-09 Colin Watson + + man: Accept "page(section)" form on command line + + Suggested by Tanguy Ortolo and Paul Wise. Fixes Debian bug #677350. + + * src/man.c (split_page_name): Accept "page(section)" form as well as + "page.section". + * src/tests/man-suffixed-extension: Test the "page(section)" form. + * man/man1/man.man1 (SYNOPSIS): Don't mention the "page.section" form + here; it gets too unwieldy to try to express all the possibilities in a + synopsis. + (EXAMPLES): Document "page(section)" form. + (OPTIONS): Hyphenate "Non-argument options" thus. + * NEWS: Document this. + +2019-09-08 Colin Watson + + Make some debugging output less verbose + + Also indent some sections of debugging output, which allows removing + some blank lines. + + Fixes Debian bug #863920. + + * src/catman.c (main): Remove unnecessary debugging output of manp + before calling create_pathlist. + * src/manp.c (main): Likewise. + * src/mandb.c (main): Likewise. + + * src/man.c (main): Remove debugging output of ruid and euid, which was + redundant with init_security. Remove extra newline before "using %s as + pager". + * src/manp.c (describe_flag, print_list): Remove: everything that adds + items to this list already emits a more human-friendly debugging + message. Remove caller of print_list. + (add_sections): Squash debugging output onto one line, and indent it by + two spaces. + (add_def, add_manpath_map, add_mandb_map, add_mandatory): Indent + debugging output by two spaces. + (read_config_file): Remove extra newline after "From the config file + %s:". + (get_manpath_from_path): Remove extra newlines before "path directory + %s" and "adding mandatory man directories". + (add_expanded_dir_to_list): Remove noisy "%s is already in the manpath" + debugging output. Indent "adding %s to manpath" by two spaces. + (add_man_subdirs): Remove noisy "and doesn't have ../man, man, + ../share/man, or share/man subdirectories" debugging output. + +2019-09-08 Colin Watson + + Refactor deduplication in create_pathlist + + This is more efficient, and also has the useful side-effect of reducing + noise in debug output. + + * src/manp.c (struct canonicalized_path): New structure. + (canonicalized_path_new, canonicalized_path_equals, + canonicalized_path_hash, canonicalized_path_free): New functions. + (add_dir_to_path_list): Canonicalize the given path and (if it exists) + add both the original and canonicalized versions as a pair. + (create_pathlist): Simplify: rather than doing a second quadratic-time + pass to eliminate duplicates, we now avoid inserting them in linear time + as we go along. + +2019-09-08 Colin Watson + + man(1): Explain interactions between -w/-W and -a + + Reported by Bjarni Ingi Gislason. Fixes Debian bug #803712. + + * man/man1/man.man1 (Main modes of operation): Explain that the -w and + -W options only print a single match by default, but that -a can be used + to print all matches. + +2019-09-08 Colin Watson + + Suggest "man man" if run with no arguments + + Fixes Debian bug #869798. + + * src/man.c (gripe_no_name): Suggest running "man man". + * NEWS: Document this. + +2019-09-08 Colin Watson + + * NEWS: Document recent manual page improvements. + +2019-09-08 Colin Watson + + Mention where other manual pages come from + + * man/man1/man.man1 (OVERVIEW): Explain that individual manual pages + normally come with whatever they document. + +2019-09-08 Colin Watson + + Revamp man(1) to be a more accessible introduction + + Fixes Savannah bug #53050. + + * man/man1/man.man1 (SYNOPSIS): Delete details of most options, as it + had got much too long and indigestible. The OPTIONS section below + remains, and is better-organised and easier to read. Delete the "man + -c" form entirely, as it's only for internal use by catman. + (DESCRIPTION): Move list of default sections to ... + (DEFAULTS): ... here. + (EXAMPLES): Use a real example rather than the peculiar "alias" + terminology for "man -t". + (OVERVIEW): Various minor editorial improvements. Remove discussion of + index database caches: it's mostly irrelevant to users, and is already + better-documented in mandb(8), apropos(1), and whatis(1). Simplify + discussion of where pages are stored. Briefly describe what cat pages + are. Rewrite description of localisation support to read more fluently + and to take into account that most users will already have a suitable + locale set up. Drop discussion of translations of this package's own + messages: this should be standard rather than something that we + explicitly need to call out here, and the term "message catalogues" was + opaque. + (DEFAULTS): Remove discussion of index database caches, as above. + Remove discussion of cat pages, since this is an implementation detail + and confused matters here too much. + (Finding manual pages): Tighten up language in description of + --sections. Simplify description of --update, and tell readers that it + is normally better to run mandb(8) instead. + (FILES): Remove mention of index database caches from here. While + man(1) does use them, they're an implementation detail and are + better-documented elsewhere. + (SEE ALSO): Remove overly-detailed cross-references to setlocale(3), + ascii(7), latin1(7), the man-db manual, and the FSSTND. Add a paragraph + mentioning documentation in other formats, such as info(1) or HTML. + * man/man5/manpath.man5 (FORMAT): Remove stray quote before the FSSTND + keyword. + * man/man8/mandb.man8 (DESCRIPTION): Remove claim that index database + caches are usually maintained by man(1). + + * man/man1/man.man1, man/man1/manpath.man1: Use the "..." style of + quoting rather than the `...' style. + +2019-09-08 Colin Watson + + Improve documentation of MANROFFOPT + + Reported by Bjarni Ingi Gislason. Fixes Debian bug #914938. + + * man/man1/man.man1 (ENVIRONMENT): Rephrase description of MANROFFOPT to + make it clear that it is added to the formatter's command line, rather + than to man's command line. + +2019-09-08 Colin Watson + + Remove confusing use of "on-line" + + Nowadays "on-line" tends to be understood as "on the internet" rather + than "on a screen", so avoid the term. + + Reported by Dan Jacobson. Fixes Debian bug #774402. + + * docs/man-db.lsm: Say "system help files" rather than "on-line help + files". + * man/man1/man.man1 (NAME): Say "system reference manuals" rather than + "on-line reference manuals". + * manual/intro.me (Introduction): Say "information" rather than "online + information". + * manual/man_db.me: Say "manual page system" rather than "online manual + page system". + + * man/man1/lexgrog.man1 (EXAMPLES): Update examples quoting man(1)'s + description. + * manual/db.me (Example database): Likewise. + * manual/intro.me (Introduction): Likewise. + * src/tests/man-mandatory-manpath: Update test quoting man(1)'s + description. + +2019-09-08 Colin Watson + + Tidy up formatting of Wilf's name + + Based on similar changes elsewhere by Bjarni Ingi Gislason. + + * man/man1/lexgrog.man1 (AUTHOR): Protect "." with "\&" if it is + followed by a space and does not mean the end of a sentence. + * man/man1/manpath.man1 (AUTHOR): Likewise. + * man/man1/whatis.man1 (AUTHOR): Likewise. + * man/man1/zsoelim.man1 (AUTHOR): Likewise. + * man/man8/accessdb.man8 (AUTHOR): Likewise. + * man/man8/catman.man8 (AUTHOR): Likewise. + * man/man8/mandb.man8 (AUTHOR): Likewise. + +2019-09-08 Bjarni Ingi Gislason + + manpath(1): Correct some typographic mistakes + + Fixes Debian bug #927452. + + * man/man1/manpath.man1 (DESCRIPTION): Use \(en for a dash where + appropriate. + (OPTIONS): Change .BR to .B if there is only one argument. + +2019-09-08 Bjarni Ingi Gislason + + apropos(1): Minor typographic changes + + Fixes Debian bug #892421. + + * man/man1/apropos.man1 (DESCRIPTION): Use "\e" to print the escape + character instead of "\\" (which is interpreted in copy mode). + (OPTIONS): Change .BR to .B if there is only one argument. + (FILES): Add a space around "|" to increase readability. + (AUTHOR): Protect "." with "\&" if it is followed by a space and does + not mean the end of a sentence. + +2019-09-08 Colin Watson + + Apply italic corrections + + Partly based on suggestions from Bjarni Ingi Gislason in Debian + bug #892421, although I had to take a slightly different approach to + avoid confusing po4a. + + * man/man1/apropos.man1 (OPTIONS): Apply italic corrections to + descriptions of --sections and --systems. Simplify three-font handling + for --systems. + * man/man1/man.man1 (Finding manual pages): Likewise. + * man/man1/whatis.man1 (OPTIONS): Likewise. + * man/man1/manpath.man1 (OPTIONS): Apply italic corrections to + description of --systems, and simplify three-font handling. + +2019-09-07 Colin Watson + + man(1): Adjust description of section 5 + + * man/man1/man.man1 (DESCRIPTION): Add a comma before "e.g.". + +2019-09-07 Bjarni Ingi Gislason + + man(1): Minor typographic changes + + Fixes Debian bug #892230. + + * man/man1/man.man1 (DESCRIPTION, HISTORY): Protect "." with "\&" if it + is followed by a space and does not mean the end of a sentence. + (EXAMPLES): Use a macro to change to the italic font instead of \fI if + possible. The macros have the italic corrections. + (EXAMPLES, Controlling formatted output, Getting help, SEE ALSO): Change + .BR/.IR to .B/.I if there is only one argument, or else separate the + second argument from the first if needed. + (DEFAULTS): Begin each sentence on a new line. + (FILES): Add a space around "|" to increase readability. + +2019-09-07 Colin Watson + + Make long lines in man(1) less likely + + Fixes part of Debian bug #892230. + + * man/man1/man.man1 (DESCRIPTION, ENVIRONMENT): Put the expansion of + %sections% on its own line. + +2019-09-07 Colin Watson + + Escape %troff% expansion correctly in manual pages + + Fixes part of Debian bug #892230. + + * configure.ac: Substitute troff_as_troff_input, which is the same as + troff but with suitable escaping so that "groff -mandoc" turns into + "groff \-mandoc". + * man/replace.sin.in (%troff%): Substitute @troff_as_troff_input@ rather + than @troff@. + +2019-09-07 Colin Watson + + Remove trailing whitespace from manual pages + + * man/man1/apropos.man1, man/man1/lexgrog.man1, man/man1/man.man1, + man/man1/manpath.man1, man/man1/whatis.man1, man/man1/zsoelim.man1, + man/man5/manpath.man5, man/man8/accessdb.man8, man/man8/catman.man8, + man/man8/mandb.man8: Remove trailing whitespace. + +2019-09-07 Sebastian Rasmussen + + Fix trivial typo in man manpage + + Fixes Savannah bug #48663. + + * man/man1/man.man1: an -> and. + +2019-09-07 Colin Watson + + Remove stray words from man(1) + + Reported by Bjarni Ingi Gislason. Fixes Debian bug #939599. + + * man/man1/man.man1 (DEFAULTS): Remove two stray words from the + description of how the pager is specified. + +2019-09-05 Colin Watson + + Adjust encoding declarations when recoding + + * lib/encodings.c (check_preprocessor_encoding): Return a modified + encoding declaration in *modified_line if the new to_encoding and + modified_line parameters are non-NULL. + * lib/encodings.h (check_preprocessor_encoding): Update prototype. + * src/man.c (make_roff_command): Pass NULL as to_encoding and + modified_line arguments to check_preprocessor_encoding. + * src/manconv.c (manconv): Output a modified encoding declaration if + necessary. + * src/tests/manconv-coding-tags: Adjust for new expected output. Add a + test for the case where the coding tag matches the target encoding. + * src/tests/manconv-odd-combinations: Adjust for new expected output. + * NEWS: Document this. + +2019-09-05 Colin Watson + + Give test cases more meaningful names + + * src/tests/lexgrog-1: Rename to ... + * src/tests/lexgrog-basic: ... this. + * src/tests/lexgrog-2: Rename to ... + * src/tests/lexgrog-multiple-whatis: ... this. + * src/tests/lexgrog-3: Rename to ... + * src/tests/lexgrog-backslash-dash-rhs: ... this. + * src/tests/man-1: Rename to ... + * src/tests/man-symlinks-with-matching-names: ... this. + * src/tests/man-10: Rename to ... + * src/tests/man-deleted-directory: ... this. + * src/tests/man-11: Rename to ... + * src/tests/man-suffixed-extension: ... this. + * src/tests/man-2: Rename to ... + * src/tests/man-executable-page-on-path: ... this. + * src/tests/man-3: Rename to ... + * src/tests/man-exact-section-matches: ... this. + * src/tests/man-4: Rename to ... + * src/tests/man-mandatory-manpath: ... this. + * src/tests/man-5: Rename to ... + * src/tests/man-so-links-same-section: ... this. + * src/tests/man-6: Rename to ... + * src/tests/man-missing-locales: ... this. + * src/tests/man-7: Rename to ... + * src/tests/man-invalid-db-entry: ... this. + * src/tests/man-8: Rename to ... + * src/tests/man-language-specific-requests: ... this. + * src/tests/man-9: Rename to ... + * src/tests/man-override-dir: ... this. + * src/tests/manconv-1: Rename to ... + * src/tests/manconv-coding-tags: ... this. + * src/tests/manconv-2: Rename to ... + * src/tests/manconv-odd-combinations: ... this. + * src/tests/manconv-3: Rename to ... + * src/tests/manconv-incomplete-char-at-eof: ... this. + * src/tests/mandb-1: Rename to ... + * src/tests/mandb-basic: ... this. + * src/tests/mandb-2: Rename to ... + * src/tests/mandb-regular-file-symlink-changes: ... this. + * src/tests/mandb-3: Rename to ... + * src/tests/mandb-whatis-broken-link-changes: ... this. + * src/tests/mandb-4: Rename to ... + * src/tests/mandb-symlink-beats-whatis-ref: ... this. + * src/tests/mandb-5: Rename to ... + * src/tests/mandb-empty-page: ... this. + * src/tests/mandb-6: Rename to ... + * src/tests/mandb-bogus-symlink: ... this. + * src/tests/mandb-7: Rename to ... + * src/tests/mandb-cachedir-tag: ... this. + * src/tests/whatis-1: Rename to ... + * src/tests/whatis-path-to-executable: ... this. + * src/tests/zsoelim-1: Rename to ... + * src/tests/zsoelim-so-includes: ... this. + * src/tests/Makefile.am (ALL_TESTS): Update. + +2019-09-01 Colin Watson + + Remove unnecessary PP_COOKIE conditionals + + PP_COOKIE is always defined, so there's no need for #ifdefs. + + * lib/encodings.c (check_preprocessor_encoding): Remove PP_COOKIE + conditional. + * src/man.c (get_preprocessors_from_file): Likewise. + * src/zsoelim.l (zsoelim_parse_file): Likewise. + +2019-08-31 Colin Watson + + Remove ability to undefine COMP_SRC + + This was a minor optimisation that wasn't worth the extra code + complexity. + + * configure.ac (COMP_SRC): Remove. + * include/comp_src.h.in: Remove COMP_SRC conditional. comp_list will + simply contain only the terminal entry if no compressors are configured. + * include/manconfig.h.in: Remove COMP_SRC conditional and comment. + * manual/comp.me (Compressed manual pages): Remove documentation of + COMP_SRC; explain that support depends on the decompressors available at + configure time. + * src/compression.c: Remove COMP_SRC conditional. + (comp_info): Only do the HP-UX check if gunzip is available. + * src/filenames.c (make_filename): Remove parenthetical comment about + COMP_SRC. + (filename_info): Remove COMP_SRC conditionals. + * src/man.c (convert_name): Likewise. + * src/straycats.c (check_for_stray): Likewise. + * src/ult_src.c (ult_src): Likewise. + * NEWS: Document this. + +2019-08-31 Colin Watson + + Improve list iteration helper + + * lib/glcontainers.h (GL_LIST_FOREACH_START): Capture the gl_list_node_t + in each loop iteration. + * src/descriptions_store.c (store_descriptions): Simplify detection of + the last loop iteration. + * src/manconv.c (manconv): Likewise. + * src/manconv_client.c (add_manconv): Likewise. + * src/manp.c (create_pathlist): Simplify manual loop iteration that can + now be expressed using GL_LIST_FOREACH_START/GL_LIST_FOREACH_END. + Simplify detection of the first loop iteration when emitting the final + search path as debugging information. + +2019-08-30 Colin Watson + + Improve data types in manconv + + * src/manconv.c (try_iconv): Change "last" parameter type to bool. + Change types of "to_utf8" and "ignore_errors" to bool. + (manconv): Convert "from" to gl_list. + * src/manconv.h (manconv): Update prototype. + * src/manconv_client.h (struct manconv_codes): Convert "from" to + gl_list. + (free_manconv_codes, add_manconv): Convert "codes->from" to gl_list. + * src/manconv_main.c (from_code, split_codes, parse_opt, main): Convert + to gl_list. + +2019-08-26 Colin Watson + + Release man-db 2.8.7 + +2019-08-26 Takeshi Hamasaki + + Update Japanese translation + + * po/ja.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2019-08-26 Colin Watson + + Order results manually for NDBM as well as GDBM + + Commit 3a753221a3dddaf4870a86a4dca4771ed2cd80b3 in 2003 (!) worked + around the fact that GDBM's firstkey/nextkey interface doesn't return + ordered results. However, at least when using GDBM's NDBM compatibility + interface, this may be true for NDBM too. Extend the manual result + ordering code to cover both of these backends. + + * libdb/db_gdbm.c (parent_keys, datum_compare, datum_equals, datum_hash, + datum_free, empty_datum, man_gdbm_firstkey, man_gdbm_nextkey, + man_gdbm_close): Move to ... + * libdb/db_xdbm.c (parent_keys, datum_compare, datum_equals, datum_hash, + datum_free, empty_datum, man_xdbm_firstkey, man_xdbm_nextkey, + man_xdbm_close): ... here (new file). + * libdb/db_xdbm.h: New file. + * libdb/db_gdbm.c (unsorted_firstkey, unsorted_nextkey, raw_close): New + functions, wrapping gdbm_firstkey, gdbm_nextkey, and gdbm_close + respectively. + (man_gdbm_firstkey, man_gdbm_nextkey, man_gdbm_close): Add GDBM-specific + wrappers for the generic man_xdbm_* functions. + * libdb/db_ndbm.c (man_ndbm_close): Move NDBM-specific code ... + (raw_close): ... here. + (unsorted_firstkey, unsorted_nextkey): New functions, wrapping + dbm_firstkey and dbm_nextkey respectively. + (man_ndbm_close, man_ndbm_firstkey, man_ndbm_nextkey): Add NDBM-specific + wrappers for the generic man_xdbm_* functions. + * libdb/mydbm.h (man_ndbm_firstkey, man_ndbm_nextkey): Add prototypes. + (MYDBM_FIRSTKEY) [NDBM]: Rewrite in terms of man_ndbm_firstkey. + (MYDBM_NEXTKEY) [NDBM]: Rewrite in terms of man_ndbm_nextkey. + * libdb/Makefile.am (libmandb_la_SOURCES): Add db_xdbm.c and db_xdbm.h. + * NEWS: Document this. + +2019-08-25 Colin Watson + + Enable many more GCC warnings + + * bootstrap.conf (gnulib_modules): Add manywarnings. + * configure.ac: Add gl_MANYWARN_ALL_GCC, with some refinements to + disable -Wsystem-headers and -Wmissing-field-initializers. Define + GNULIB_NO_VLA=1 to avoid tripping over -Wvla. + * src/accessdb.c (help_filter): Disable -Wformat-nonliteral around this + function. + * src/man.c (help_filter): Likewise. + * src/check_mandirs.c (gripe_rwopen_failed, update_db_time): Factor out + EAGAIN || EWOULDBLOCK check to ... + (is_eagain): ... here, with -Wlogical-op disabled. + * src/lexgrog.l, src/zsoelim.l: Disable -Wsuggest-attribute=malloc, + -Wsuggest-attribute=pure, and -Wunused-macros. + +2019-08-25 Colin Watson + + Pacify gcc -Wnull-dereference + + * src/accessdb.c (main): Add an assertion to help the compiler prove + that dbf is non-NULL. (It doesn't know that error (FATAL, ...) is + non-returning.) + +2019-08-25 Colin Watson + + Add several function attributes suggested by GCC + + * lib/debug.c (vdebug): Mark first argument as a printf format string. + * lib/encodings.c (get_page_encoding): Mark as malloc-like. + (is_roff_device, get_output_encoding, get_less_charset, + get_jless_charset): Mark as pure. + * lib/glcontainers.c (string_equals, string_hash): Mark as pure. + * lib/security.c (running_setuid): Mark as pure. + * lib/util.c (trim_spaces): Mark as malloc-like. + * libdb/db_lookup.c (dash_if_unset): Mark as const. + * libdb/db_store.c (compare_ids): Mark as const. + * src/whatis.c (match): Mark as pure. + +2019-08-25 Colin Watson + + Fix some printf formats + + * libdb/db_lookup.c (list_extensions): Format the return value of + gl_list_size using %zu, not %zd. + * src/catman.c (add_arg): Format the return values of MYDBM_DSIZE and + strlen using %zu, not %zd. + (parse_for_sec): Format ARG_MAX - arg_size using %zu, not %zd. + * src/man.c (main): Format ruid and euid using %lu, not %d (cast to + unsigned long since POSIX only says that uid_t is an integer type). + * src/manp.c (describe_flag): Format flag using %u, not %d. + +2019-08-25 Colin Watson + + Remove several unused macros + + * libdb/db_store.c (_): Remove. + * src/compression.c (_): Likewise. + * src/globbing_test.c (_): Likewise. + * src/zsoelim_main.c (_): Likewise. + +2019-08-25 Colin Watson + + Make a couple of functions static + + * lib/orderfiles.c (compare_physical_offsets): Make static. + * src/descriptions.c (page_description_free): Likewise. + +2019-08-25 Colin Watson + + Move declaration of _nl_msg_cat_cntr to top level + + gcc -Wnested-externs warns when it encounters this declaration within a + function. + + * include/manconfig.h.in (locale_changed): Move _nl_msg_cat_cntr + declaration to the top level. + +2019-08-25 Colin Watson + + Add some missing includes + + * lib/linelength.c: Include "linelength.h". + * lib/orderfiles.c: Include "orderfiles.h". + +2019-08-23 Colin Watson + + Simplify some GCC attribute handling + + * lib/orderfiles.c (order_files) [!HAVE_LINUX_FIEMAP_H && + !HAVE_POSIX_FADVISE]: Use _GL_UNUSED rather than ATTRIBUTE_UNUSED. + * lib/sandbox.c (_sandbox_load) [!HAVE_LIBSECCOMP]: Likewise. + * lib/security.c (drop_privs): Likewise. + * src/accessdb.c (help_filter): Likewise. + * src/check_mandirs.c (chown_if_possible): Likewise. + * src/decompress.c (decompress_zlib): Likewise. + * src/lexgrog_test.c (help_filter): Likewise. + * src/man.c (help_filter, squeeze_blank_lines, disable_hyphenation, + disable_justification): Likewise. + * src/manconv.c (manconv): Likewise. + * src/manp.c (free_config_file): Likewise. + * src/tests/fspause.c (main): Likewise. + * src/whatis.c (help_filter): Likewise. + * src/zsoelim_main.c (parse_opt): Likewise. + * include/manconfig.h.in (ATTRIBUTE_UNUSED): Remove in favour of the + shorter _GL_UNUSED. + (ATTRIBUTE_MALLOC): Remove; it was unused. + +2019-08-23 Colin Watson + + Use C11/Gnulib's _Noreturn + + * lib/cleanup.c (sighandler): Declare as _Noreturn. + * src/man.c (gripe_converting_name): Use _Noreturn rather than + ATTRIBUTE_NORETURN. + * include/manconfig.h.in (ATTRIBUTE_NORETURN): Remove. + +2019-08-23 Colin Watson + + Update to Gnulib 20190821 + +2019-08-23 Colin Watson + + Pass database file name in function parameters + + Storing it in a global variable with an unresolved symbol from libmandb + was never very clean, and caused linking complications on some + platforms. + + Fixes Savannah bug #56734. + + * libdb/mydbm.h (database): Remove external symbol. + * src/accessdb.c: Remove obsolete comment. + * src/catman.c (database): Remove global variable. + (parse_for_sec): Add database parameter. Update all callers. + (main): Declare database locally. + * src/check_mandirs.c (gripe_rwopen_failed, testmandirs, update_db_time, + create_db, update_db, purge_missing): Add database parameter. Update + all callers. + * src/check_mandirs.h (create_db, update_db, purge_missing): Update + prototypes. + * src/mandb.c (database): Remove global variable. + (update_one_file, update_db_wrapper): Add database parameter. Update + all callers. + (mandb, process_manpath): Declare database locally. + * src/straycats.c (straycats): Add database parameter. Update all + callers. + * src/whatis.c (database): Remove global variable. + (search): Declare database locally. + * include/manconfig.h.in (straycats): Update prototype. + * NEWS: Document this. + +2019-08-23 Colin Watson + + Use MYDBM_FILE->name for error messages + + We previously used the global "database" variable, but we were either + also passing a MYDBM_FILE around already or could easily do so, and it's + cleaner to get the file name from there now that it's consistently + available on all backends. + + * libdb/db_lookup.c (gripe_corrupt_data): Add dbf parameter. Get file + name from dbf->name rather than from the global database variable. + Update all callers. + (gripe_replace_key, split_data, split_content): Add dbf parameter. + Update all callers. + (dblookup_pattern): Get file name from dbf->name rather than from the + global database variable. + * libdb/db_ver.c (dbver_rd, dbver_wr): Get file name from dbfile->name + rather than from the global database variable. + * libdb/db_storage.h (split_content, gripe_corrupt_data, + gripe_replace_key): Update prototypes. + * src/check_mandirs.c (sanity_check_db): Get file name from dbf->name + rather than from the global database variable. + * src/whatis.c (do_apropos): Likewise. + +2019-08-23 Colin Watson + + Store database file name alongside its handle + + The GDBM backend already did things this way, but it's convenient to do + it the same way for all backends. + + Rename libmandb's various backend-specific functions to be uniformly + man__. In the cases of btree and ndbm there was + already no clash with the libraries they depend on, but this makes them + match the gdbm backend. + + * libdb/db_btree.c (btree_close): Rename to ... + (man_btree_close): ... this. + (btree_flopen): Rename to ... + (man_btree_open): ... this. Wrap the returned file handle in a + man_btree_wrapper structure that remembers the file name. + (btree_replace): Rename to ... + (man_btree_replace): ... this. + (btree_insert): Rename to ... + (man_btree_insert): ... this. + (btree_fetch): Rename to ... + (man_btree_fetch): ... this. + (btree_exists): Rename to ... + (man_btree_exists): ... this. + (btree_findkey): Rename to ... + (man_btree_findkey): ... this. + (btree_firstkey): Rename to ... + (man_btree_firstkey): ... this. + (btree_nextkey): Rename to ... + (man_btree_nextkey): ... this. + (btree_nextkeydata): Rename to ... + (man_btree_nextkeydata): ... this. + (btree_get_time): Rename to ... + (man_btree_get_time): ... this. + (btree_set_time): Rename to ... + (man_btree_set_time): ... this. + Update all prototypes and callers for all renames. + (man_btree_close, man_btree_replace, man_btree_insert, man_btree_fetch, + man_btree_exists, man_btree_findkey, man_btree_firstkey, + man_btree_nextkey, man_btree_nextkeydata, man_btree_get_time, + man_btree_set_time): Take man_btree_wrapper parameter rather than DB *. + Update all callers. + + * libdb/db_ndbm.c (ndbm_flclose): Rename to ... + (man_ndbm_close): ... this. + (ndbm_flopen): Rename to ... + (man_ndbm_open): ... this. Copy the given file name before passing it + to dbm_open, since at least GDBM's compatibility implementation declares + that parameter as non-const. Wrap the returned file handle in a + man_ndbm_wrapper structure that remembers the file name. + (ndbm_get_time): Rename to ... + (man_ndbm_get_time): ... this. + (ndbm_set_time): Rename to ... + (man_ndbm_set_time): ... this. + Update all prototypes and callers for all renames. + (man_ndbm_close, man_ndbm_get_time, man_ndbm_set_time): Take + man_ndbm_wrapper parameter rather than DBM *. Update all callers. + + * libdb/mydbm.h (man_ndbm_wrapper): New structure. + (MYDBM_FILE) [NDBM]: Change to man_ndbm_wrapper. + (man_btree_wrapper): New structure. + (MYDBM_FILE) [BTREE]: Change to man_btree_wrapper. + + * libdb/db_lookup.c (gripe_lock): Constify filename parameter. + * libdb/db_storage.h (gripe_lock): Update prototype. + +2019-08-23 Colin Watson + + Recognise eo/ta/uk translations of the NAME section + + (Esperanto, Tamil, and Ukrainian.) + + * src/lexgrog.l (eo_name, ta_name, uk_name): Add. + * NEWS: Document this. + +2019-08-23 Colin Watson + + Remove unused sandbox variables + + We no longer need these, having moved decompression code out of libman. + + * src/accessdb.c, src/catman.c, src/globbing_test.c, src/manpath.c: + Remove "sandbox" global variables. + +2019-08-22 Colin Watson + + Remove unused linkage from whatis + + * src/Makefile.am (whatis_SOURCES): Remove manconv.c and manconv.h. + +2019-08-22 Colin Watson + + Move decompression code out of libman + + Fixes Savannah bug #56734. + + * configure.ac: Remove incorrect Darwin workaround. + * lib/decompress.c: Move to ... + * src/decompress.c: ... here. + * lib/decompress.h: Move to ... + * src/decompress.h: ... here. + * lib/Makefile.am (libman_la_SOURCES): Remove decompress.c and + decompress.h. + (libman_la_LIBADD): Remove $(LIBCOMPRESS). + * lib/README: Remove decompress.*. + * lib/encodings.c: Remove unused #include "decompress.h". + * src/Makefile.am (lexgrog_LDADD, man_LDADD, manconv_LDADD, mandb_LDADD, + zsoelim_LDADD): Add $(LIBCOMPRESS). + (lexgrog_SOURCES, man_SOURCES, manconv_SOURCES, mandb_SOURCES, + zsoelim_SOURCES): Add decompress.c and decompress.h. + * NEWS: Document this. + +2019-08-22 Colin Watson + + Squash warning in order_files stub + + * lib/orderfiles.c [!HAVE_LINUX_FIEMAP_H && !HAVE_POSIX_FADVISE]: Mark + dir and basenamesp arguments as unused. + +2019-08-22 Colin Watson + + Don't save cat pages if --nh/--nj is used + + Fixes Savannah bug #55731. + + * src/man.c (display): Disable cat pages if --no-hyphenation or + --no-justification is used, in effect defining those not to be part of + the canonical state. + * NEWS: Document this. + +2019-08-21 Colin Watson + + sandbox: Allow getrandom, used by Hardened Malloc + + Fixes Savannah bug #56767. + + * lib/sandbox.c (make_seccomp_filter): Allow getrandom. + * NEWS: Document this. + +2019-08-21 Colin Watson + + NEWS: Document EPERM change + + * NEWS: Document change from raising SIGSYS to returning EPERM. + +2019-08-21 Colin Watson + + sandbox: Reorganise using @system-service set + + systemd defines a @system-service set now which covers some of the ones + that were previously isolated here, so reorganise to take account of + that. No functional change. + + * lib/sandbox.c (make_seccomp_filter): Reorganise using systemd's new + @system-service set. + +2019-08-21 Colin Watson + + sandbox: Set default action to EPERM, not TRAP + + Returning EPERM rather than raising SIGSYS is no less secure, and it's + more likely that code injected via LD_PRELOAD will be able to recover + from this somehow. + + * lib/sandbox.c (make_seccomp_filter): Set default action to + SCMP_ACT_ERRNO (EPERM), not SCMP_ACT_TRAP. + +2019-08-14 Colin Watson + + sandbox: Allow sendmsg in the ESET case + + * lib/sandbox.c (make_seccomp_filter): If libesets_pac.so is preloaded, + then allow sendmsg. + * NEWS: Document this. + +2019-08-05 Colin Watson + + * Version: 2.8.6.1. + +2019-08-04 Colin Watson + + Fix missing memory copies in ult_src + + Fixes Debian bug #933802. + + * src/ult_src.c (ult_src): Copy strings before adding them to trace. + +2019-08-03 Colin Watson + + * Version: 2.8.6. + +2019-08-03 Colin Watson + + Update syscall lists from systemd bca5a0eacc + + * lib/sandbox.c (make_seccomp_filter): Add rseq (see + https://github.com/systemd/systemd/issues/12127). + +2019-05-02 Colin Watson + + Improve manual build portability slightly + + * manual/Makefile.am ($(MANUAL).pp, .pp.dvi, .pp.ps, .pp.tdvi, + .tdvi.tps, .pp.cat, .pp.html): Use "mv -f" rather than just "mv", since + Automake seems to prefer that for its own rules. + +2019-05-02 Colin Watson + + Make manual build more robust against failures + + Fixes Savannah bug #56254. + + * manual/Makefile.am ($(MANUAL).pp, .pp.dvi, .pp.ps, .pp.tdvi, + .tdvi.tps, .pp.cat, .pp.html): Write output to *.new files and rename + into place, so that failures are properly retried in future runs. + +2019-03-03 Colin Watson + + Avoid configure error message if nroff is broken + + * m4/man-gnu-nroff.m4 (MAN_PROG_GNU_NROFF): Adjust test arguments + slightly to avoid a spurious error message if nroff is sufficiently + broken that it doesn't produce numeric output for "\n(.g". + +2019-03-03 Colin Watson + + Fix warnings when configuring --without-libseccomp + + * lib/sandbox.c (_sandbox_load): Mark sandbox and permissive parameters + unused when HAVE_LIBSECCOMP is undefined, to avoid warnings from "gcc + -Wunused-parameter". + +2019-03-03 Colin Watson + + Add configure option to disable building manual + + * m4/man-arg-manual.m4: New file. + * configure.ac: Add MAN_ARG_MANUAL. + * manual/Makefile.am: Perform most rules only if BUILD_MANUAL is true. + * manual/intro.me (Arguments to configure): Add --disable-manual. + * README (Non-generic arguments to configure): Update. + * NEWS: Document this. + +2019-03-03 Colin Watson + + * NEWS: Document container type changes. + +2019-02-05 Colin Watson + + Add some missing entries to lib/README + + * lib/README: Add glcontainers.*, orderfiles.*, and sandbox.*. + +2019-02-05 Colin Watson + + Remove pipeline.* from lib/README + + It's been a separate library since 2010. + + * lib/README: Remove pipeline.*. + +2019-02-05 Colin Watson + + Inline lower into name_to_key + + With only one remaining user, it wasn't pulling its weight. + + * libdb/db_lookup.c (name_to_key): Inline the implementation of lower. + * lib/Makefile.am (libman_la_SOURCES): Remove lower.c and lower.h. + * lib/README: Remove lower.*. + * lib/lower.c, lib/lower.h: Remove. + +2019-02-05 Colin Watson + + Simplify case-insensitivity in word_fnmatch + + Using FNM_CASEFOLD saves us from having to lower-case the pattern + manually, and it also fixes the behaviour of "apropos -w" when given a + non-lower-case pattern. + + * lib/wordfnmatch.c (word_fnmatch): Use isalpha and FNM_CASEFOLD rather + than manually lower-casing string or expecting pattern to have already + been lower-cased. + * NEWS: Document this. + +2019-02-05 Colin Watson + + Simplify case-insensitive comparisons in whatis + + We can just use strcasecmp and similar functions rather than + lower-casing comparands manually. + + In some corner cases this may result in matches that would not + previously have been returned (e.g. "whatis -w" with a non-lower-case + pattern). + + * src/whatis.c (parse_name): Use strcasecmp and FNM_CASEFOLD rather than + manually lower-casing dbname or expecting pages to have already been + lower-cased. + (match): Use strcasestr and isalpha rather than manually lower-casing + whatis or expecting page to have already been lower-cased. + (parse_whatis): Remove lowpages parameter; pass pages directly to match + instead. + (do_apropos): Remove lowpages; parse_name and parse_whatis no longer + need it. + +2019-02-04 Colin Watson + + Import Gnulib's strcase module + + We're already using strcasecmp and strncasecmp. + + * bootstrap.conf (gnulib_modules): Add strcase. + +2019-02-04 Colin Watson + + Add missing #include + + * src/straycats.c: Include . + +2019-02-04 Colin Watson + + Use bool for boolean command-line options + + * include/manconfig.h.in (debug_level): Change type to bool. Update all + definitions and users. + * lib/encodings.c (get_roff_encoding): Change type of "found" to bool. + * libdb/db_lookup.c (dblookup_all, dblookup_exact): Change "match_case" + parameter type to bool. Update all callers. + (dblookup_pattern): Change "match_case", "pattern_regex", and + "try_descriptions" parameter types to bool. Update all callers. + * libdb/db_storage.h (dblookup_all, dblookup_exact, dblookup_pattern): + Update prototypes. + + * src/descriptions_store.c (store_descriptions): Change types of + "found_real_page" and "found_external" to bool. + * src/lexgrog_test.c (main): Change types of "some_failed" and "found" + to bool. + * src/man.c (parse_opt): Change types of "apropos" and "whatis" to bool. + (add_roff_line_length): Change "save_cat_p" parameter type to bool *. + Update all callers. + (make_browser): Change "found_percent_s" type to bool. + (display): Change "display_to_stdout" type to bool. + (try_db): Change "found_stale" type to bool. + (local_man_loop): Change "local_mf" type to bool. + (main): Change "found_subpage" type to bool. + * src/manp.c (read_config_file): Change "optional" parameter type to + bool. Update all callers. + * src/manp.h (read_config_file): Update prototype. + + * src/check_mandirs.c (opt_test, force_rescan): Change types to bool. + Update all users. + * src/globbing_test.c (match_case, regex_opt, wildcard): Likewise. + * src/lexgrog_test.c (parse_man, parse_cat, show_whatis, show_filters): + Likewise. + * src/man.c (disable_cache, troff, global_apropos, print_where, + print_where_cat, catman, local_man_file, findall, update, match_case, + regex_opt, wildcard, names_only, no_hyphenation, no_justification, + subpages, ascii, save_cat, ditroff, htmlout): Likewise. + * src/mandb.c (opt_test, force_rescan, check_for_strays, purge, user, + create): Likewise. + * src/manp.c (disable_cache): Likewise. + * src/manpath.c (cat, global): Likewise. + * src/whatis.c (am_apropos, regex_opt, exact, wildcard, require_all, + long_output): Likewise. + +2019-02-04 Colin Watson + + Port roff_warnings to gl_list + + * src/man.c (struct string_llist): Remove. + (parse_opt, make_roff_command): Convert roff_warnings to gl_list. + (main): Initialise roff_warnings. + +2019-02-04 Colin Watson + + Port parse_descriptions to gl_list + + * src/descriptions.c (free_descriptions): Rename to ... + (page_description_free): ... this. Adjust for gl_list's expected + interface. + (parse_descriptions): Convert to gl_list. Return a zero-length list if + whatis is NULL, where previously we returned NULL. + * src/descriptions_store.c (store_descriptions): Convert descs to + gl_list. + * src/descriptions.h (struct page_description): Remove next member. + (parse_descriptions, store_descriptions): Update prototypes. + (free_descriptions): Remove prototype. + * src/lexgrog_test.c (main): Convert descs to gl_list. + * src/straycats.c (check_for_stray): Likewise. Remove conditional, + since parse_descriptions now never returns NULL. + +2019-02-04 Colin Watson + + Improve sandbox_free + + * lib/sandbox.c (sandbox_free): Free sandbox->permissive_ctx too. + +2019-02-04 Colin Watson + + Free seccomp sandbox before normal exit + + This makes valgrind slightly happier. + + * src/lexgrog_test.c (main): Call seccomp_free before exiting. + * src/man.c (main): Likewise. + * src/manconv_main.c (main): Likewise. + * src/mandb.c (main): Likewise. + * src/whatis.c (main): Likewise. + * src/zsoelim_main.c (main): Likewise. + +2019-02-04 Colin Watson + + Port dblookup to gl_list + + * libdb/db_lookup.c (free_mandata_struct): Only free a single structure, + rather than following list pointers. + (split_content): Stop initialising pinfo->next. + (dblookup, dblookup_pattern): Convert to gl_list. Return a zero-length + list to indicate no matches, where previously we returned NULL. + (dblookup_exact): Adjust for changes in dblookup. This function + continues to return a single element rather than a list, since that's + all that its callers need. + * libdb/db_storage.h (struct mandata): Remove next member. + (dblookup_all, dblookup_pattern): Update prototypes. + * src/man.c (db_map_value_free): New function. + (try_db): Convert dblookup_pattern/dblookup_all cache to store gl_lists + or NULL. NULL now means a database open failure and a zero-length list + means no matches in an existing database, rather than vice versa. + * src/whatis.c (do_whatis_section): Convert to gl_list. + +2019-02-03 Colin Watson + + Eliminate #ifdef in straycats.c + + * src/straycats.c (check_for_stray): Replace hand-rolled + FAVOUR_STRAYCATS conditional with an equivalent compare_ids call. + +2019-02-03 Colin Watson + + Add helper functions for common container cases + + * lib/glcontainers.c (new_string_list, new_string_map, new_string_set): + New functions. + * lib/glcontainers.h (new_string_list, new_string_map, new_string_set): + Add prototypes. + + * lib/orderfiles.c (order_files): Use new_string_list. + * src/check_mandirs.c (test_manfile, add_dir_entries): Likewise. + * src/globbing.c (look_for_file, expand_path): Likewise. + * src/man.c (get_section_list): Likewise. + * src/manp.c (get_scetions, get_manpath_from_path, create_pathlist): + Likewise. + * src/straycats.c (check_for_stray): Likewise. + + * libdb/db_gdbm.c (man_gdbm_firstkey): Use new_string_map. + * src/check_mandirs.c (test_manfile): Likewise. + * src/globbing.c (update_directory_cache): Likewise. + * src/man.c (try_db): Likewise. + * src/mandb.c (main): Likewise. + + * libdb/db_btree.c (btree_findkey): Use new_string_set. + * src/whatis.c (main): Likewise. + +2019-02-03 Colin Watson + + Replace hashtable with Gnulib containers + + Since we're using Gnulib's container types anyway, we might as well + reduce the maintenance burden of local code, especially since the result + tends to be more concise. + + * bootstrap.conf (gnulib_modules): Add hash-map, hash-set, xmap, and + xset. + * lib/glcontainers.h (GL_MAP_FOREACH_START, GL_MAP_FOREACH_END): New + macros. + + * lib/orderfiles.c (compare_physical_offsets, order_files): Convert + physical_offsets from a hashtable to a gl_map. + * libdb/db_btree.c (loop_check_hash): Rename to ... + (loop_check): ... this. + (btree_findkey): Convert loop_check from a hashtable to a gl_set. + * libdb/db_gdbm.c (parent_sortkey_hash): Rename to ... + (parent_keys: ... this. + (struct sortkey, parent_sortkey_hashtable_free): Remove. + (sortkey_hashtable_free): Rename to ... + (datum_free): ... this. Adjust for gl_list's expected interface. + (sortkey_compare): Rename to ... + (datum_compare): ... this. Adjust for gl_list's expected interface. + (datum_equals, datum_hash): New functions. + (man_gdbm_firstkey, man_gdbm_nextkey, man_gdbm_close): Convert + parent_keys from a hashtable to a gl_map, and convert its values from + hashtables with manual linking to gl_lists using a hash for fast lookup + by key. + * src/check_mandirs.c (whatis_hash): Rename to ... + (whatis_map): ... this. + (struct whatis_hashent): Rename to ... + (struct whatis): ... this. + (whatis_hashtable_free): Rename to ... + (whatis_free): ... this. Adjust for gl_map's expected interface. + (test_manfile): Convert whatis_map from a hashtable to a gl_map. + * src/globbing.c (struct dirent_hashent): Rename to ... + (struct dirent_names): ... this. + (dirent_hashtable_free): Rename to ... + (dirent_names_free): ... this. Adjust for gl_map's expected interface. + (dirent_hash): Rename to ... + (dirent_map): ... this. + (update_directory_cache): Convert dirent_map from a hashtable to a + gl_map. + * src/man.c (db_hash): Rename to ... + (db_map): ... this. + (db_hashtable_free): Remove. + (try_db, main): Convert db_map from a hashtable to a gl_map. + * src/mandb.c (process_manpath, tried_catdirs_free, purge_catdir, + purge_catdirs, main): Convert tried_catdirs from a hashtable to a + gl_map. + * src/whatis.c (display, main): Convert display_seen from a hashtable to + a gl_set. + + * lib/Makefile.am (libman_la_SOURCES): Remove hashtable.c and + hashtable.h. + * lib/README: Remove hashtable.*. + * lib/hashtable.c, lib/hashtable.h: Remove. + +2019-02-01 Colin Watson + + Port list_extensions to gl_list + + * libdb/db_lookup.c (name_ext_equals): New function. + (list_extensions, dblookup): Convert to gl_list. + * libdb/db_storage.h (struct name_ext): New structure. + (list_extensions): Update prototype. + * libdb/db_delete.c (dbdelete): Convert to gl_list. + +2019-01-31 Colin Watson + + Port ult_src tracing to gl_list + + * src/ult_src.c (ult_trace, free_ult_trace): Remove. + (ult_src): Convert trace handling to gl_list. + * src/ult_src.h (struct ult_trace): Remove. + (ult_src): Update prototype. + (free_ult_trace): Remove. + * src/descriptions_store.c (store_descriptions): Convert to gl_list. + * src/descriptions.h (store_descriptions): Update prototype. + * src/check_mandirs.c (struct whatis_hashent): Change type of trace to + gl_list_t. + (whatis_hashtable_free, test_manfile): Convert to gl_list. + +2019-01-30 Colin Watson + + Use bool in more places in whatis + + * src/whatis.c (use_grep, do_whatis, do_apropos): Change "found" + parameter type to bool *. Update all callers. + (any_set, all_set): Change "found_here" parameter type to bool *. + Update all callers. + (parse_name, parse_whatis): Change "found" and "found_here" parameter + types to bool *. Update all callers. + +2019-01-30 Colin Watson + + Port get_sections to gl_list + + * src/manp.c (get_sections): Convert to gl_list. + * src/manp.h (get_sections): Update prototype. + * src/man.c (is_section, compare_candidates, do_global_apropos, man, + get_section_list): Convert to gl_list. + (compare_candidates): Sort sections missing from section_list to the + end. + (main): Free section_list. + +2019-01-30 Colin Watson + + Use HTTPS URL for libpipeline + + * NEWS, docs/INSTALL.quick: Update libpipeline URL to + https://nongnu.org/libpipeline/. + +2019-01-29 Colin Watson + + Port expand_path to gl_list + + * src/globbing.c (expand_path): Convert to gl_list. + * src/globbing.h (expand_path): Update prototype. + * src/manp.c (def_path, add_dir_to_list, add_dir_to_path_list): Convert + to gl_list. + * src/ult_src.c (find_include): Likewise. + +2019-01-29 Colin Watson + + Fix failure to link libman using the Darwin linker + + Thanks to George Plymale II and John Gardner. + + * configure.ac: Add "-Wl,-flat_namespace,-undefined,suppress" to CFLAGS + on Darwin. + * NEWS: Document this. + +2019-01-29 Colin Watson + + Port order_files and look_for_file to gl_list + + This gets rid of some particularly awful allocation spaghetti in + src/globbing.c. + + * bootstrap.conf (gnulib_modules): Add rbtree-list. + * lib/orderfiles.c (compare_physical_offsets): Expect arguments to be + const char * rather than const char **. + (order_files): Convert to taking a gl_list_t as an input/output argument + rather than an array. In the HAVE_LINUX_FIEMAP_H case, we produce a new + sorted list. + * lib/orderfiles.h (order_files): Update prototype. + * src/globbing.c (clear_glob): Remove. + (match_in_directory): Convert to gl_list. Remove inter-call allocation + and cleanup machinery. + (look_for_file): Convert to gl_list. Remove glob_t cleanup machinery; + the caller is now responsible for freeing the returned list. + * src/globbing.h (look_for_file): Update prototype. + + * src/check_mandirs.c (add_dir_entries, count_glob_matches, + purge_normal): Convert to gl_list. + * src/straycats.c (check_for_stray): Likewise. + + * src/check_mandirs.c (purge_whatis, purge_missing): Convert to gl_list. + Free list returned by look_for_file. + * src/globbing_test.c (main): Likewise. + * src/man.c (try_section, do_global_apropos_section): Likewise. + * src/zsoelim.l (zsoelim_open_file): Likewise. + +2019-01-29 Colin Watson + + Default to --without-systemd* on non-Linux systems + + systemd is unapologetically Linux-specific, so let's not require + non-Linux packages to explicitly turn this off. + + * m4/man-arg-systemdsystemunitdir (MAN_ARG_SYSTEMDSYSTEMUNITDIR): + Default to with_systemdsystemunitdir=no on non-Linux systems. + * m4/man-arg-systemdtmpfilesdir (MAN_ARG_SYSTEMDTMPFILESDIR): Default to + with_systemdtmpfilesdir=no on non-Linux systems. + +2019-01-27 Colin Watson + + Add --quiet to systemd mandb invocation + + Fixes Debian bug #920628. + + * init/systemd/man-db.service.in (ExecStart): Run mandb with --quiet. + * NEWS: Document this. + +2019-01-27 Colin Watson + + Use macros for common cases of list iteration + + * lib/glcontainers.h (GL_LIST_FOREACH_START, GL_LIST_FOREACH_END): New + macros. + * src/catman.c (main): Replace manual list iteration with equivalent + macros. + * src/man.c (do_global_apropos, locate_page_in_manpath): Likewise. + * src/mandb.c (main): Likewise. + * src/manp.c (get_config, print_list, get_sections, def_path, + get_manpath_from_path, create_pathlist, get_mandb_manpath, get_catpath, + is_global_mandir): Likewise. + * src/whatis.c (search): Likewise. + * src/zsoelim.l (zsoelim_open_file): Likewise. + +2019-01-27 Colin Watson + + Rename gl-container-helpers to glcontainers + + This is less annoying to type. + + * lib/gl-container-helpers.c: Rename to ... + * lib/glcontainers.c: ... this. + * lib/gl-container-helpers.h: Rename to ... + * lib/glcontainers.h: ... this. + * lib/Makefile.am (libman_la_SOURCES): Replace gl-container-helpers.c + and gl-container-helpers.h with glcontainers.c and glcontainers.h. + * src/manp.c: Update include. + +2019-01-27 Colin Watson + + Move Gnulib container helpers into common code + + * src/manp.c (string_equals, string_hash, string_free): Move to ... + * lib/gl-container-helpers.c (string_equals, string_hash, plain_free): + ... here (new file). + * lib/gl-container-helpers.h: New file. + * lib/Makefile.am (libman_la_SOURCES): Add gl-container-helpers.c and + gl-container-helpers.h. + +2019-01-26 Colin Watson + + Turn config flags into an enum + + * src/manp.c (enum config_flag): New enumeration. + (struct config_item, def_path, add_config, get_config, get_sections, + def_path): Use enum config_flag. + (describe_flag): New function. + (print_list): Describe flags rather than printing their integer value. + (add_def): Remove flag parameter; expect caller to pass the correct + config_def value instead. Make thing and config_def const. + (add_mandb_map): Remove flag parameter; expect caller to pass the + correct catdir value instead. + (add_to_dirlist): Update calls to add_mandb_map and add_def. + +2019-01-26 Colin Watson + + Port internal configuration storage to gl_list + + * bootstrap.conf (gnulib_modules): Add array-list. + * src/manp.c (struct list): Remove. + (struct config_item): New structure. + (config_item_free): New function. + (add_to_list): Rename to ... + (add_config): ... this. Convert to gl_list. Update all callers. + (get_from_list): Rename to ... + (get_config): ... this. Convert to gl_list. Update all callers. + (iterate_over_list): Remove. + (print_list, get_sections, free_config_file, def_path, + get_manpath_from_path, get_mandb_manpath, get_catpath, + is_global_mandir): Port config list handling to gl_list. + (add_to_dirlist): Rename config parameter to config_file. + (read_config_file): Create empty config list. Rename previous local + config variable to config_file. + +2019-01-26 Colin Watson + + Use Gnulib's lchown function + + Also remove lib/xchown.*; with only one call site, they don't pull their + weight over equivalent inline code. + + * bootstrap.conf (gnulib_modules): Add lchown. + * configure.ac (AC_CHECK_FUNCS): Remove check for lchown. + * lib/Makefile.am (libman_la_SOURCES): Remove xchown.c and xchown.h. + * src/check_mandirs.c (chown_if_possible): Always use lchown rather than + chown, and inline the error check. + + * po/POTFILES.in: Remove lib/xchown.c. + * po/man-db.pot, po/*.po: Update. + +2019-01-26 Colin Watson + + Simplify includes using Gnulib's fcntl module + + * bootstrap.conf (gnulib_modules): Add fcntl. + * configure.ac (AC_CHECK_HEADERS): Remove check for fcntl.h. + * libdb/db_btree.c, libdb/db_ndbm.c, libdb/mydbm.h, src/man.c: Include + unconditionally. + * src/man.c: Remove conditional definitions of R_OK and X_OK; Gnulib's + handles these. + +2019-01-26 Colin Watson + + Replace check_standard_fds with Gnulib's xstdopen + + * bootstrap.conf (gnulib_modules): Add xstdopen. + * src/man.c (check_standard_fds): Remove. + (main): Call xstdopen rather than check_standard_fds. + +2019-01-26 Colin Watson + + Update to Gnulib 20190124 + +2019-01-26 Colin Watson + + Use bool type where appropriate + + Now that we're using anyway due to gl_list (with Gnulib + providing if necessary), it makes sense to use it for our + own functions that have essentially boolean semantics. + + * lib/encodings.c (compatible_encodings, is_roff_device): Return bool. + * lib/pathsearch.c (pathsearch, pathsearch_executable, + directory_on_path): Likewise. + * lib/sandbox.c (search_ld_preload, can_load_seccomp): Likewise. + * lib/security.c (running_setuid): Likewise. + * lib/wordfnmatch.c (word_fnmatch): Likewise. Update all callers. + * src/check_mandirs.c (sanity_check_db): Likewise. + * src/man.c (duplicate_candidates): Likewise. + * src/manp.c (is_global_mandir): Likewise. Update all callers. + * src/whatis.c (suitable_manpath, match): Likewise. + (any_set, all_set): Likewise. Update all callers. + + * lib/encodings.h (is_roff_device): Update prototype. + * lib/pathsearch.h (pathsearch_executable, directory_on_path): Likewise. + * lib/security.h (running_setuid): Likewise. + * lib/wordfnmatch.h (word_fnmatch): Likewise. + * src/manp.h (is_global_mandir): Likewise. + + * src/mandb.c (mandb, process_manpath): Change global_manpath parameter + type to bool. + +2019-01-26 Colin Watson + + Note that some C99 runtime facilities may be used + + * docs/HACKING (Facilities and portability): Note that C99 runtime + facilities that are provided by Gnulib are OK. + +2019-01-26 Colin Watson + + Remove arbitrary limit on manpath size + + Fixes Savannah bug #50324. + + * bootstrap.conf (gnulib_modules): Add hash-pjw-bare, linkedhash-list, + stdbool, and xlist. + * include/manconfig.h.in (MAXDIRS): Remove. + + * src/manp.c (tmplist): Remove. + (string_equals, string_hash, string_free): New functions. + (gripe_overlong_list): Remove. + (insert_override_dir, get_manpath_from_path, add_expanded_dir_to_list, + add_dir_to_list, add_man_subdirs, add_dir_to_path_list, create_pathlist, + free_pathlist): Port manpath list handling to gl_list_t. + * src/catman.c (main): Likewise. + * src/man.c (do_global_apropos, local_man_loop, locate_page_in_manpath, + main): Likewise. + * src/mandb.c (main): Likewise. + * src/whatis.c (suitable_manpath, search, main): Likewise. + * src/zsoelim.l (<>, zsoelim_parse_file, zsoelim_open_file, + zsoelim_stdin, zsoelim_stdin_data_new): Likewise. + * src/zsoelim_main.c (main): Likewise. + + * src/manp.h (create_pathlist, free_pathlist): Update prototypes. + * src/zsoelim.h (zsoelim_open_file, zsoelim_parse_file, + zsoelim_stdin_data_new): Likewise. + + * NEWS: Document this. + +2019-01-26 Colin Watson + + * NEWS: Document previous commit. + +2019-01-26 Colin Watson + + Automatically add more man directories to manpath + + Will Starms reported that, if both ../man and ../share/man directories + (for example) exist relative to a directory on $PATH, then only the + first was considered. + + * src/manp.c (has_mandir): Rename to ... + (add_man_subdirs): ... this. Insert directories as they are found + rather than returning them, and continue even if some have been found. + (get_manpath_from_path): Update call to add_man_subdirs. + +2019-01-08 Colin Watson + + Recommend a distribution-independent bug tracker + + * README: Link to https://savannah.nongnu.org/bugs/?group=man-db for bug + reporting. + +2019-01-05 Colin Watson + + * Version: 2.8.5. + +2019-01-05 Colin Watson + + Upgrade to Gnulib 20190105 + + In line with Gnulib, we now require Autoconf 2.63 and Automake 1.11.2. + + * bootstrap: Sync to Gnulib d271f868a8df9bbec29049d01e056481b7a1a263. + * bootstrap.conf (GNULIB_REVISION): Set to + d271f868a8df9bbec29049d01e056481b7a1a263. + (buildreq): Bump required autoconf version to 2.63 and required automake + version to 1.11.2. + * configure.ac (AM_SILENT_RULES, AM_PROG_AR): Remove conditionals, which + were there for Automake 1.10 support. + (AC_PREREQ): Bump to 2.63. + * NEWS: Document this. + +2019-01-05 Colin Watson + + Use tar --sort=name if available + + * m4/man-tar-sort-name.m4: New file. + * configure.ac: Call MAN_TAR_SORT_NAME. + +2019-01-05 Colin Watson + + Fix distcheck following addition of systemd timer + + * Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Add + --with-systemdsystemunitdir=\$${prefix}/lib/systemd/system. + +2019-01-05 Colin Watson + + Fix distribution of man-db.timer + + Automake's "_DATA" primary defaults to "nodist_", not "dist_". + + * init/systemd/Makefile.am (systemdsystemunit_DATA): Rename to ... + (dist_systemdsystemunit_DATA): ... this. + (nodist_systemdsystemunit_DATA): Rename to ... + (systemdsystemunit_DATA): ... this. + (EXTRA_DIST): Add man-db.timer if INSTALL_SYSTEMD_TIMER is false. + +2019-01-05 Colin Watson + + sandbox: Work around Microsoft SCEP + + This is a proprietary antivirus program and I've only been able to guess + at how to handle it. Note that it is no longer supported by Microsoft + and so users should probably replace it with something else, but I still + want to minimise the number of support requests I get related to it. + + * lib/sandbox.c (make_seccomp_filter): If libscep_pac.so is preloaded, + then allow some system calls related to sockets and System V message + queues. + * NEWS: Document this. + +2018-12-24 Colin Watson + + Use (void *) 0 as a variadic sentinel + + NULL is formally incorrect here since the standard allows it to be an + integer constant expression. + + * lib/decompress.c (decompress_open, decompress_fdopen): Use (void *) + rather than NULL as a sentinel for variadic functions. + * libdb/db_delete.c (dbdelete): Likewise. + * src/catman.c (catman, parse_for_sec, main): Likewise. + * src/check_mandirs.c (add_dir_entries): Likewise. + * src/compression.c (comp_file): Likewise. + * src/filenames.c (make_filename): Likewise. + * src/globbing.c (look_for_file): Likewise. + * src/lexgrog.l (find_name): Likewise. + * src/man.c (do_extern, run_mandb, make_roff_command, make_browser, + setenv_less, add_output_iconv, make_display_command, tmp_cat_filename, + format_display_and_save, format_display, display_catman, display, + local_man_loop): Likewise. + * src/manconv_client.c (add_manconv): Likewise. + * src/manconv_main.c (parse_opt): Likewise. + * src/manp.c (pathappend, add_nls_manpaths, add_system_manpath, + add_dir_to_path_list, get_catpath): Likewise. + * src/straycats.c (check_for_stray, open_catdir, straycats): Likewise. + * src/whatis.c (use_grep, display): Likewise. + +2018-12-06 Colin Watson + + Honour --enable-cache-owner in systemd timer + + * init/systemd/Makefile.am (man-db.service): Substitute + @cache_top_owner@. + * init/systemd/man-db.service.in (ExecStart, User): Use + @cache_top_owner@ rather than hardcoding "man". + +2018-12-06 Colin Watson + + Improve systemd unit commentary + + * init/systemd/man-db.service.in (ExecStart): Add comment. + +2018-12-06 Colin Watson + + Allow disabling installation of systemd components + + * m4/man-arg-systemdtmpfilesdir.m4: Define an INSTALL_SYSTEMD_TMPFILES + Automake conditional (true unless --with-systemdtmpfilesdir=no). + * m4/man-arg-systemdsystemunitdir.m4: Define an INSTALL_SYSTEMD_TIMER + Automake conditional (true unless --with-systemdsystemunitdir=no). + * init/systemd/Makefile.am: Honour INSTALL_SYSTEMD_TMPFILES and + INSTALL_SYSTEMD_TIMER. + +2018-12-06 Colin Watson + + Ship a systemd timer for daily DB maintenance + + Thanks to Christian Göttsche. Fixes Debian bug #858022. + + * m4/man-arg-systemdsystemunitdir.m4: New file. + * configure.ac: Accept --with-systemdsystemunitdir option. + * init/systemd/Makefile.am (EXTRA_DIST): Add man-db.service.in. + (CLEANFILES): Add man-db.service. + (systemdsystemunit_DATA): Install man-db.timer. + (nodist_systemdsystemunit_DATA): Install man-db.service. + (man-db.service): New rule. + * init/systemd/man-db.service.in, init/systemd/man-db.timer: New files. + * .gitignore: Add init/systemd/man-db.service. + * NEWS: Document this. + +2018-11-14 Colin Watson + + Fix incorrect error message + + Reported by Julian Gilbey. Fixes Debian bug #913721. + + * src/man.c (check_standard_fds): Correct error message if stdout is not + open for writing (not "for reading", as previously claimed). + +2018-11-09 Colin Watson + + release.sh: Simplify Lex handling + + release.sh had a hack to ensure that flex-generated scanners are fresh + in release tarballs. This is more easily achieved by configuring with + --enable-maintainer-mode, which causes Automake to enable the Lex + rebuild rule. + + * release.sh: Configure with --enable-maintainer-mode; drop conditional + removals of src/lexgrog.c and src/zsoelim.c. + +2018-11-09 Colin Watson + + lexgrog: Fix handling of \- in RHS of NAME section + + Fixes Debian bug #913351. + + * src/lexgrog.l (MAN_NAME): Split into MAN_NAME (left-hand side) and + MAN_DESC (right-hand side). Most rules remain as before, except that \- + and similar are only handled specially in MAN_NAME and transition to + MAN_DESC, and rules that add a 0x11 marker (indicating the start of a + new whatis definition) transition to MAN_NAME. + (MAN_NAME_AT, MAN_NAME_BSX, MAN_NAME_BX, MAN_NAME_BX_RELEASE, + MAN_NAME_DQ, MAN_NAME_FX, MAN_NAME_NX, MAN_NAME_OX): Rename to + MAN_DESC_*. + (mdoc_text): Transition to MAN_DESC rather than MAN_NAME. + (newline_found): If adding 0x11, transition to MAN_NAME. + * src/tests/lexgrog-3: New file. + * src/tests/Makefile.am (ALL_TESTS): Add lexgrog-3. + * NEWS: Document this. + +2018-11-09 Colin Watson + + * NEWS: Document changes since 2.8.4. + +2018-11-09 Colin Watson + + lexgrog: Add test for multiple whatis definitions + + * src/tests/lexgrog-2: New file. + * src/tests/Makefile.am (ALL_TESTS): Add lexgrog-2. + +2018-11-09 Colin Watson + + lexgrog: Tidy up rules section + + No functional change. + + * src/lexgrog.l: Make more use of start condition scopes. Reindent + rules somewhat to make better use of vertical space. + +2018-11-03 Nikola Forró + + Fix several resource and memory leaks + + * lib/decompress.c (decompress_zlib): Fix fd leak if gzdopen fails. + * lib/encodings.c (find_charset_locale): Free locale if setlocale fails. + * src/man.c (make_roff_command): Free fmt_prog. + * src/mandb.c (process_manpath): Free catpath if manpath is not a + directory. + * src/whatis.c (do_apropos): Free found_here. + +2018-10-27 enolp + + Add Asturian translation + + * po/ast.po: New from Translation Project. + * po/LINGUAS: Add ast. + * man/THANKS: Add translator credit. + +2018-10-27 Pedro Albuquerque + + Update Portuguese manual page translation + + * man/po4a/po/pt.po: Update from Translation Project. + +2018-10-21 Colin Watson + + Add Portuguese manual page translation + + * man/po4a/po/pt.po: New from Translation Project (thanks, Pedro + Albuquerque). + * configure.ac (AC_CONFIG_FILES): Add man/pt/Makefile. + * man/LINGUAS.po4a: Add pt. + * man/Makefile.am (DIST_SUBDIRS): Add pt. + * man/pt/Makefile.am, man/pt/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/pt.po. + * man/po4a/po4a.cfg (po4a_langs): Add pt. + * man/THANKS: Add translator credit. + * .gitignore: Add man/pt/man1, man/pt/man5, and man/pt/man8. + +2018-10-21 Colin Watson + + Switch more language lists to one-per-line format + + * man/LINGUAS.po4a: Switch to one language code per line, so that we + have better diffs in future. + * man/Makefile.am (DIST_SUBDIRS): Likewise. + * man/po4a/cfg (po4a_langs): Likewise. + +2018-10-21 Pedro Albuquerque + + Add Portuguese translation + + * po/pt.po: New from Translation Project. + * po/LINGUAS: Add pt. + * man/THANKS: Add translator credit. + +2018-10-21 Colin Watson + + Switch po/LINGUAS to one-per-line format + + * po/LINGUAS: Switch to one language code per line, so that we have + better diffs in future. + +2018-10-21 Chen Qi + + man-arg-config-file: fix to use config_file + + * m4/man-arg-config-file.m4: Compute config_file_basename based on + config_file, not withval. + +2018-08-20 Colin Watson + + Fail to configure if flex is needed but missing + + Fixes Savannah bug #54541. + + * configure.ac: Issue an error if AC_PROG_LEX didn't find a lexer + generator and either src/lexgrog.c or src/zsoelim.c is missing (as may + be the case when building from a git clone rather than a released + tarball). + +2018-08-02 Colin Watson + + Fix warning from gcc -Wcast-function-type + + This exposed the fact that errors from unlink in the cleanup path were + previously ignored. We now issue a warning in the same way that + commit_tmp_cat does. + + * src/man.c (cleanup_unlink): New function. + (open_cat_stream, close_cat_stream, display_catman): Use cleanup_unlink + rather than an incorrect cast of unlink. + +2018-08-02 Colin Watson + + Fix build with Berkeley DB + + Fixes Savannah bug #54425. + + * libdb/db_btree.c: Include for free. + +2018-07-27 Colin Watson + + Update advertised file size + + * docs/man-db.lsm (Primary-site): Update file size. + +2018-07-27 Colin Watson + + * Version: 2.8.4. + +2018-07-27 Colin Watson + + Work around Gnulib/gettext mismatch + + The versions of gettext infrastructure files installed by gnulib-tool + don't necessarily match our configured AM_GNU_GETTEXT_VERSION, so we + need to fix things up in bootstrap. + + * bootstrap.conf (gnulib_tool_option_extras): Set --po-base to gl/ref-po + rather than gnulib/po. + (bootstrap_post_import_hook): Merge temporary gl/ref-po directory into + gl/po. + +2018-07-27 Colin Watson + + Upgrade to Gnulib 20180726 + + * bootstrap: Sync to Gnulib 900ca5c0b092e50f9f17329feea3fbfe2b6e2139. + * bootstrap.conf (GNULIB_REVISION): Set to + 900ca5c0b092e50f9f17329feea3fbfe2b6e2139. + +2018-07-18 Colin Watson + + Distribute man/es/translator.add + + * man/es/Makefile.am (EXTRA_DIST): Add translator.add. + +2018-07-16 Colin Watson + + sandbox: Improve ESET compatibility further + + * lib/sandbox.c (make_seccomp_filter): If libesets_pac.so is preloaded, + then allow msgset (second argument 0) and msgsnd. + * NEWS: Document this. + +2018-07-15 Colin Watson + + sandbox: Allow some shared memory operations + + These were previously only allowed when ESET File Security is in use, + but the Astrill VPN seems to require something similar, there are + doubtless other such preload hacks, and they're relatively harmless. + + * lib/sandbox.c (make_seccomp_filter): Allow shmat (third argument + SHM_RDONLY), shmctl (second argument IPC_STAT), shmdt, and shmget + regardless of preloads. + * NEWS: Document this. + +2018-06-08 Colin Watson + + Check for external formatter in correct directory + + Check for mandb_nfmt and mandb_tfmt in the manual page hierarchy as + documented, not in the current directory. This was broken by the + working-directory-handling changes in 2.8.3. + + Reported by Josh Triplett. Fixes Debian bug #901007. + + * src/man.c (NFMT_PROG, TFMT_PROG): Remove leading "./". + (make_roff_command): Refactor confusing #ifdef forest. Prefix dir to + TFMT_PROG/NFMT_PROG rather than looking in the current directory. Don't + look for an external formatter at all if dir is NULL. + * NEWS: Document this. + +2018-06-08 Colin Watson + + Define an access(2) wrapper with clearer semantics + + As usual for system calls, access(2) returns zero on success. However, + I generally think of it as "can we access this file in this way", where + boolean semantics would be more convenient, and find it too easy to + invert logic by accident when using the system call directly. Define a + CAN_ACCESS wrapper with boolean semantics. + + * include/manconfig.h.in (CAN_ACCESS): New macro. + * lib/tempfile.c (path_search): Use CAN_ACCESS. + * src/catman.c (check_access): Likewise. + * src/filenames.c (make_filename): Likewise. + * src/man.c (make_roff_command, display): Likewise. + * src/ult_src.c (find_include): Likewise. + * src/whatis.c (use_grep): Likewise. + +2018-06-07 Felipe Castro + + Update Esperanto translation + + * po/eo.po: Update from Translation Project. + +2018-06-01 Francisco Javier F. Serrador + + Update Spanish manual page translation + + * man/po4a/po/es.po: Update from Translation Project. + * man/THANKS: Update translator credit. + +2018-05-29 Colin Watson + + Add po4a-based Spanish manual page translation + + This supersedes the previous whole-file translations, which had not been + properly updated in many years. + + * man/po4a/po/es.po: New from Translation Project (thanks, Francisco + Javier Serrador). + * man/LINGUAS: Remove es. + * man/LINGUAS.po4a: Add es. + * man/es/Makefile.am (PO4A_LINGUA): Set to yes. + (man1_MANS): Add man1/lexgrog.1 and man1/manconv.1. + (man8_MANS): Add man8/accessdb.8. + * man/es/man1/apropos.man1, man/es/man1/man.man1, + man/es/man1/manpath.man1, man/es/man1/whatis.man1, + man/es/man1/zsoelim.man1, man/es/man5/manpath.man5, + man/es/man8/catman.man8, man/es/man8/mandb.man8: Remove. + * man/es/translator.add: New file. + * man/po4a/Makefile.am (POFILES): Add po/es.po. + * man/po4a/po4a.cfg (po4a_langs): Add es. + * man/THANKS: Update translator credit. + * .gitignore: Add man/es/man1, man/es/man5, and man/es/man8. + +2018-05-29 Colin Watson + + Remove useless if-before-free tests + + * lib/hashtable.c (plain_hashtable_free): Remove; this is precisely + equivalent to free. + * lib/hashtable.h (plain_hashtable_free): Remove. + * lib/orderfiles.c (order_files): Use free rather than + plain_hashtable_free. + * libdb/db_btree.c (btree_findkey): Likewise. + + * lib/pathsearch.c (pathsearch, directory_on_path): Remove useless + if-before-free. + * libdb/db_lookup.c (free_mandata_elements): Likewise. + * src/check_mandirs.c (test_manfile, count_glob_matches): Likewise. + * src/descriptions.c (free_descriptions): Likewise. + * src/lexgrog_test.c (main): Likewise. + * src/man.c (display_filesystem, display_database, get_section_list): + Likewise. + * src/manp.c (add_system_manpath): Likewise. + * src/straycats.c (check_for_stray, straycats): Likewise. + * src/ult_src.c (ult_src): Likewise. + +2018-05-29 Colin Watson + + Use Gnulib progname module + + This lets us produce more accurate error messages when programs are + invoked with an absolute path. + + * bootstrap.conf (gnulib_modules): Add progname. + * include/manconfig.h.in (program_name): Remove. + * src/accessdb.c (main): Call set_program_name rather than similar + hand-rolled code. + * src/catman.c (main): Likewise. Don't free program_name. + * src/globbing_test.c (main): Likewise. + * src/lexgrog_test.c (main): Likewise. + * src/man.c (main): Likewise. Don't free program_name. + * src/manconv_main.c (main): Likewise. + * src/mandb.c (main): Likewise. Don't free program_name. + * src/manpath.c (main): Likewise. + * src/tests/fspause.c (main): Likewise. + * src/whatis.c (main): Likewise. + * src/zsoelim_main.c (main): Likewise. + + * src/man.c (manopt_to_env): Run program_name through base_name, since + that's no longer necessarily done up-front. + * src/whatis.c (main): Run program_name through base_name before + comparing it to APROPOS_NAME, since that's no longer necessarily done + up-front. + +2018-05-29 Colin Watson + + Upgrade to Gnulib 20180527 + + * bootstrap.conf (GNULIB_URL): Remove. + (GNULIB_REVISION): Set to 90f289f249a266b1afb9c63e182f5d979d17df5f. + (gnulib_modules): Replace gettext with gettext-h. + (gnulib_tool_option_extras): Remove --no-cache-modules (accidental + leftover from earlier testing). + (local_gl_dir): Set to 'gnulib-local' to avoid confusion with 'gl' as + the local output directory. Remove 'rm -rf gl' hack, now superseded. + (buildreq): Bump minimum autopoint and gettext versions to 0.18.3, + matching previous change to configure.ac. + * configure.ac (AM_PROG_AR, LT_INIT): Move below gl_EARLY. + * patches/argp-domain.patch: Rebase. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Remove use of + @LOCALCHARSET_TESTS_ENVIRONMENT@, which is no longer needed by Gnulib. + +2018-05-28 Colin Watson + + Switch to bootstrap + + We no longer keep autogenerated files in git. + + * .gitignore: Add **/Makefile, **/Makefile.in, /ABOUT-NLS, /aclocal.m4, + /build-aux, /config.h.in, /configure, /gl, /gnulib, + docs/INSTALL.autoconf, po/Makefile.in.in, po/Makevars, po/Rules-quot, + po/boldquot.sed, po/en@boldquot.header, po/en@quot.header, + po/insert-header.sin, po/quot.sed, and po/remove-potcdate.sin. Remove + docs/Makefile, gnulib/*, init/Makefile, init/systemd/Makefile, + lib/Makefile, libdb/Makefile, man/Makefile, man/*/Makefile, + manual/Makefile, po/Makefile, po/Makefile.in, src/Makefile, + src/tests/Makefile, and tools/Makefile. + * ABOUT-NLS, Makefile.in, aclocal.m4, autogen.sh, build-aux, + config.h.in, configure, docs/INSTALL.autoconf, docs/Makefile.in, gnulib, + init/Makefile.in, init/systemd/Makefile.in, lib/Makefile.in, + libdb/Makefile.in, man/Makefile.in, man/da/Makefile.in, + man/de/Makefile.in, man/es/Makefile.in, man/fr/Makefile.in, + man/id/Makefile.in, man/it/Makefile.in, man/ja/Makefile.in, + man/nl/Makefile.in, man/pl/Makefile.in, man/po4a/Makefile.in, + man/pt_BR/Makefile.in, man/ru/Makefile.in, man/sr/Makefile.in, + man/sv/Makefile.in, man/tr/Makefile.in, man/zh_CN/Makefile.in, + manual/Makefile.in, po/Makefile.in.in, po/Makevars, po/Rules-quot, + po/boldquot.sed, po/en@boldquot.header, po/en@quot.header, + po/insert-header.sin, po/quot.sed, po/remove-potcdate.sin, + src/Makefile.in, src/tests/Makefile.in, tools/Makefile.in: Remove. + + * bootstrap, bootstrap.conf: New files. + * Makefile.am (GNULIB_PO, SUBDIRS, EXTRA_DIST, ACLOCAL_AMFLAGS): Refer + to gl/ rather than gnulib/ (gnulib/ now contains pristine source). + (EXTRA_DIST): Replace autogen.sh with bootstrap and bootstrap.conf. + Replace gnulib/argp-domain.patch with patches/argp-domain.patch. Add + patches/fdutimens-hurd.patch. Remove gnulib/m4/gnulib-cache.m4 and + gnulib/m4/gnulib-tool.m4. + * gnulib/argp-domain.patch: Rename to ... + * patches/argp-domain.patch: ... this. Update target paths. + * gnulib/fdutimens-hurd.patch: Rename to ... + * patches/fdutimens-hurd.patch: ... this. Update target paths. + * configure.ac (AM_GNU_GETTEXT_VERSION): Upgrade to 0.18.3, for + compatibility with current Automake. + (HAVE_GNULIB_PO, AC_CONFIG_FILES): Refer to gl/ rather than gnulib/. + * lib/Makefile.am (libman_la_CPPFLAGS, libman_la_LIBADD): Likewise. + * libdb/Makefile.am (libmandb_la_CPPFLAGS): Likewise. + * src/Makefile.am (AM_CPPFLAGS, LIBMAN): Likewise. + * src/tests/Makefile.am (AM_CPPFLAGS, fspause_LDADD): Likewise. + + * docs/HACKING: Describe new policy. + * release.sh: Call ./bootstrap rather than ./autogen.sh. + +2018-05-17 pan93412 + + Add Traditional Chinese translation + + * po/zh_TW.po: New from Translation Project. + * po/LINGUAS: Add zh_TW. + * man/THANKS: Add translator credit. + +2018-04-22 Colin Watson + + sandbox: Allow sched_getaffinity + + This is used by xz-utils >= 5.2.3 if the --threads=0 option is in use + (perhaps via XZ_DEFAULTS or XZ_OPT). + + Reported by Axel Rohde. + + * lib/sandbox.c (make_seccomp_filter): Allow sched_getaffinity. + * NEWS: Document this. + +2018-04-06 Colin Watson + + Fix invalid man-db.conf with --disable-cache-owner + + Fixes Savannah bug #53575. + + * m4/man-arg-cache-owner.m4: Set and substitute cache_top_owner. + * init/systemd/man-db.conf.in: Substitute cache_top_owner rather than + man_owner. + * init/systemd/Makefile.am (man-db.conf): Likewise. + * NEWS: Document this. + +2018-04-06 Colin Watson + + Remove redundant debugging information + + * lib/decompress.c (decompress_open): Remove filename from + decompress_zlib command name. pipeline_dump already includes this + information from want_infile. + +2018-04-06 Colin Watson + + Rely on decompressors reading from stdin + + This works better with downstream AppArmor confinement of decompressors. + + * lib/decompress.c (decompress_open): Don't pass filename on + decompressor command lines. + * NEWS: Document this. + +2018-04-05 Colin Watson + + * Version: 2.8.3. + +2018-04-05 Colin Watson + + Suppress spurious gettext headers in --help output + + Some of man-db's commands have post-options help text but no pre-options + help text. Unfortunately, the way this works in argp (separating the + two sections using a '\v' character) means that this results in argp + trying to translate the empty string, which produces gettext catalog + headers. The easiest way to suppress this odd behaviour seems to be to + use a help filter function, so do that. + + Reported by Rafael Fontenelle. + + * src/accessdb.c (help_filter): Return NULL for ARGP_KEY_HELP_PRE_DOC. + * src/lexgrog_text.c (help_filter): New function. + (argp): Add help_filter. + * src/whatis.c (help_filter): New function. + (apropos_argp): Add help_filter. + * NEWS: Document this. + +2018-04-05 Colin Watson + + Fix compiler warnings on x32 + + tv_nsec is __syscall_slong_t == long long there, so we need a cast. + + * libdb/db_lookup.c (dbprintf): Cast tv_nsec to long for %ld format. + * libdb/db_store.c (make_content): Likewise. + * src/check_mandirs.c (testmandirs, update_db): Likewise. + * src/man.c (maybe_update_file): Likewise. + +2018-04-04 Colin Watson + + Fix broken test + + * src/tests/man-8: Fix expected output to account for recent change to + locale_macros. + +2018-04-04 Colin Watson + + man: Only change directory in child processes + + This avoids failures due to being unable to change back to the original + working directory. + + Fixes Debian bug #894792. + + * gnulib/m4/gnulib-cache.m4 (gl_MODULES): Remove save-cwd. + * src/man.c (make_display_command): Remove now-unnecessary code to run + the pager in the original working directory. + (chdir_commands): New function. + (format_display): Change directory just for format_cmd and disp_cmd + rather than in-process. + (display): Change directory just for format_cmd rather than in-process. + (main): Remove now-unnecessary code to save and restore the current + working directory. + * NEWS: Document this. + +2018-04-04 Colin Watson + + Upgrade config.guess/config.sub + + * build-aux/config.guess: Upgrade to 2018-02-24. + * build-aux/config.sub: Upgrade to 2018-02-22. + +2018-04-01 Colin Watson + + Fix locale_macros version check for groff RCs + + Thanks to Werner LEMBERG. + + * src/man.c (locale_macros): Tolerate groff release candidates. + * NEWS: Document this. + +2018-03-30 Colin Watson + + sandbox: Allow sibling architectures on x86 etc. + + Fixes Debian bug #891267. + + * lib/sandbox.c (make_seccomp_filter): Allow sibling architectures on + x86/x86_64/x32. + * NEWS: Document this. + +2018-03-17 Colin Watson + + sandbox: Tighten up storage classes + + * lib/sandbox.c (make_seccomp_filter, _sandbox_load): Declare as static. + +2018-03-17 Colin Watson + + sandbox: Allow kill and tgkill outright + + This is unfortunate but unavoidable: groff uses kill to explicitly pass + on SIGPIPE to its child processes, and we can't do any more + sophisticated filtering in seccomp. + + Based on a patch by Paul Wise. Fixes Debian bug #892309. + + * lib/sandbox.c (make_seccomp_filter): Allow kill and tgkill + unconditionally. + (adjust_seccomp_filter): Remove. + (_sandbox_load): Remove call to adjust_seccomp_filter. + * NEWS: Document this. + +2018-03-17 Colin Watson + + sandbox: Allow madvise + + Reported by Tobias Klausmann. + + * lib/sandbox.c (make_seccomp_filter): Allow madvise. + * NEWS: Document this. + +2018-03-02 Francisco Javier Serrador + + Update Spanish translation + + * po/es.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2018-02-28 Colin Watson + + * Version: 2.8.2. + +2018-02-28 Colin Watson + + sandbox: Handle qemu-user returning EFAULT + + Fixes Debian bug #891109. + + * lib/sandbox.c (_sandbox_load): Interpret EFAULT from seccomp_load as + meaning that seccomp is unavailable, since this can be returned by some + versions of qemu-user. + * NEWS: Document this. + +2018-02-28 Colin Watson + + sandbox: Add some more ESET affordances + + * lib/sandbox.c (make_seccomp_filter): If libesets_pac.so is preloaded, + then allow some shared memory calls and checking for the existence of + other processes. + +2018-02-25 Colin Watson + + sandbox: Work around snoopy + + Fixes Debian bug #890861. + + * lib/sandbox.c (search_ld_preload): Cache /etc/ld.so.preload contents + between calls. + (make_seccomp_filter): Allow some socket-related system calls if + libsnoopy.so is preloaded. + +2018-02-25 Colin Watson + + sandbox: Generalise libesets_pac.so check slightly + + * lib/sandbox.c (make_seccomp_filter): LD_PRELOAD or /etc/ld.so.preload + can just contain "libesets_pac.so" without an explicit path, so make the + search slightly more permissive. + +2018-02-20 Colin Watson + + sandbox: Handle /etc/ld.so.preload + + At least ESET File Security may be configured using /etc/ld.so.preload + rather than the LD_PRELOAD environment variable, so unfortunately we + need to check that too. + + * lib/sandbox.c (search_ld_preload): New function, handling both + LD_PRELOAD and /etc/ld.so.preload. + (can_load_seccomp, make_seccomp_filter): Use search_ld_preload. + +2018-02-19 Colin Watson + + sandbox: Work around ESET File Security + + This is a proprietary antivirus program, so this is only a best guess + from strace output. The choices are to disable the sandbox entirely or + to allow a few socket-related system calls if this antivirus program is + detected, and the latter is probably slightly better. + + Reported by John Sivak. + + * lib/sandbox.c (make_seccomp_filter): If LD_PRELOAD contains the + substring "/libesets_pac.so", then allow some socket-related system + calls so that the preload wrapper can talk to its daemon. + * NEWS: Document this. + +2018-02-19 Colin Watson + + sandbox: Allow ioctl(fd, TIOCGWINSZ) + + Patch from the anonymous reporter of + https://savannah.nongnu.org/bugs/?53183 (though I think is obvious for + copyright purposes given knowledge of the failing system call). + + Fixes Savannah bug #53183 (maybe). + + * lib/sandbox.c (make_seccomp_filter): Allow ioctl(fd, TIOCGWINSZ). + * NEWS: Document this. + +2018-02-14 Colin Watson + + sandbox: Allow kill/tgkill for current process + + xz is multithreaded, so the threading library may need to use tgkill to + pass signals between threads, for example when it receives SIGPIPE. + + Fixes Savannah bug #53143. + + * lib/sandbox.c (SC_ALLOW, SC_ALLOW_ARG_1, SC_ALLOW_ARG_2): Move macro + definitions out of make_seccomp_filter. + (adjust_seccomp_filter): New function. + (sandbox_load): Call adjust_seccomp_filter. + * NEWS: Document this. + +2018-02-09 Colin Watson + + * Version: 2.8.1. + +2018-02-09 Colin Watson + + Use HTTPS URLs where possible + + * Makefile.am, NEWS, README, docs/HACKING, docs/INSTALL.quick, + lib/sandbox.c, manual/misc.me, src/check_mandirs.c, src/man.c, + src/manconv.c, src/tests/man-1, src/tests/man-2, src/tests/mandb-2, + src/tests/mandb-4, src/tests/mandb-5, src/tests/zsoelim-1: Replace + http:// links with https:// equivalents. + * docs/HACKING: Replace git:// link with an https:// equivalent. + +2018-02-09 Colin Watson + + Chase some redirects + + * NEWS: Link to https://bazaar.canonical.com/ rather than + http://bazaar-vcs.org/. + * man/fr/translator.add: Link to https://po4a.org/ rather than + http://po4a.alioth.debian.org/. + +2018-02-08 Colin Watson + + sandbox: Allow mremap + + * lib/sandbox.c (make_seccomp_filter): Allow mremap, which may be used + by iconv when reading files, depending on libc configuration. + * NEWS: Document this. + +2018-02-07 Lars Wendler + + Change libseccomp logic to not be automagic only + + Introduce --without-libseccomp configure option so that users can + disable seccomp even if libseccomp is available on the system. + + The default is unchanged from before this patch. If no + --with(out)-libseccomp has been given on the command line, the macro + looks for presence of libseccomp and uses that if found. + + * m4/man-libseccomp.m4: Guard pkg-config test with a command-line + option. + +2018-02-07 Colin Watson + + * NEWS: Document changes since 2.8.0. + +2018-02-07 Colin Watson + + Reduce number of MAN_OWNER ifdefs + + * lib/security.c (init_security, running_setuid): Define + unconditionally, with stub behaviour if MAN_OWNER is undefined. + * lib/security.h (get_man_owner): Only declare prototype if MAN_OWNER is + defined. + * src/check_mandirs.c (chown_if_possible) [!MAN_OWNER]: Mark path + argument as unused. + * src/lexgrog_test.c (main): Call init_security unconditionally. + * src/man.c (main): Likewise. + * src/manconv_client.c (manconv_pre_exec): Define unconditionally. + (add_manconv): Simplify, since running_setuid is now always defined. + * src/mandb.c (main): Call init_security unconditionally. Use + get_man_owner rather than equivalent inline code. + * src/manp.c (get_def): Define unconditionally. + * src/manp.h (get_def): Drop macro alternative. + +2018-02-07 Colin Watson + + Fix manconv under seccomp when man is setuid + + We must drop privileges before loading the sandbox. + + Reported by Lars Wendler. + + * src/manconv_client.c (manconv_pre_exec): New function. + (manconv_stdin): Move setuid hack to ... + (add_manconv): ... here, now implemented using a custom pre-exec hook. + We no longer have a fall-through if dropping privileges fails, since + that's now harder to do and wasn't really necessary in the first place. + +2018-02-07 Colin Watson + + Refactor do_system_drop_privs + + Now that we have pipecmd_pre_exec, this can be simplified quite a bit. + + * lib/security.c (drop_privs): New function. + (do_system_drop_privs_child, do_system_drop_privs): Remove. + * lib/security.h (drop_privs): Add prototype. + (do_system_drop_privs): Remove prototype. + * src/man.c (make_browser): Add drop_privs pre-exec hook to browser + command. + (format_display): Call browser using pipeline_run rather than + do_system_drop_privs, since it now has a pre-exec hook to drop + privileges. + +2018-02-07 Colin Watson + + Refactor sandbox attachment to be more composable + + The sandbox interface now exposes the necessary load/free primitives, + and callers use them directly with pipecmd_pre_exec. This allows the + sandbox to be composed with other pre-exec hooks. + + * lib/sandbox.c (man_sandbox_op, sandbox_attach, + sandbox_attach_permissive): Remove. + (sandbox_load): Rename to ... + (_sandbox_load): ... this. + (sandbox_load, sandbox_load_permissive): New functions. + (sandbox_free): Expect a man_sandbox * rather than a man_sandbox_op *. + * lib/sandbox.h: Update prototypes. + + * lib/decompress.c (decompress_open, decompress_fdopen): Update sandbox + attachment calls. + * src/lexgrog.l (find_name): Likewise. + * src/man.c (add_col, make_roff_command, add_output_iconv, + make_display_command, open_cat_stream, display_catman): Likewise. + * src/manconv_client.c (add_manconv): Likewise. + * src/straycats.c (check_for_stray): Likewise. + * src/whatis.c (use_grep): Likewise. + +2018-02-07 Colin Watson + + * NEWS: Fix typo in 2.6.5 notes + +2018-02-05 Colin Watson + + Fix seccomp sandbox build on Linux/POWER + + * lib/sandbox.c [HAVE_LIBSECCOMP]: Include , since some + architectures need this for TCGETS as well as . + +2018-02-04 Colin Watson + + * Version: 2.8.0. + +2018-02-04 Colin Watson + + Allow ioctl (..., TCGETS, ...) + + * lib/sandbox.c (make_seccomp_filter): Allow ioctl (..., TCGETS, ...) in + non-permissive mode (ioctl in general is already allowed in permissive + mode). + +2018-02-04 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2018-02-03 Rafael Fontenelle + + Update Brazilian Portuguese translations + + * po/pt_BR.po, man/po4a/po/pt_BR.po: Update from Translation Project. + * man/THANKS: Update translator email address. + +2018-01-27 Joe Hansen + + Update Danish manual page translation + + * man/po4a/po/da.po: Update from Translation Project. + +2018-01-25 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2018-01-23 Yuri Kozlov + + Update Russian translations + + * po/ru.po, man/po4a/po/ru.po: Update from Translation Project. + +2018-01-23 Boyuan Yang <073plan@gmail.com> + + Update Simplified Chinese manual page translation + + * man/po4a/po/zh_CN.po: Update from Translation Project. + +2018-01-23 Sebastian Rasmussen + + Update Swedish manual page translation + + * man/po4a/po/sv.po: Update from Translation Project. + +2018-01-23 Rafael Fontenelle + + Update Brazilian Portuguese manual page translation + + * man/po4a/po/pt_BR.po: Update from Translation Project. + +2018-01-22 Colin Watson + + * Version: 2.8.0-pre2. + + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + +2018-01-21 Colin Watson + + * Version: 2.8.0-pre1. + +2018-01-16 Colin Watson + + Minor style cleanups + + * src/man.c (sh_lang_first_word, main): Minor style cleanups. + +2018-01-16 Colin Watson + + NEWS: Document previous commit. + +2018-01-16 Neven Sajko + + Add fallback pager if the compile-time default is not executable + + A problem with man-db's man is that in the case of the user giving no + configuration via conf files, argv, or environment variables; man + defaults to less as pager (PAGER); but less may not be present on the + system. Sure, other pagers may be selected in aforementioned ways, but + then the defaults are overridden, making that unsuitable for + install-time configuration. + + This patch makes man check (if that becomes relevant) if PAGER is + executable, further defaulting to cat (which is basically ubiquitous, + being in original Unix, POSIX, and GNU Coreutils) if it is not. Thus + the poor beginner Unix users without less installed will be able to + get man pages. + + * src/man.c (sh_lang_first_word): New function. + (main): Skip configured pager if it is not executable. + * man/man1/man.man1 (Controlling formatted output, ENVIRONMENT): + Document fallback to cat. + * man/replace.sin.in: Substitute %cat%. + +2018-01-16 Colin Watson + + Fix a segfault in 'man -D --help' + + Reported by Jiri Kucera. + + * src/man.c (init_html_pager): New function. + (parse_opt): Call init_html_pager rather than setting html_pager to + NULL. + (help_filter): Assert that browser is non-NULL. + (main): Call init_html_pager rather than doing the same thing directly. + * NEWS: Document this. + +2018-01-03 Colin Watson + + Update Simplified Chinese manual page translation + + * man/po4a/po/zh_CN.po: Update from Translation Project (trivial). + +2018-01-03 Colin Watson + + Upgrade config.guess/config.sub + + * build-aux/config.guess: Upgrade to 2017-11-07. + * build-aux/config.sub: Upgrade to 2017-11-23. + +2018-01-03 Colin Watson + + sandbox: Cope with missing CONFIG_SECCOMP_FILTER + + * lib/sandbox.c (gripe_seccomp_filter_unavailable): New function. + (can_load_seccomp): Return early if seccomp filtering has already been + detected as unavailable. + (sandbox_load): If seccomp_load returns an EINVAL error, assume that the + running kernel doesn't support seccomp filtering and emit a debugging + message rather than failing. + +2018-01-03 Colin Watson + + Allow sync_file_range2 syscall + + * lib/sandbox.c (make_seccomp_filter): Add sync_file_range2. + +2018-01-03 Colin Watson + + Fix seccomp sandbox on Linux/ARM + + * lib/sandbox.c (make_seccomp_filter): Add arm_fadvise64_64 and + arm_sync_file_range. + +2017-12-03 Colin Watson + + Use more conventional bullets in documentation + + * docs/INSTALL.quick, NEWS, README: Use "*" for bullet points instead of + "o". + +2017-12-03 Colin Watson + + Confine most untrusted data handling using seccomp + + Fixes Debian bug #877199. + + * configure.ac: Require libpipeline >= 1.5.0. Call MAN_LIBSECCOMP. + * docs/INSTALL.quick: Bump minimum libpipeline version to 1.5.0. List + libseccomp as recommended. + * lib/Makefile.am (libman_la_CPPFLAGS): Add $(libseccomp_CFLAGS). + (libman_la_SOURCES): Add sandbox.c and sandbox.h. + (libman_la_LDFLAGS): Add $(libseccomp_LIBS). + * lib/sandbox.c: New file. + * lib/sandbox.h: New file. + * m4/man-libseccomp.m4: New file. + + * src/man.c (set_term): Check that process ID matches original before + calling tcsetattr. + (get_term): Record original process ID to work around an arguable bug in + pipecmd_exec. + + * src/lexgrog_test.c (main), src/man.c (main), src/manconv_main.c + (main), src/mandb.c (main), src/zsoelim_main.c (main): Initialise + sandbox. + + * lib/decompress.c (decompress_open, decompress_fdopen): Attach sandbox + to decompression commands. + * src/lexgrog.l (find_name): Attach sandbox to 'col'. + * src/man.c (add_col): Attach sandbox to 'col'. + (make_roff_command): Attach sandbox to 'zsoelim' and to groff-related + programs. + (add_output_iconv): Attach sandbox to 'iconv'. + (make_display_command): Attach sandbox to 'tr'. + (open_cat_stream, display_catman): Attach sandbox to compression + commands. + * src/manconv_client.c (add_manconv): Attach sandbox to manconv_stdin. + * src/straycats.c (check_for_stray): Attach sandbox to 'col'. + * src/whatis.c (use_grep): Attach sandbox to 'grep'. + + * src/accessdb.c, src/catman.c, src/globbing_test.c, src/manpath.c: + Define stub sandbox variable. + + * docs/NEWS: Document this. + +2017-12-02 Colin Watson + + Document more installation requirements + + * docs/INSTALL.quick: List a database library as required, and zlib as + recommended. + +2017-11-22 Colin Watson + + Remove Easter egg entirely + + Six years is a reasonable shelf life for a joke, but I think its time + has passed now. + + * src/man.c (main): Remove Easter egg. + +2017-11-21 Philipp Gesang + + Add section 0 to defaults + + m4/man-arg-sections.m4: Add 0 (zero) to the default list of sections as + advertised in ``configure --help``. + + Cf. commit f3739b9bbde27c702c911ce8a511a499705a25f7 + +2017-11-21 Colin Watson + + Stop Easter egg interfering with non-error cases + + * src/man.c (main): Restrict Easter egg to the case where 'man' is run + without any options or arguments at all (which isn't useful for anything + else), not 'man -w' (which is). + + https://unix.stackexchange.com/questions/405783/why-does-man-print-gimme-gimme-gimme-at-0030 + +2017-11-21 Colin Watson + + Fix formatting error in Simplified Chinese translation + + * man/po4a/po/zh_CN.po: Correct formatting of exit(3tcl) references. + +2017-11-16 Boyuan Yang <073plan@gmail.com> + + Update Simplified Chinese translations + + * po/zh_CN.po, man/po4a/po/zh_CN.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2017-11-13 Colin Watson + + Fix docs for minimum libpipeline requirement + + * docs/INSTALL.quick: Bump minimum libpipeline version to 1.4.0. + +2017-07-17 Colin Watson + + Fix formatting error in Turkish translation + + * man/po4a/po/tr.po: Translate "\\e-" as itself rather than as "\\(e-". + +2017-07-16 Colin Watson + + Improve --with-systemdtmpfilesdir default + + * m4/man-arg-systemdtmpfilesdir.m4: Get tmpfiles directory location from + pkg-config. + * configure.ac: Call PKG_PROG_PKG_CONFIG early to avoid problems with + conditional use of PKG_* macros. + +2017-07-11 Colin Watson + + Add Turkish manual page translation + + * man/po4a/po/tr.po: New from Translation Project (thanks, Volkan Gezer + and Mesutcan Kurt). + * configure.ac (AC_CONFIG_FILES): Add man/tr/Makefile. + * man/LINGUAS.po4a: Add tr. + * man/Makefile.am (DIST_SUBDIRS): Add tr. + * man/tr/Makefile.am, man/tr/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/tr.po. + * man/po4a/po4a.cfg (po4a_langs): Add tr. + * man/THANKS: Add translator credit. + * .gitignore: Add man/tr/man1, man/tr/man5, and man/tr/man8. + +2017-07-10 Colin Watson + + * NEWS: Document changes since 2.7.6.1. + +2017-07-10 Colin Watson + + gnulib: Import memmem module + + Needed to make the previous commit portable. + +2017-07-10 Colin Watson + + Fix preprocessor handling after insertions + + If man has added prefixes to a page to handle such things as disabling + hyphenation, then it also needs to take account of that when looking for + a preprocessor line at the start of the page. + + Reported by Bjarni Ingi Gislason. Fixes Debian bug #867857. + + * src/man.c (get_preprocessors_from_file): Skip over as many blocks + ending with an .lf macro as there are prefixes. + (get_preprocessors): Pass the number of prefixes through to + get_preprocessors_from_file. + (make_roff_command): Take pp_string as an argument rather than + dbfilters; callers should now call get_preprocessors themselves. + (display): Rename seq_ncmds to prefixes. Call get_preprocessors before + calling make_roff_command. + +2017-07-10 Colin Watson + + Upgrade to Automake 1.15.1. + +2017-07-10 Colin Watson + + Handle \(en escapes in NAME section + + * src/lexgrog.l (MAN_NAME): Treat "\(en" as another synonym for "\-", + and thus as a separator. + +2017-04-08 Volkan Gezer + + Update Turkish translation + + * po/tr.po: Update from Translation Project. + +2017-04-04 Volkan Gezer + + Add Turkish translation + + * po/tr.po: New from Translation Project. + * po/LINGUAS: Add tr. + * man/THANKS: Add translator credit. + +2017-01-29 Felipe Castro + + Update Esperanto translation + + * po/eo.po: Update from Translation Project. + +2017-01-07 Sebastian Rasmussen + + Update Swedish translation + + * po/sv.po: Update from Translation Project. + +2017-01-04 Colin Watson + + Add Brazilian Portuguese manual page translation + + * man/po4a/po/pt_BR.po: New from Translation Project (thanks, Rafael + Fontenelle). + * configure.ac (AC_CONFIG_FILES): Add man/pt_BR/Makefile. + * man/LINGUAS.po4a: Add pt_BR. + * man/Makefile.am (DIST_SUBDIRS): Add pt_BR. + * man/pt_BR/Makefile.am, man/pt_BR/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/pt_BR.po. + * man/po4a/po4a.cfg (po4a_langs): Add pt_BR. + * man/THANKS: Add translator credit. + * .gitignore: Add man/pt_BR/man1, man/pt_BR/man5, and man/pt_BR/man8. + +2016-12-28 Sebastian Rasmussen + + Update Swedish manual page translation + + * man/po4a/po/sv.po: Update from Translation Project. + +2016-12-23 David Prévot + + Update French manual page translation + + * man/po4a/po/fr.po: Update from Translation Project. + +2016-12-23 David Prévot + + Update French translation + + * po/fr.po: Update from Translation Project. + +2016-12-22 Robert Luberda + + Update Polish manual page translation + + * man/po4a/po/pl.po: Update from Translation Project. + +2016-12-22 Robert Luberda + + Update Polish translation + + * po/pl.po: Update from Translation Project. + +2016-12-19 Colin Watson + + Add Serbian manual page translation + + * man/po4a/po/sr.po: New from Translation Project (thanks, Мирослав + Николић). + * configure.ac (AC_CONFIG_FILES): Add man/sr/Makefile. + * man/LINGUAS.po4a: Add sr. + * man/Makefile.am (DIST_SUBDIRS): Add sr. + * man/sr/Makefile.am, man/sr/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/sr.po. + * man/po4a/po4a.cfg (po4a_langs): Add sr. + * man/THANKS: Add translator credit. + * .gitignore: Add man/sr/man1, man/sr/man5, and man/sr/man8. + +2016-12-19 Мирослав Николић + + Update Serbian translation + + * po/sr.po: Update from Translation Project. + +2016-12-13 Joe Hansen + + Update Danish manual page translation + + * man/po4a/po/da.po: Update from Translation Project. + +2016-12-13 Colin Watson + + Generate tmpfiles snippet based on cache owner + + man-db.conf should honour --enable-cache-owner rather than hardcoding + "man". + + * init/systemd/man-db.conf: Rename to ... + * init/systemd/man-db.conf.in: ... this. Replace "man" with + "@man_owner@". + * init/systemd/Makefile.am: Generate man-db.conf at build time. + * .gitignore: Add init/systemd/man-db.conf. + +2016-12-13 Colin Watson + + Fix locale macro loading for Chinese + + The intent was always that we should load the macro file corresponding + to just the language part of the page's locale, and the debug output + agreed with this, but the actual implementation did not. Fix this. + + See: https://savannah.gnu.org/bugs/?44941 + + * src/man.c (display): Pass bits.language rather than page_lang to + locale_macros. Adjust memory allocation. + +2016-12-13 Colin Watson + + Rename SECURE_MAN_UID to MAN_OWNER + + The latter had always been defined to the former anyway, and now that + the cache owner can be changed without actually installing setuid the + latter is more descriptive. + + * m4/man-arg-cache-owner.m4: Define MAN_OWNER rather than + SECURE_MAN_UID. Update all users. + * include/manconfig.h.in (MAN_OWNER): Remove definition. + +2016-12-13 Colin Watson + + Mark some parts of .TH sections as untranslatable + + * man/po4a/Locale/Po4a/Manext.pm (translate): Don't translate anything + matching /^%.*%$/ or /^[A-Z]+$/ in .TH sections. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + +2016-12-13 Tianze Wang + + Update Simplified Chinese manual page translation + + * man/po4a/po/zh_CN.po: Update from Translation Project. + * man/THANKS: Update. + +2016-12-13 Trần Ngọc Quân + + Update Vietnamese translation + + * po/vi.po: Update from Translation Project. + +2016-12-13 Colin Watson + + Correct syntax of Danish manual page translation + + * man/po4a/po/da.po: Fix a couple of font specifications. + +2016-12-13 Rafael Fontenelle + + Update Brazilian Portuguese translation + + * po/pt_BR.po: Update from Translation Project. + * man/THANKS: Update. + +2016-12-13 Joe Hansen + + Update Danish manual page translation + + * man/po4a/po/da.po: Update from Translation Project. + +2016-12-12 Joe Hansen + + Update Danish translation + + * po/da.po: Update from Translation Project. + +2016-12-12 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + +2016-12-12 Mario Blättermann + + Update German translation + + * po/de.po: Update from Translation Project. + * man/THANKS: Update. + +2016-12-12 Colin Watson + + * Version: 2.7.6.1. + +2016-12-12 Colin Watson + + Correct installation of Swedish manual pages + + * man/sv/Makefile.am (LINGUA): Set to sv, not nl. + * NEWS: Document this. + +2016-12-12 Colin Watson + + * NEWS: Document previous change. + +2016-12-12 Colin Watson + + Don't chmod CACHEDIR.TAG if it doesn't exist + + The containing directory might reasonably not exist. Fixes Debian + bug #847810. + + * src/mandb.c (mandb): Only chown/chmod CACHEDIR.TAG if it exists. + +2016-12-11 Colin Watson + + * Version: 2.7.6. + +2016-12-11 Colin Watson + + Fix systemd tmpfiles group/perms of /var/cache/man + + * init/systemd/man-db.conf: Change mode to 0755 and group to man. + +2016-12-11 Colin Watson + + Fix Polish mandb(8) "cannot adjust line" warnings + + * man/man8/mandb.man8 (DATABASE CACHES): Set a width of 20em for the + "Type" column. + +2016-12-11 Colin Watson + + Drop documentation of gdbm < 1.6 + + gdbm 1.6 was released in 1993; it's no longer necessary to document + mandb's behaviour with older versions. + + * man/man8/mandb.man8 (DATABASE CACHES): Remove "GNU gdbm v < 1.6" row. + Simplify "GNU gdbm v >= 1.6" to "GNU gdbm". Update all translations. + +2016-12-11 Colin Watson + + Fix table rendering with po4a 0.47 + + * man/po4a/Locale/Po4a/Manext.pm (initialize): Drop unused assignment. + (shiftline, pushline): Pass through to superclass if po4a version >= + 0.47. + (translate): With po4a >= 0.47, don't process text blocks since po4a now + does that, but handle @-separation of columns and remove trailing + newlines from translatable strings. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update (line + numbers only). + * NEWS: Document this. + +2016-12-11 Colin Watson + + Fix distcheck following cache-owner/setuid changes + + We previously ignored chown failures on "make install", but that's not + really correct. Instead, configure with --disable-setuid during + distcheck. + + * Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Add --disable-setuid. + +2016-12-11 Colin Watson + + Update translation files + + * po/man-db.pot, po/*.po: Update. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + +2016-12-11 Colin Watson + + * NEWS: Document changes since 2.7.5. + +2016-12-11 Mihail Konev + + src/tests: Use /tmp for temporary directories + + Reduces disk reads/writes made by 'make check -C src'. + + Fall back to ./tmp-* if 'mktemp -d' fails. + +2016-12-10 Colin Watson + + Eliminate dangerous setgid-root directories + + man-db has created its cache directories as setgid root for nearly 20 + years. This seems to have originated in https://bugs.debian.org/26002. + However, this has some dangerous consequences, such as: + + http://www.halfdog.net/Security/2015/SetgidDirectoryPrivilegeEscalation/ + + It seems best to arrange for cache files and directories to be man:man + rather than man:root. To do this reliably, as well as adjusting various + chown and chmod calls, we make man and mandb be setgid man as well as + setuid man (except in the --disable-setuid case). This is a much + simpler and safer solution to the original problem, and doesn't + introduce any interesting new privilege since the man group's only real + purpose is to be the man user's primary group and nothing in cache + directories is group-writeable. + + * configure.ac (AC_CHECK_FUNCS): Add lchown. + * lib/security.c (init_security): Record initial real and effective + group IDs as well as user IDs. + (drop_effective_privs, regain_effective_privs): Update gid. + * lib/xchown.c (xlchown) [HAVE_LCHOWN]: New function. + * lib/xchown.c (xlchown) [HAVE_LCHOWN]: Add prototype. + * m4/man-arg-setuid.m4: Set man_mode to 6755 rather than 4755 in the + --enable-setuid case. + * src/Makefile.am (install-exec-hook): Check for man_mode being 6755 + rather than 4755. Set the group of man and mandb as well as their + owner. + * src/check_mandirs.c (chown_if_possible): New function. This is + somewhat more careful than previous implementations, changes the group + as well as the user if possible, and prefers lchown if it is available. + (mkcatdirs): Drop S_ISGID from cat directories. Use chown_if_possible. + (fix_permissions, fix_permissions_tree): New functions to remove setgid + bit from existing cat directories. + (testmandirs): Call fix_permissions_tree. + * src/check_mandirs.h (chown_if_possible): Add prototype. + * src/man.c (commit_tmp_cat): Set cat file group as well as owner. + * src/mandb.c (check_chown): Remove. + (do_chown): Stop taking a uid parameter. Use chown_if_possible. + (mandb): Use chown_if_possible for CACHEDIR.TAG. Set ownership and + permissions of CACHEDIR.TAG even if it already exists. + (process_manpath): Set ownership of database files even if they have not + been changed. + +2016-12-10 Colin Watson + + Make --disable-cache-owner imply --disable-setuid + + * m4/man-arg-setuid.m4: Set man_mode="755" if --disable-cache-owner was + given and neither --enable-setuid nor --disable-setuid was given. + +2016-12-10 Colin Watson + + Update manual for cache-owner/setuid changes + + * manual/intro.me (Arguments to configure): Add --enable-cache-owner and + --disable-cache-owner. Remove --enable-setuid[=ARG]. Adjust + description of --disable-setuid. + * manual/misc.me (Modes of operation): Add --disable-cache-owner to the + non-setuid modes. Mention --enable-setuid rather than + --enable-setuid=USER. + * README (Non-generic arguments to configure): Update. + +2016-12-10 Colin Watson + + Allocate dbpaths on the heap rather than the stack + + process_manpath's stack may have gone out of scope by the time cleanup + functions are called. + + * src/mandb.c (cleanup): Free dbpaths. + (process_manpath): Allocate dbpaths on the heap. + +2016-12-10 Colin Watson + + Handle cleanup stack more safely + + If push_cleanup was called unexpectedly between a + push_cleanup/pop_cleanup pair, then the pop_cleanup would remove the + wrong cleanup function and chaos could ensue. Avoid this by being more + precise about which cleanup function should be popped. + + * lib/cleanup.c (pop_cleanup): Take "fun" and "arg" arguments. Pop the + topmost matching function from the stack, rather than just the topmost + function. Update all callers and prototypes. + +2016-12-09 Colin Watson + + Upgrade config.guess/config.sub + + * build-aux/config.guess: Upgrade to 2016-10-02. + * build-aux/config.sub: Upgrade to 2016-11-04. + +2016-12-09 Colin Watson + + Separate cache owner from --enable-setuid option + + It's useful to have a notion of the cache owner even when man is not + installed setuid. --enable-setuid no longer takes an argument, and the + owner is now set by the --enable-cache-owner option instead. + + * m4/man-arg-cache-owner.m4: New file. + * m4/man-arg-setuid.m4: Stop accepting an argument. Only set man_mode, + not man_owner. + * configure.ac: Call MAN_ARG_CACHE_OWNER. + * src/Makefile.am (install-exec-hook): Only chown man and mandb if + man_mode is 4755 (as well as the existing test for man_owner being + non-empty). + +2016-11-21 Colin Watson + + Restore ylwrap to distribution + + * Makefile.in (am__DIST_COMMON): Regenerate to add build-aux/ylwrap back + again, since it mysteriously went missing in the last regeneration. + +2016-11-21 Colin Watson + + Update translation files + + * po/man-db.pot, po/*.po: Update. + +2016-11-21 Colin Watson + + Upgrade to Libtool 2.4.6-2 (from Debian) + +2016-11-21 Colin Watson + + Upgrade config.guess/config.sub + + * build-aux/config.guess: Upgrade to 2016-04-02. + * build-aux/config.sub: Upgrade to 2016-03-30. + +2016-11-20 Mihail Konev + + src/tests: Fix testsuite + + * src/tests/man-9: Set MANPATH. + +2016-11-20 Mihail Konev + + man(1): Fix gcc warnings + + * lib/xchown.c: New file. + * lib/xchown.h: New file. + * lib/Makefile.am (libman_la_SOURCES): Add xchown.c and xchown.h. + * po/POTFILES.in: Add lib/xchown.c. + * src/check_mandirs.c (mkcatdirs): Call xchown instead of chown. + * src/man.c (format_display): Ignore errors from chdir ("/"). + +2016-11-20 Colin Watson + + Make split_page_name allocate its own memory + + * src/man.c (split_page_name): Allocate *ret_name and *ret_section here. + Simplify using xstrdup and xstrndup. + (man): Remove allocation of page_name and page_section. + +2016-11-20 Mihail Konev + + man(1): add .N names + + `man chmod.2` is now the same as `man 2 chmod` + + * src/man.c (split_page_name): New function. + (locate_page_in_manpath): New function. + (man): Factor out common locate_page loop into locate_page_in_manpath. + Add name/section splitting logic. + * src/tests/man-11: New file. + * src/tests/Makefile.am (ALL_TESTS): Add man-11. + * man/man1/man.man1 (SYNOPSIS): Document .
form. + (EXAMPLES): Likewise. + +2016-10-04 Colin Watson + + Fix formatting error in Swedish translation + + * man/po4a/po/sv.po: Translate "\\(rq" as itself rather than as "\\(". + +2016-10-04 Colin Watson + + Rename some anomalous x* functions + + The usual (though not universal) pattern in gnulib is for xfoo to mean + "foo or exit". Rename x* to check_* so that they don't conflict with + this. + + * src/mandb.c (xremove): Rename to ... + (check_remove): ... this. + (xrename): Rename to ... + (check_rename): ... this. + (xchmod): Rename to ... + (check_chmod): ... this. + (xchown): Rename to ... + (check_chown): ... this. + +2016-05-16 Colin Watson + + man(1): Fix incorrect font + + * man/man1/man.man1 (SYNOPSIS): Make "--regex" bold. Thanks to Paul + Townsend. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update; unfuzzy all + translations. + +2016-05-16 Colin Watson + + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + +2016-02-04 Colin Watson + + Note caveat with "man -K" + + * man/man1/man.man1 (Main modes of operation): Note that -K searches + page source. Fixes Debian bug #813665. + +2016-01-02 Sebastian Rasmussen + + * po/sv.po: Add missing translator credit comment. + +2016-01-02 Colin Watson + + Fix warnings with Perl 5.22 + + * man/po4a/Locale/Po4a/Manext.pm (shiftline, translate): Escape braces + in regular expressions. + +2016-01-02 Colin Watson + + Add Swedish manual page translation + + * man/po4a/po/sv.po: New from Translation Project (thanks, Sebastian + Rasmussen). + * configure.ac (AC_CONFIG_FILES): Add man/sv/Makefile. + * man/LINGUAS.po4a: Add sv. + * man/Makefile.am (DIST_SUBDIRS): Add sv. + * man/sv/Makefile.am, man/sv/translator.add: New files. + * man/po4a/Makefile.am (POFILES): Add po/sv.po. + * man/po4a/po4a.cfg (po4a_langs): Add sv. + * man/THANKS: Add translator credit. + * .gitignore: Add man/sv/man1, man/sv/man5, and man/sv/man8. + +2015-12-31 Colin Watson + + Upgrade to pkg-config 0.29. + +2015-12-26 Sebastian Rasmussen + + Update Swedish translation + + * po/sv.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2015-12-07 Colin Watson + + Simplify database path handling in mandb + + * src/mandb.c (struct dbpaths): Unconstify xtmpfile. + (finish_up): Free dbpaths->xtmpfile. + (cleanup): Update header comment. Remove unnecessary checks before + frees. Free all database paths for all database types, not just + GDBM. Free dbpaths->xtmpfile. + (mandb): Copy content of database to dbpaths->xtmpfile rather than + just copying the pointer. + +2015-12-07 Colin Watson + + Move some database paths out of global variables + + * src/mandb.c (struct dbpaths): New structure. + (finish_up, do_chown, cleanup_sigsafe, cleanup, mandb): Take dbpaths + argument. + (process_manpath): Allocate dbpaths on the stack, zero it, and pass + it to functions that need it. + +2015-12-07 Colin Watson + + Remove lots of unnecessary inline qualifiers + + It's 2015. The compiler almost certainly knows better than we do. + + * lib/security.c (gripe_set_euid): Remove inline qualifier. + * libdb/db_btree.c (btree_findkey): Likewise. + * libdb/mydbm.h (gdbm_exists): Likewise. + * src/catman.c (catman): Remove obsolete comment. + (add_arg, check_access): Remove inline qualifier. + * src/check_mandirs.c (add_dir_entries): Likewise. + * src/man.c (gripe_system, gripe_no_man, manopt_to_env, escape_less, + is_section, do_prompt, gripe_converting_name): Likewise. + * src/mandb.c (xremove, xrename, xchmod, finish_up, xchown, + do_chown, update_db_wrapper): Likewise. + * src/manp.c (gripe_reading_mp_config, gripe_stat_file, + gripe_not_directory, has_mandir, fsstnd): Likewise. + * src/whatis.c (do_whatis_section): Likewise. + +2015-11-06 Colin Watson + + Belatedly update NEWS date. + + * Version: 2.7.5. + + * NEWS: Document changes since 2.7.4. + +2015-11-06 Colin Watson + + Build text manual with LC_ALL=C + + nroff's UTF-8 output is a bit wonky in this case, but ASCII will do + fine. + + * manual/Makefile.am (.pp.cat): Set LC_ALL=C. + +2015-11-05 Colin Watson + + Disable roff input insertion with --recode + + Reported by Bjarni Ingi Gislason. Fixes Debian bug #751795. + + * src/man.c (display): Don't insert roff input for --no-hyphenation, + --no-justification, or locale macros when the --recode option is used. + +2015-11-05 Colin Watson + + Adjust line number when inserting extra roff input + + Reported by Bjarni Ingi Gislason. Fixes Debian bug #789219. + + * src/man.c (heirloom_line_length, disable_hyphenation, + disable_justification, locale_macros): Emit ".lf 1" after inserted roff + input. + * src/zsoelim.l: Accept .lf without a file name argument. + +2015-10-19 Colin Watson + + Make a mandb error message clearer + + * src/mandb.c (xcopy): Say which file name we failed to fopen. + +2015-10-08 Colin Watson + + Fix Plural-Forms header in Catalan translation + + * po/ca.po (Plural-Forms): Add missing semicolon. + +2015-10-08 Colin Watson + + * Version: 2.7.4. + +2015-10-08 Colin Watson + + man: Honour MANWIDTH in conjunction with -Z + + * src/man.c (get_roff_line_length): Also consider line_length if + ditroff is set. + (make_roff_command): Try add_roff_line_length regardless of troff. + The line length is passed to the macro package, not to the output + device, although get_roff_line_length will still sometimes not use + it (e.g. if using the "ps" device). Fixes Debian bug #801241. + * NEWS: Document this. + +2015-10-08 Colin Watson + + man: Exit 3 if formatter exits non-zero + + * src/man.c (format_display): Keep track of exit statuses from both + format_cmd and disp_cmd, and exit CHILD_FAIL if either is non-zero + and non-SIGPIPE. Fixes Debian bug #801261. + * NEWS: Document this. + +2015-09-22 Colin Watson + + Fix replace.sed prerequisite syntax + + Suffix rules may not have prerequisites. Thanks to Nikola Forró; fixes + Fedora bug #1263930. + + * man/Rules.man: Declare dependency of $(MANS) on replace.sed + separately rather than trying to do so in suffix rules. + * NEWS: Document this. + +2015-09-22 Colin Watson + + Fix crash in manpath deduplication + + * src/manp.c (create_pathlist): Handle NULL return from + canonicalize_file_name. + * NEWS: Document this. + +2015-09-22 Colin Watson + + Upgrade config.guess/config.sub + + * build-aux/config.guess, build-aux/config.sub: Upgrade to + 2015-08-20. + +2015-09-21 Nikola Forró + + Fix typos in italian manpath man page + +2015-09-16 zwpwjwtz + + Update Simplified Chinese manual page translation + + * man/po4a/po/zh_CN.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2015-09-09 Colin Watson + + * Version: 2.7.3. + +2015-09-09 Colin Watson + + Pacify gcc -Wlogical-not-parentheses + + * src/man.c (find_cat_file): Add extra parentheses around + logical-not on the LHS of a comparison. + * lib/util.c (is_changed): Likewise in header comment. + +2015-09-09 OGAWA Hirofumi + + Restore the ability to use 'man -a' noninteractively + + Fixes Debian bug #798094. + + * src/man.c (do_prompt): Return 0 immediately (i.e. view) if neither + stdin nor stdout is a tty. + * NEWS: Document this. + +2015-09-09 Mike Frysinger + + Fix crash when current directory is unreadable + + Fixes Savannah bug #45861. + + * src/man.c (make_display_command): Check have_cwd before trying to + use cwd. + * NEWS: Document this. + +2015-09-09 Colin Watson + + Document squeeze-blank-lines fix + + * NEWS: Document Rafael's squeeze-blank-lines fix. + +2015-09-09 Colin Watson + + Fix use-after-free in ult_src + + Reported by Hanno Boeck. Fixes Savannah bug #45854. + + * src/ult_src.c (ult_src): Take a copy of base when recursing rather + than passing it directly as the new name argument, since it may be + freed by the recursive call. + * NEWS: Document this. + +2015-09-09 Colin Watson + + Remove unnecessary check before free + + * src/ult_src.c (ult_src): Don't check whether base is non-NULL + before freeing it. + +2015-08-30 Rafael Kitover + + Squeeze blank lines internally instead of pager -s + + Add a pipecmd in make_display_command to combine multiple blank lines in + the output into one, which is what e.g. less -s does. + + Stop automatically appending -s to pager command in configure. + + Fixes Debian bug #796584. + + * configure.ac: Stop automatically appending -s to pager command. + * src/man.c (squeeze_blank_lines): New function. + (make_display_command): Add squeeze_blank_lines to display pipeline. + +2015-08-29 Colin Watson + + Make sure CACHEDIR.TAG has correct ownership + + * src/mandb.c (mandb): Change CACHEDIR.TAG's owner to + man_owner->pw_uid when running as root in global manpaths. + (process_manpath): Pass global_manpath to mandb. + +2015-08-29 Colin Watson + + Rewrite CACHEDIR.TAG and databases if they cannot be read + + Fixes Debian bug #797019. + + * src/mandb.c (mandb): Rewrite CACHEDIR.TAG and databases if they + cannot be read (probably due to incorrect ownership). + * NEWS: Document this. + +2015-08-22 Colin Watson + + Try to get terminal width from /dev/tty + + If man is running within something like lesspipe, then there may be + a current tty that neither stdin nor stdout points to. Try to get + hold of it using /dev/tty. Fixes Fedora bug #1255930. + + * lib/linelength.c (get_line_length): Try /dev/tty before either + stdout or stdin. + * NEWS: Document this. + +2015-08-16 Colin Watson + + * Version: 2.7.2. + +2015-08-16 Jordi Mallach + + * po/ca.po: Update from Translation Project. + +2015-08-16 Colin Watson + + Upgrade to Automake 1:1.15-3 (from Debian). + + * NEWS: Document a couple more changes since 2.7.1. + +2015-08-02 Colin Watson + + Upgrade to Automake 1.15. + +2015-08-02 Colin Watson + + Fix inaccurate description of "man -f" + + It's equivalent to "whatis", not "whatis -r". Fixes Fedora + bug #1249377. + + * man/man1/man.man1 (EXAMPLES): "man -k" and "man -f" are equivalent to + "apropos" and "whatis" respectively, not "apropos -r" and "whatis -r". + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update; unfuzzy all + translations. + +2015-08-02 Lauri Nurmi + + * po/fi.po: Update from Translation Project. + +2015-04-08 Colin Watson + + Allow using GDBM's NDBM compatibility layer + + This isn't very useful in practice since anyone using this could just + use GDBM directly instead, but it's helpful for testing. + + * configure.ac: Check for gdbm-ndbm.h and libgdbm_compat. + +2015-04-08 Colin Watson + + Clean up freeing of datum structures + + * libdb/mydbm.h (MYDBM_FREE): Remove. + (MYDBM_FREE_DPTR): New macro. This zeros the data pointer to avoid + double-free problems. + * libdb/db_delete.c (dbdelete): Use MYDBM_FREE_DPTR. + * libdb/db_gdbm.c (man_gdbm_open_wrapper, sortkey_hashtable_free): + Likewise. + * libdb/db_lookup.c (dblookup, dblookup_pattern): Likewise. + * libdb/db_store.c (dbstore): Likewise. + * libdb/db_ver.c (dbver_rd, dbver_wr): Likewise. + * src/accessdb.c (main): Likewise. + * src/catman.c (parse_for_sec): Likewise. + * src/check_mandirs.c (sanity_check_db, purge_pointers, purge_missing): + Likewise. + * src/whatis.c (do_apropos): Likewise. + +2015-04-08 Colin Watson + + Stop storing the database handle in a global variable + + Fixes Ubuntu bug #1304261. + + * libdb/db_delete.c (dbdelete): Take a dbf parameter. Update all + callers and prototypes. + * libdb/db_lookup.c (dblookup, dblookup_all, dblookup_exact, + dblookup_pattern): Likewise. + * libdb/db_store.c (replace_if_necessary, dbstore): Likewise. + * src/check_mandirs.c (test_manfile, add_dir_entries, sanity_check_db, + purge_pointers, purge_normal, purge_whatis): Likewise. + * src/descriptions_store.c (store_descriptions): Likewise. + * src/straycats.c (check_for_stray, open_catdir): Likewise. + * src/whatis.c (resolve_pointers, display, do_whatis_section, do_whatis, + do_apropos): Likewise. + + * src/accessdb.c (main): Declare dbf here rather than at file scope. + * src/catman.c (parse_for_sec): Likewise. + * src/check_mandirs.c (testmandirs, update_db_time, update_db, + purge_missing): Likewise. + * src/man.c (dbdelete_wrapper, try_db): Likewise. + * src/mandb.c (update_one_file): Likewise. + * src/straycats.c (straycats): Likewise. + * src/whatis.c (search): Likewise. + + * libdb/mydbm.h (dbf): Remove. + * src/catman.c (dbf): Rename to ... + (dbf_close_post_fork): ... this. + (rdopen_db): Merge into ... + (parse_for_sec): ... here. + +2015-03-05 Colin Watson + + man: Avoid dubious use of freopen to reopen base streams + + freopen doesn't actually work properly when base streams have been + closed (at least with glibc), and it seems better to simply refuse to + operate in such a non-conforming environment. + + * src/man.c (check_standard_fds): New function. + (main): Call it rather than using freopen. + +2014-11-16 Colin Watson + + Allow building from git without gnulib-tool + + Since we don't want to keep Gnulib translations in revision control, + we need gnulib-tool on $PATH when generating the build system in + order to fetch them, but it's unnecessarily awkward to require + everyone to have this just in order to build man-db from git. Allow + building without this, although it is still required for "make + dist". + + * configure.ac: No longer issue an error if gnulib/po/Makefile.in.in + is missing. Instead, set the Automake conditional HAVE_GNULIB_PO to + true if and only if gnulib/po/POTFILES.in exists, and only create + gnulib/po/Makefile.in if gnulib/po/Makefile.in.in exists. + * Makefile.am (SUBDIRS): Only include gnulib/po if HAVE_GNULIB_PO is + true. + +2014-11-14 Colin Watson + + apropos/whatis: Don't truncate names if long output was requested + + * src/whatis.c (display): Leave page_name intact if long_output is + true. Reported by Calle Erlandsson. + +2014-11-11 David Prévot + + * man/po4a/po/fr.po: Update from Translation Project. + +2014-11-08 Colin Watson + + Pass -l through to apropos/whatis + + Fixes Fedora bug #1161747. + + * src/man.c (do_extern): Pass the -l option through. + +2014-11-07 Colin Watson + + * Version: 2.7.1. + +2014-10-27 Colin Watson + + Send 'man -a' prompts to /dev/tty + + Fixes Debian bug #766113. + + * src/man.c (locale_macros): Write prompts to and read replies from + /dev/tty, rather than stderr and stdin respectively. + * NEWS: Document this. + +2014-10-27 Colin Watson + + Make man run correctly from a deleted directory + + Fixes Debian bug #764384. + + * gnulib: Import save-cwd module. + * src/man.c (make_display_command): Use pipecmd_fchdir rather than + pipecmd_chdir if the working directory was saved using a file + descriptor. + (format_display, main): Save current working directory using + save_cwd rather than xgetcwd. + (format_display, local_man_loop, main): Restore previous working + directory using restore_cwd rather than chdir. + * src/tests/man-10: New file. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Insert the parent + directory into $PATH using an absolute path rather than a relative + one. Export abs_top_builddir rather than top_builddir. + (ALL_TESTS): Add man-10. + * src/tests/testlib.sh (init): Set abstmpdir. Adjust tests to use + this where applicable. + (run): Call libtool using an absolute path. + (skip): Remove abstmpdir. + (finish): Remove abstmpdir rather than tmpdir. + * configure.ac: Require libpipeline >= 1.4.0. + * NEWS: Document this. + +2014-10-22 Colin Watson + + NEWS: Document recent Solaris portability changes + +2014-10-22 Colin Watson + + Fix linking of fspause on Solaris + + * src/tests/fspause.c (main): Set program_name. Patch by Peter Bray. + +2014-10-22 Colin Watson + + autogen.sh: Avoid "export VARIABLE=value" syntax + + Older Solaris shells do not support this. Patch by Peter Bray. + +2014-10-22 Colin Watson + + gnulib: Import strcasestr module. + + Suggested by Peter Bray. + +2014-10-05 Joe Hansen + + * man/po4a/po/da.po: Update from Translation Project. + +2014-09-27 Colin Watson + + * Version: 2.7.0.2. + +2014-09-27 Colin Watson + + Work around lack of UTIME_* on GNU/Hurd + + * gnulib/fdutimens-hurd.patch: New file. + * autogen.sh: Apply gnulib/fdutimens-hurd.patch. + * NEWS: Document this. + +2014-09-27 Colin Watson + + Avoid using or double-closing closed database handles + + Thanks to Andreas Radke and Bruce Dubbs for reporting, and to + Andreas Radke for testing. + + * src/check_mandirs.c (testmandirs): Close dbf if necessary before + (re-)opening it. Zero out dbf after closing it. + (update_db_time, purge_missing): Zero out dbf after closing it. + * src/man.c (dbdelete_wrapper, try_db): Likewise. + * src/mandb.c (update_one_file): Likewise. + * src/straycats.c (straycats): Likewise. + * src/whatis.c (search): Likewise. + * NEWS: Document this. + +2014-09-24 Colin Watson + + * Version: 2.7.0.1. + + * Makefile.am (EXTRA_DIST): Add gnulib/m4/sockpfaf.m4. + +2014-09-23 Colin Watson + + Fix tests when build fs does not support high-precision timestamps + + * gnulib: Import nanosleep module. + * configure.ac: Remove STAT_HAS_NSEC substitution. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Stop exporting + STAT_HAS_NSEC. + (AM_CPPFLAGS, AM_CFLAGS, check_PROGRAMS, fspause_SOURCES, + fspause_LDADD): Add. + * src/tests/fspause.c: New file. + * src/tests/mandb-2, src/tests/mandb-3, src/tests/mandb-4, + src/tests/mandb-5: Call ./fspause rather than next_second. + * src/tests/testlib.sh (next_second): Remove. + * .gitignore: Add src/tests/.deps and src/tests/fspause. + * NEWS: Document this. + +2014-09-22 Colin Watson + + * Version: 2.7.0. + +2014-09-19 Yuri Kozlov + + * man/po4a/po/ru.po: Update from Translation Project. + +2014-09-18 Mario Blättermann + + * man/po4a/po/de.po: Update from Translation Project. + +2014-09-18 Robert Luberda + + * man/po4a/po/pl.po: Update from Translation Project. + +2014-09-18 Colin Watson + + Move zsoelim to pkglibexecdir + + This avoids clashes with other packages; for example, Slackware's groff + package installs zsoelim as a symlink to soelim. + + * src/Makefile.am (bin_PROGRAMS): Move zsoelim to ... + (pkglibexec_PROGRAMS): ... here. + (AM_CPPFLAGS): Adjust ZSOELIM definition to match. + * NEWS: Document this. + +2014-09-18 Colin Watson + + Rename SOELIM definition to ZSOELIM for clarity + + * src/Makefile.am (AM_CPPFLAGS): Define ZSOELIM rather than SOELIM. + * src/man.c (make_roff_command): Use ZSOELIM rather than SOELIM. + +2014-09-17 Colin Watson + + Make sure that generated shared libraries have no undefined symbols + + Based on a change found in + https://github.com/Alexpux/MSYS2-packages/tree/master/man-db. + + * lib/Makefile.am (libman_la_LDFLAGS): Add -no-undefined. + * libdb/Makefile.am (libmandb_la_LDFLAGS): Add -no-undefined. + +2014-09-17 Colin Watson + + Correct a couple of comments in m4/man-arg-*.m4 + + * m4/man-arg-automatic-update.m4: Correct header comment. + * m4/man-arg-systemdtmpfilesdir.m4: Likewise. + +2014-09-17 Colin Watson + + Fix "cannot adjust line" warning when formatting db.me + + * manual/db.me (Contents of an index database): Insert several + zero-width break points in descriptions of entry formats. + +2014-09-17 Colin Watson + + Show a better error message if no browser is configured + + Fixes Savannah bug #37814. + + * src/man.c (format_display): Adjust error message if html_pager is + NULL or the empty string. + * NEWS: Document this. + +2014-09-17 Colin Watson + + Don't store canonicalised versions of manpath elements + + We still compare canonicalised versions, but don't store them. + Storing them results in looking up the wrong catpath in the case + where one of the configured MANDB_MAP entries is a symlink. + + Broken by commit 01e5a4febfc7b6cd53991455315ae7744c8f31dd; fixes + Fedora bug #1043401. + + * src/manp.c (create_pathlist): Compare canonicalised versions of + manpath elements, but don't store them. + * NEWS: Document this. + +2014-09-16 Colin Watson + + Don't use pointed-to name as title for database-located pages + + For a pointer record, the pointed-from name is a legitimate alias + for the located page, and is likely to be closer to the name that + the user requested. + + Fixes Debian bug #709405. + + * src/man.c (display_database): Don't use the pointed-to name to + construct the title for display. + +2014-09-16 Colin Watson + + * Version: 2.7.0-pre1. + +2014-09-16 Colin Watson + + Fix distcheck following addition of systemd tmpfiles snippet + + * Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Add + --with-systemdtmpfilesdir=\$${prefix}/lib/tmpfiles.d. + +2014-09-16 Bjarni Ingi Gislason + + Formatting improvements to man(1) + + Fixes Debian bug #726266. + + * man/man1/man.man1: Protect "." at beginning or end of strings with + "\&". Start sentences on new lines. Insert italic corrections + between adjacent italic and roman characters. Use double quotation + marks around arguments rather than placing "\ " between strings. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + +2014-09-16 Colin Watson + + Prioritise COLUMNS above TIOCGWINSZ + + Fixes Ubuntu bug #1315282. + + * lib/linelength.c (get_line_length): Prioritise COLUMNS above + TIOCGWINSZ. + * man/man1/apropos.man1 (DESCRIPTION): Describe new terminal width + priorities. + * man/man1/man.man1 (DESCRIPTION): Likewise. + * man/man1/whatis.man1 (DESCRIPTION): Likewise. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + * NEWS: Document this. + +2014-09-16 Colin Watson + + Use xnrealloc rather than xrealloc in a few more places + + * src/catman.c (parse_opt): Use xnrealloc rather than xrealloc. + * src/globbing.c (update_directory_cache): Likewise. + * src/ult_src.c (ult_trace): Likewise. + +2014-09-16 Colin Watson + + Order files by first physical extent before reading + + Inspired by a similar change in dpkg. This takes 'mandb -c' from + 104 to 32 seconds in a test installation, and 'man -K' from 74 to 38 + seconds. On non-Linux systems where FIEMAP is not available, use + posix_fadvise instead to preload files. + + Fixes Debian bug #574410. + + * gnulib: Import nonblocking and openat modules. + * configure.ac: Check for and posix_fadvise. + * lib/orderfiles.c: New file. + * lib/orderfiles.h: New file. + * lib/Makefile.am (libman_la_SOURCES): Add orderfiles.c and + orderfiles.h. + * src/check_mandirs.c (add_dir_entries): Order files before reading + them. + * src/man.c (try_section, do_global_apropos_section): Likewise. + * src/straycats.c (check_for_stray): Likewise. + * NEWS: Document this. + +2014-09-16 Colin Watson + + * NEWS: Document a couple more changes since 2.6.7.1. + +2014-09-15 Colin Watson + + Merge convert_name into man.c + + * src/convert_name.c (gripe_converting_name): Move to ... + * src/man.c (gripe_converting_name): ... here. + * src/convert_name.c (convert_name): Move to ... + * src/man.c (convert_name): ... here. Make static. + * src/convert_name.h: Remove. + * src/Makefile.am (man_SOURCES): Remove convert_name.c and + convert_name.h. + * po/POTFILES.in: Remove src/convert_name.c. + * po/man-db.pot, po/*.po: Update. + +2014-09-15 Colin Watson + + * tools/README: Update heading to reflect moves to build-aux. + +2014-09-15 Colin Watson + + Make a few libdb functions static + + * libdb/db_lookup.c (copy_if_set, split_data): Make static. + (make_content): Move to ... + * libdb/db_store.c (make_content): ... here. Make static. + * libdb/db_storage.h (split_data, make_content, copy_if_set): Remove + prototypes. + +2014-09-15 Colin Watson + + Make various functions static + + These functions are only used within the same compilation unit, so + have no need for external linkage. + + * src/check_mandirs.c (sanity_check_db): Make static. + * src/mandb.c (is_lang_dir, tried_catdirs_free, purge_catdir, + purge_catsubdirs, purge_catdirs): Likewise. + * src/zsoelim.l (try_compressed): Likewise. + +2014-09-15 Colin Watson + + Remove unused code in lexgrog + + * src/lexgrog.l (rule_profile): Remove unused function and + associated global declarations. + +2014-09-15 Colin Watson + + Reorder functions in man to remove need for header file + + man.h was only needed because of some poor function ordering in man.c. + Reorder functions so that definition comes before use, except in one + case of mutual recursion. + + * src/man.c (main): Move to end of file. + (local_man_loop): Move to immediately before man. + (man): Add a prototype declaration just before local_man_loop, to + cope with mutual recursion. + (do_prompt): Move to immediately above display. + * src/man.h: Remove. + * src/Makefile.am (man_SOURCES): Remove man.h. + +2014-09-15 Colin Watson + + Move argument handling out of configure to new MAN_ARG_* macros + + * m4/man-arg-automatic-create.m4, m4/man-arg-automatic-update.m4, + m4/man-arg-cats.m4, m4/man-arg-config-file.m4, m4/man-arg-db.m4, + m4/man-arg-device.m4, m4/man-arg-mandirs.m4, + m4/man-arg-override-dir.m4, m4/man-arg-sections.m4, + m4/man-arg-setuid.m4, m4/man-arg-systemdtmpfilesdir.m4, + m4/man-arg-undoc.m4: New files. + * configure.ac: Call new macros rather than inlining argument + handling. + +2014-09-15 Colin Watson + + * build-aux/config.sub: Upgrade to 2014-09-11. + +2014-09-12 Colin Watson + + Simplify handling using Gnulib + + * gnulib: Import dirent module. + * configure.ac: Remove obsolescent AC_HEADER_DIRENT macro. + * src/check_mandirs.c: Simplify a large conditional block to + "#include ". + * src/straycats.c: Likewise. + * src/ult_src.c: Likewise. + +2014-09-12 Colin Watson + + Remove old and broken FAST_BTREE code + + This was marked as experimental and broken when I took over man-db + 13 years ago, and I've hardly touched it. There's no point in + keeping it around. + + * include/manconfig.h.in (FAST_BTREE): Remove commented definition. + * libdb/db_btree.c (test_insert, gripe_get, dbstore, dblookup): + Remove. + (btree_flopen): Expand B_FLAGS macro. + (btree_replace): Remove FAST_BTREE case. + * libdb/db_lookup.c (dblookup): Define unconditionally. + * libdb/db_store.c (dbstore): Likewise. + +2014-09-11 Colin Watson + + Speed up the test suite if we have high-precision file timestamps + + * configure.ac: Substitute STAT_HAS_NSEC as "yes" or "no" depending + on whether high-precision file timestamps are available. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Export STAT_HAS_NSEC to + tests. + * src/tests/testlib.sh (next_second): Do nothing if STAT_HAS_NSEC is + "yes". + +2014-09-11 Colin Watson + + Use high-precision timestamps for manual pages + + * lib/util.c (is_changed): Compare high-precision timestamps. + * libdb/db_storage.h (FIELDS): Increment to 10. + (struct mandata): Change "time_t _st_mtime" to "struct timespec + mtime". + * libdb/db_lookup.c (dbprintf): Update mtime display. + (split_content): Store two fields for the mtime (seconds and + nanoseconds). + (make_content): Expect two fields for the mtime. + * libdb/db_store.c (replace_if_necessary): Compare high-precision + timestamps. + * src/check_mandirs.c (test_manfile): Likewise. + * src/man.c (maybe_update_file): Likewise. + * src/straycats.c (check_for_stray): Update initialisation of struct + mandata. + * src/tests/testlib.sh (accessdb_filter): Adjust for new format. + * manual/db.me (Contents of an index database): Describe new format. + (Example database): Update example output. + * NEWS: Document this. + +2014-09-10 Colin Watson + + Move database mtime out of the database into file metadata + + This makes the database reproducible between installations, as long + as the underlying database has predictable behaviour and the set of + installed manual pages (including their timestamps) remains + identical. As a bonus, we now use high-precision times in several + places. + + Fixes Debian bug #760895. + + * gnulib: Import futimens and timespec modules. + * libdb/db_btree.c (btree_get_time, btree_set_time): New functions. + * libdb/db_gdbm.c (man_gdbm_get_time, man_gdbm_set_time): New + functions. + * libdb/db_ndbm.c (ndbm_get_time, ndbm_set_time): New functions. + * libdb/mydbm.h (man_gdbm_get_time, man_gdbm_set_time, + ndbm_get_time, ndbm_set_time, btree_get_time, btree_set_time): Add + prototypes. + (MYDBM_GET_TIME, MYDBM_SET_TIME): New macros. + * src/check_mandirs.c (testmandirs, create_db, count_glob_matches, + purge_normal, purge_whatis, purge_missing): Use high-precision + times. + (update_db_time): Set file modification times rather than updating a + database row. + (create_db, purge_missing): Get database file modification times + rather than fetching a database row. + (purge_missing): If the new will_run_mandb argument is true, reset + the database mtime to its value before purging; this ensures that + mandb will still run as expected afterwards. + * src/check_mandirs.h (purge_missing): Update prototype. + * src/mandb.c (xcopy): Copy access and modification times. + (process_manpath): Work out in advance of purging whether we will + need to run mandb, and pass that to purge_missing. + * include/manconfig.h.in (VER_ID): Bump to 2.5.0. + (KEY): Remove. + + * man/man8/accessdb.man8 (DESCRIPTION), man/it/man8/accessdb.man8 + (DESCRIZIONE): Remove sample output, as it is of limited usefulness + compared to how awkward it is to maintain, especially in text + intended for translation. + * man/po4a/po/man-db-manpages.pot, man/po4a/po/*.po: Update. + * manual/db.me (Contents of an index database): Remove mention of + $mtime$. + (Example database): Remove $mtime$. Update $version. + + * NEWS: Document this. Bump version to 2.7.0 to correspond to the + database version change. + +2014-09-09 Colin Watson + + Make update_db_time static + + * src/check_mandirs.c (update_db_time): Make this static; its only + uses are within the same file. + * src/check_mandirs.h (update_db_time): Remove prototype. + +2014-09-09 Colin Watson + + Remove unused reset_db_mtime function + + * src/check_mandirs.c (reset_db_mtime): Remove. This function has + been unused since man-db 2.4.2. + * src/check_mandirs.h (reset_db_mtime): Remove prototype. + * src/man.c: Stop including "check_mandirs.h". + +2014-09-09 Colin Watson + + Don't purge entries from databases that fail sanity checks + + * src/check_mandirs.c (purge_missing): Return early if + sanity_check_db fails, for instance in the case of a version + mismatch. + +2014-09-09 Colin Watson + + Switch away from obsolescent utime function + + POSIX.1-2008 marks utime as obsolescent. Switch to variants of the + futimens/utimensat family instead, via Gnulib. Use higher-precision + times for cat pages. + + * gnulib: Import stat-time and utimens modules. + * src/man.c (man_modtime): Change type to struct timespec. + (commit_tmp_cat): Use utimens rather than utime. + (display): Store a higher-precision modification timestamp for + man_file. + +2014-09-09 Colin Watson + + catman: Honour program name transformations + + * src/catman.c (parse_for_sec): Execute MAN rather than "man". + +2014-09-08 Colin Watson + + * man/po4a/po/da.po: Fix po4a syntax error. + +2014-09-08 Colin Watson + + Various autotools upgrades + + * aclocal.m4: Upgrade to pkg-config 0.28. + * build-aux/config.guess: Upgrade to 2014-03-23. + * build-aux/config.sub: Upgrade to 2014-05-01. + * build-aux/ltmain.sh: Upgrade to Libtool 2.4.2-1.10 (from Debian). + +2014-08-30 Joe Hansen + + * man/po4a/po/da.po: Update from Translation Project. + +2014-08-12 Arif E. Nugroho + + * man/po4a/po/id.po: Update from Translation Project. + +2014-08-11 Arif E. Nugroho + + * po/id.po: Update from Translation Project. + +2014-06-18 Colin Watson + + Fix cat page parsing (Debian bug #751934) + + * src/lexgrog.l (find_name): Run "col -b -p -x" over cat pages if + possible before parsing them. + +2014-06-17 Colin Watson + + Add systemd tmpfiles snippet to clean up old cat files after a week + + Fixes Fedora bug #1110274. + + * configure.ac: Accept --with-systemdtmpfilesdir option. + (AC_CONFIG_FILES): Add init/Makefile and init/systemd/Makefile. + * Makefile.am (SUBDIRS): Add init. + * init/Makefile.am: New file. + * init/systemd/Makefile.am: New file. + * init/systemd/man-db.conf: New file. + * .gitignore: Add init/Makefile and init/systemd/Makefile. + +2014-06-17 Colin Watson + + Squash false positive from -Wmaybe-uninitialized + + * src/globbing.c: Initialise pattern_start. + +2014-04-10 Colin Watson + + * Version: 2.6.7.1. + +2014-04-10 Colin Watson + + Remove test suite dependency on realpath(1) + + * src/tests/mandb-7: Prepend "$(pwd -P)/" to $tmpdir in + configuration files rather than calling realpath. + * NEWS: Document this. + +2014-04-10 Colin Watson + + * Version: 2.6.7. + + * Makefile.am (EXTRA_DIST): Add gnulib/argp-domain.patch. + +2014-04-10 Peter Schiffer + + Only create a cache directory tag if catpath != manpath + + * src/mandb.c (mandb): Don't create CACHEDIR.TAG if the catpath is + equal to the manpath. + * src/tests/mandb-7: New file. + * src/tests/Makefile.am (ALL_TESTS): Add mandb-7. + * NEWS: Document this. + +2014-04-10 Colin Watson + + Make cache directory tag creation more readable + + * src/mandb.c (mandb): Move cache directory tag string to ... + (CACHEDIR_TAG): ... here (new macro). + +2014-03-26 Colin Watson + + Run the pager in man's original working directory + + Reported by Peng Yu. + + * src/man.c (make_display_command): Set pager_cmd's working + directory to man's original working directory. + * configure.ac: Require libpipeline >= 1.3.0. + * NEWS: Document this. + +2014-03-26 Colin Watson + + Upgrade to Automake 1:1.14.1-3 (from Debian). + +2014-03-20 Mario Blättermann + + Update German manual page translation + + * man/po4a/po/de.po: Update from Translation Project. + * man/THANKS: Add translator credit. + +2014-03-17 Robert Luberda + + * man/po4a/po/pl.po: Update from Translation Project. + +2014-02-20 Colin Watson + + Move Autotools auxiliary build files from tools to build-aux. + + This keeps man-db's own tools separate, reducing confusion, and + "build-aux" is a more conventional location for the Autotools files. + +2014-02-18 Colin Watson + + Upgrade to Gnulib 20140202 and Libtool 2.4.2-1.7 (from Debian). + + * lib/appendstr.c (appendstr): Use size_t type for string lengths. + +2014-01-23 Colin Watson + + Improve compatibility with archaic shells + + * src/tests/man-5: Assign and export shell variables in two steps, + for improved compatibility with some archaic shells. + * src/tests/man-7: Likewise. + * src/tests/man-8: Likewise. + * src/tests/zsoelim-1: Likewise. + +2014-01-23 Colin Watson + + Fix test failure with --enable-undoc + + * src/man.c (gripe_no_man): Don't print "See ... for help" message + when MAN_TEST_DISABLE_UNDOCUMENTED is set in the environment. + * src/tests/man-7: Export MAN_TEST_DISABLE_UNDOCUMENTED=1. + * NEWS: Document this. + +2014-01-23 Colin Watson + + * Version: 2.6.6. + + * man/po4a/Makefile.am (all-local): Make staging files writeable. + + * README: Update copyright to 2014. + +2014-01-23 Colin Watson + + Tidy up override directory support slightly + + * src/manp.c (insert_override_dir): Drop braces. + (get_manpath_from_path): Standardise whitespace. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Use Automake-generated + substitution rather than substituting @override_dir@ again. + +2014-01-23 Peter Schiffer + + Add support for override directory in search path + + * configure.ac: Add --with-override-dir option. + * include/manconfig.h.in (OVERRIDE_DIR): New definition. + * src/manp.c (insert_override_dir): New function. + (get_manpath_from_path): Call it before add_dir_to_list. + * src/tests/man-9: New file. + * src/tests/Makefile.am (TESTS_ENVIRONMENT): Set and export + OVERRIDE_DIR. + (ALL_TESTS): Add man-9. + * NEWS: Document this. + +2014-01-23 Colin Watson + + Upgrade to Automake 1.14.1 and Libtool 2.4.2-1.6 (from Debian). + +2014-01-19 Akihiro Sagawa + + Fix macro and hyphenation language handling + + * src/man.c (display): Don't free page_lang if it's going to be used + by locale_macros. + * src/tests/man-8: New file. + * src/tests/Makefile.am (ALL_TESTS): Add man-8. + * NEWS: Document this. + +2014-01-19 David Prévot + + * man/po4a/po/fr.po: Update from Translation Project. + +2014-01-18 Joe Hansen + + * man/po4a/po/da.po: Update from Translation Project. + +2014-01-16 Yuri Kozlov + + * man/po4a/po/ru.po: Update from Translation Project. + +2014-01-16 Colin Watson + + * Version: 2.6.6-pre2. + +2014-01-16 Мирослав Николић + + Add Serbian translation + + * po/sr.po: New from Translation Project. + * po/LINGUAS: Add sr. + * man/THANKS: Add translator credit. + +2014-01-15 Colin Watson + + * man/po4a/po: Update. + +2014-01-15 Peter Schiffer + + Synchronise manual pages with usage messages + + * man/man1/apropos.man1 (SYNOPSIS): Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + * man/man1/lexgrog.man1 (SYNOPSIS): Add -d. Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + * man/man1/man.man1 (SYNOPSIS): Replace -h with -?. + (OPTIONS): Likewise. Add --path (alias for -w). Add --usage. + * man/man1/manpath.man1 (SYNOPSIS): Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + * man/man1/whatis.man1 (SYNOPSIS): Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + * man/man8/accessdb.man8 (SYNOPSIS): Add -d. Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + * man/man8/catman.man8 (SYNOPSIS): Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + * man/man8/mandb.man8 (SYNOPSIS): Replace -h with -?. + (OPTIONS): Likewise. Add --usage. + +2014-01-15 Colin Watson + + Fix memory leaks related to make_filename + + * src/check_mandirs.c (test_manfile): Remove now-redundant stat. + Free abs_filename. + * src/man.c (display_filesystem): Consolidate return paths. + Consistently free filename. + (display_database): Free file after using it. + (maybe_update_file): Likewise. + +2014-01-15 Peter Schiffer + + Silence error messages for stale database entries (Fedora bug #841431) + + * src/filenames.c (make_filename): Return NULL if the resulting file + is not readable. Update all callers to handle NULL returns. + * src/tests/man-7: New file. + * src/tests/Makefile.am (ALL_TESTS): Add man-7. + * NEWS: Document this. + +2014-01-15 Colin Watson + + * src/tests/man-5, src/tests/man-6: Mark executable. + +2014-01-13 Robert Luberda + + * man/po4a/po/pl.po: Update from Translation Project. + +2014-01-13 Colin Watson + + Fix domain handling in argp + + * gnulib/argp-domain.patch: New file. + * autogen.sh: Apply gnulib/argp-domain.patch. + * NEWS: Document this. + +2014-01-12 Trần Ngọc Quân + + * po/vi.po: Update from Translation Project. + +2014-01-11 David Prévot + + * man/po4a/po/fr.po: Update from Translation Project. + +2014-01-11 Yuri Kozlov + + * man/po4a/po/ru.po: Update from Translation Project. + +2014-01-10 Colin Watson + + * Version: 2.6.6-pre1. + +2014-01-10 Colin Watson + + Don't update man/po4a/po/ when nothing has changed + + * man/po4a/Makefile.am (DOMAIN): New variable. + (EXTRA_DIST): Use $(DOMAIN). + (STAGING): New variable. + (PO4A_ARGS): Set new "podir" variable. + (RUN_PO4A): New variable. + (all-local): Abbreviate using RUN_PO4A. Copy POT/PO files to + $(STAGING) before running po4a, to avoid updating the master files. + (update-po): Move to ... + (update-po-real): ... here. Abbreviate using RUN_PO4A. Add + --force, since this target is only called when we really want to + update. Copy POT/PO files to $(STAGING) before running po4a, and + only copy them back if the POT file has changed by more than just + the POT-Creation-Date. + (update-po): New rule. Call update-po-real if and only if srcdir = + builddir. + (clean-local): New rule. Remove $(STAGING). + * man/po4a/po4a.cfg (po4a_paths): Refer to $(podir) rather than + $(srcdir)/po4a/po. + * release.sh: Stop removing man/po4a/po/man-db-manpages.pot; this + should no longer be necessary. + +2014-01-03 victory + + * po/ja.po: Update from Translation Project. + +2013-12-09 Colin Watson + + Make it easier to prove that catman option parsing is safe + + * src/catman.c (parse_opt): Check sections before assigning to + sections[i]. (Already always safe, but this makes it easier to + prove.) + +2013-12-09 Colin Watson + + Update documentation for git. + + * docs/HACKING (Sending patches): Suggest 'git diff'. + (Revision control): Update for git. Remove comment about + ChangeLog handling for branches. + * NEWS: Document switch to git. + +2013-12-09 Colin Watson + + gnulib: Import gnupload module. + +2013-12-09 Colin Watson + + Automatically generate ChangeLog from git + + * ChangeLog: Move to ... + * ChangeLog-2013: ... here. + * Makefile.am (EXTRA_DIST): Add ChangeLog-2013. + (dist-hook): Add gen-ChangeLog. + (gen-ChangeLog): New rule, based on that in coreutils. + * gnulib: Import gitlog-to-changelog module. -- cgit v1.2.3