]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
10 years agoAs suggested by jmc@, only include line and column numbers into messages
Ingo Schwarze [Fri, 20 Jun 2014 23:02:31 +0000 (23:02 +0000)]
As suggested by jmc@, only include line and column numbers into messages
when they are meaningful, to avoid confusing stuff like this:
$ mandoc /dev/null
mandoc: /dev/null:0:1: FATAL: not a manual
Instead, just say:
mandoc: /dev/null: FATAL: not a manual

Another example this applies to is documents having a prologue,
but lacking a body.  Do not throw a FATAL error for these; instead,
issue a WARNING and show the empty document, in the man(7) case with
the same amount of blank lines as groff does.  Also downgrade mdoc(7)
documents having content before the first .Sh from FATAL to WARNING.

10 years agoStart systematic improvements of error reporting.
Ingo Schwarze [Fri, 20 Jun 2014 17:24:00 +0000 (17:24 +0000)]
Start systematic improvements of error reporting.
So far, this covers all WARNINGs related to the prologue.

1) hierarchical naming of MANDOCERR_* constants
2) mention the macro name in messages where that adds clarity
3) add one missing MANDOCERR_DATE_MISSING msg
4) fix the wording of one message related to the man(7) prologue

Started on the plane back from Ottawa.

10 years agoPrefix error messages from mandoc(1) with "mandoc: "
Ingo Schwarze [Fri, 20 Jun 2014 16:11:42 +0000 (16:11 +0000)]
Prefix error messages from mandoc(1) with "mandoc: "
just like almost all other utility programs do.
Suggested by nick@ who wondered where messages came from
when calling mandoc(1) from inside a Perl script.
ok jmc@ nick@

10 years agolet the build system cope with the recent ohash changes
Ingo Schwarze [Fri, 20 Jun 2014 02:55:49 +0000 (02:55 +0000)]
let the build system cope with the recent ohash changes

10 years agotake a note about pandoc
Ingo Schwarze [Fri, 20 Jun 2014 02:53:13 +0000 (02:53 +0000)]
take a note about pandoc

10 years agoMerge from OpenBSD - Marc Espie improved the ohash interface:
Ingo Schwarze [Fri, 20 Jun 2014 02:24:40 +0000 (02:24 +0000)]
Merge from OpenBSD - Marc Espie improved the ohash interface:
* rename the halloc callback to calloc, provide overflow protection
* rename the hfree callback to free, drop the useless size argument
* prevent integer overflows in ohash_resize

10 years agosync to OpenBSD:
Ingo Schwarze [Fri, 20 Jun 2014 02:10:05 +0000 (02:10 +0000)]
sync to OpenBSD:
whitespace and comment changes, no functional change

10 years agoMore tweaking of set_basedir().
Ingo Schwarze [Fri, 20 Jun 2014 01:21:48 +0000 (01:21 +0000)]
More tweaking of set_basedir().

1) Do not error out when getcwd(3) fails, only fail when inaccessibility
of the cwd prevents processing of relative paths given on the command line.

2) Do not uselessly call set_basedir() twice in a row.
While fts_read(3) in treescan() does cause the cwd to jump around,
fts_close(3) is always called at the end, putting us back
where we came from.  The -d/-u fallback code already relied on this.

3) Fix the man-root-dir indicator in say().

10 years agoSome simple set_basedir() cleanup; more to come.
Ingo Schwarze [Thu, 19 Jun 2014 00:45:37 +0000 (00:45 +0000)]
Some simple set_basedir() cleanup; more to come.

1) Refrain from calling set_basedir() in the -t case,
and do not attempt to strip anything from the file names in that case.
Testing individual files cannot reasonably have any notion of a base dir.

2) Remove the possibility of passing NULL to set_basedir().
It was dangerous because it was not idempotent, and it served no purpose
except closing a file descriptor right before exit(), which is pointless.
Besides, the file descriptor is likely to be removed completely, soon.

3) Make sure that /foobar isn't treated as a subdirectory of /foo;
this fixes a bug reported by espie@.

10 years agoMerge OpenBSD rev. 1.108 by sthen@; original commit message:
Ingo Schwarze [Wed, 18 Jun 2014 19:34:04 +0000 (19:34 +0000)]
Merge OpenBSD rev. 1.108 by sthen@; original commit message:
Don't display "unable to open mandoc.db" error messages (SQLITE_CANTOPEN)
in the code which opens mandocdb's sqlite database when updating/deleting
individual files (as used and only really useful for pkg_add/pkg_delete).

10 years agosome new things to do
Ingo Schwarze [Tue, 10 Jun 2014 21:19:57 +0000 (21:19 +0000)]
some new things to do

10 years agoRender roff escape sequences contained in manual page descriptions
Ingo Schwarze [Wed, 7 May 2014 16:19:03 +0000 (16:19 +0000)]
Render roff escape sequences contained in manual page descriptions
before putting them into the mpages table.
Issue found by bentley@ in OpenBSD::Getopt(3p).

10 years agoFix two memory leaks in makewhatis -n:
Ingo Schwarze [Wed, 7 May 2014 15:10:36 +0000 (15:10 +0000)]
Fix two memory leaks in makewhatis -n:
1. As found by nigel@, names_check() requires database access.
2. Do not leak names and strings in -n mode.

10 years agoDo not segfault in makewhatis -Q if the next .SH after .SH NAME
Ingo Schwarze [Wed, 7 May 2014 14:14:17 +0000 (14:14 +0000)]
Do not segfault in makewhatis -Q if the next .SH after .SH NAME
does not have any arguments.  Crash found by nigel@ in kermit(1).

10 years agoImprove error handling in dbopen(). If PRAGMA SQL statements fail,
Ingo Schwarze [Sun, 27 Apr 2014 23:08:56 +0000 (23:08 +0000)]
Improve error handling in dbopen().  If PRAGMA SQL statements fail,
report the error, close the database, and return failure from dbopen(),
such that the main program can recover and rebuild the database.

As noticed by stsp@, this can happen when database files are
accessible, but corrupt or in the wrong format, which will now
automatically be repaired.

Besides, use a safer idiom after sqlite3_open*() failure that also
handles out-of-memory situations correctly, and do not forget to
close the database after CREATE TABLE failure.

10 years agoOMRON used uppercase for the model names of their Motorola 88100 LUNA
Ingo Schwarze [Sun, 27 Apr 2014 22:42:15 +0000 (22:42 +0000)]
OMRON used uppercase for the model names of their Motorola 88100 LUNA
workstations, so show the kernel architecture names in uppercase
to the user, too.
Based on a patch from Kenji Aoyama@, thanks!

10 years agoFix a minor optimization i broke in rev. 1.163 on August 20, 2010:
Ingo Schwarze [Fri, 25 Apr 2014 14:11:30 +0000 (14:11 +0000)]
Fix a minor optimization i broke in rev. 1.163 on August 20, 2010:
Do not bother looking into the hash table when the length of the macro
already tells us it's invalid.  No functional change.
Noticed by jsg@, thanks!

10 years agoReduce the verbosity of makewhatis -t:
Ingo Schwarze [Fri, 25 Apr 2014 12:13:15 +0000 (12:13 +0000)]
Reduce the verbosity of makewhatis -t:
In the past, it always showed the title lines of the files processed.
Now, it only shows them when called with -D.
That is better because pkg_create calls makewhatis -t.
It is also more consistent with -D behaviour in non- -t modes.
Issue reported by ajacoutot@; ok espie@ ajacoutot@ jasper@.

10 years agoVarious Makefile improvements:
Ingo Schwarze [Thu, 24 Apr 2014 00:29:45 +0000 (00:29 +0000)]
Various Makefile improvements:
* Use sha256 rather than md5.
* Update .h dependencies for some objects.
* Provide `www' target to build everything needed for the web site.
* Move .SUFFIXES and .PHONY technicalities to the bottom.
* State Copyright and license, just for clarity.

10 years agomisplaced punctuation
Ingo Schwarze [Thu, 24 Apr 2014 00:28:19 +0000 (00:28 +0000)]
misplaced punctuation

10 years agoprototype for reallocarray()
Ingo Schwarze [Wed, 23 Apr 2014 23:29:10 +0000 (23:29 +0000)]
prototype for reallocarray()

10 years agoAudit malloc(3)/calloc(3)/realloc(3) usage.
Ingo Schwarze [Wed, 23 Apr 2014 21:40:47 +0000 (21:40 +0000)]
Audit malloc(3)/calloc(3)/realloc(3) usage.
First committed to wrong branch, sorry.

10 years agoAudit malloc(3)/calloc(3)/realloc(3) usage.
Ingo Schwarze [Wed, 23 Apr 2014 21:06:41 +0000 (21:06 +0000)]
Audit malloc(3)/calloc(3)/realloc(3) usage.
* Change eight reallocs to reallocarray to be safe from overflows.
* Change one malloc to reallocarray to be safe from overflows.
* Change one calloc to reallocarray, no zeroing needed.
* Change the order of arguments of three callocs (aesthetical).

10 years agoAudit strlcpy(3)/strlcat(3) usage:
Ingo Schwarze [Wed, 23 Apr 2014 19:09:16 +0000 (19:09 +0000)]
Audit strlcpy(3)/strlcat(3) usage:
* Add missing truncation checks to three calls.
* In four cases where we know that the distination buffer is large enough,
cast the return vailue to (void).

10 years agoespie@ suggests using SQL views
Ingo Schwarze [Wed, 23 Apr 2014 16:37:43 +0000 (16:37 +0000)]
espie@ suggests using SQL views

10 years agoimprove SQL style: avoid "SELECT *", be explicit in what columns we want;
Ingo Schwarze [Wed, 23 Apr 2014 16:34:50 +0000 (16:34 +0000)]
improve SQL style: avoid "SELECT *", be explicit in what columns we want;
suggested by espie@.

10 years agoAudit strlcpy(3)/strlcat(3) usage.
Ingo Schwarze [Wed, 23 Apr 2014 16:08:33 +0000 (16:08 +0000)]
Audit strlcpy(3)/strlcat(3) usage.

* Repair three instances of silent truncation, use asprintf(3).
* Change two instances of strlen(3)+malloc(3)+strlcpy(3)+strlcat(3)+...
to use asprintf(3) instead to make them less error prone.
* Cast the return value of four instances where the destination
buffer is known to be large enough to (void).
* Completely remove three useless instances of strlcpy(3)/strlcat(3).
* Mark two places in -Thtml with XXX that can cause information loss
and crashes but are not easy to fix, requiring design changes of
some internal interfaces.
* The file mandocdb.c remains to be audited.

10 years agoadd a LICENSE file for clarity and for the convenience of porters
Ingo Schwarze [Tue, 22 Apr 2014 22:03:22 +0000 (22:03 +0000)]
add a LICENSE file for clarity and for the convenience of porters

10 years agoin debug messages, truncating strings of excessive lengths is actually
Ingo Schwarze [Sun, 20 Apr 2014 22:04:04 +0000 (22:04 +0000)]
in debug messages, truncating strings of excessive lengths is actually
a good thing, so cast the return value from sprintf to (void);
this concludes the mandoc sprintf audit

10 years agostrlen+malloc+snprintf is error prone;
Ingo Schwarze [Sun, 20 Apr 2014 20:48:53 +0000 (20:48 +0000)]
strlen+malloc+snprintf is error prone;
rewrite post_lb() to use asprintf(3) instead

10 years agofix unchecked snprintf(3) in page header printing:
Ingo Schwarze [Sun, 20 Apr 2014 20:18:12 +0000 (20:18 +0000)]
fix unchecked snprintf(3) in page header printing:
the length of the title is unknown, and speed doesn't matter here,
so use asprintf/free rather than a static buffer

10 years agomake sure static buffers for snprintf(3) are large enough
Ingo Schwarze [Sun, 20 Apr 2014 19:40:13 +0000 (19:40 +0000)]
make sure static buffers for snprintf(3) are large enough
and cast snprintf return value to (void) where they are

10 years agoKNF: case (FOO): -> case FOO:, remove /* LINTED */ and /* ARGSUSED */,
Ingo Schwarze [Sun, 20 Apr 2014 16:46:04 +0000 (16:46 +0000)]
KNF: case (FOO):  ->  case FOO:, remove /* LINTED */ and /* ARGSUSED */,
remove trailing whitespace and blanks before tabs, improve some indenting;
no functional change

10 years agoTwo minor tweaks regarding the fallback from -u/-d to default mode:
Ingo Schwarze [Sat, 19 Apr 2014 02:56:54 +0000 (02:56 +0000)]
Two minor tweaks regarding the fallback from -u/-d to default mode:
(1) Use all files found on the command line, but do *not* use all stray
files found during fallback tree recursion.
(2) If the fallback works, call that success, i.e. exit(0).
As pointed out by naddy@, the latter is required for ports' happiness.

10 years agoProperly handle symlinks (hardlinks and .so only files were already ok):
Ingo Schwarze [Sat, 19 Apr 2014 02:30:19 +0000 (02:30 +0000)]
Properly handle symlinks (hardlinks and .so only files were already ok):
Use the file name of the symlink but the inode number of the file pointed to,
such that we get multiple mlinks records but not multiple mpages records.
Also make sure they do not point outside the tree we are processing.

Issue found by kili@ in desktop-file-edit(1), thanks!

10 years agoIn update mode, when opening the database fails, probably because it is
Ingo Schwarze [Fri, 18 Apr 2014 21:55:38 +0000 (21:55 +0000)]
In update mode, when opening the database fails, probably because it is
missing or corrupt, just rebuild it from scratch.  This also helps when
installing the very first port on a freshly installed machine
and is similar to what espie@'s classical makewhatis(8) did.

Issue reported by naddy@ via kili@.

10 years agoSlowly, the dust begins to settle.
Ingo Schwarze [Fri, 18 Apr 2014 10:30:37 +0000 (10:30 +0000)]
Slowly, the dust begins to settle.
We are keeping the traditional name makewhatis(8).
No content change.

10 years agoFix a few lies; polish wording and formatting while here.
Ingo Schwarze [Fri, 18 Apr 2014 09:47:09 +0000 (09:47 +0000)]
Fix a few lies; polish wording and formatting while here.

10 years agoGarbage collect one pair of needless parentheses in SQL code generation;
Ingo Schwarze [Thu, 17 Apr 2014 19:20:01 +0000 (19:20 +0000)]
Garbage collect one pair of needless parentheses in SQL code generation;
note this doesn't affect performance, SQLite generates the same byte code.
While here, make the calls to exprspec() easier to understand.

10 years agoRename the mpages.id column to mpages.pageid. There is no good reason
Ingo Schwarze [Wed, 16 Apr 2014 21:36:18 +0000 (21:36 +0000)]
Rename the mpages.id column to mpages.pageid.  There is no good reason
to call this kid by a different name here than in all other tables.

10 years agoGive the mlinks and keys tables a pageid index,
Ingo Schwarze [Wed, 16 Apr 2014 18:59:43 +0000 (18:59 +0000)]
Give the mlinks and keys tables a pageid index,
as suggested by jeremy@ and espie@.

The mlinks index speeds up basic apropos(1) searches by around 30%
because it speeds up the final SELECT FROM mlinks query by about 95%.
For large result sets, the overall speedup gets even larger, in the
extreme case of "apropos Nd~." bymore than 90%.
The keys index finally makes the apropos(1) -O option usable: It no longer
incurs relevant extra cost, while in the past it was embarrassingly slow.

This comes at a cost:  Total database build times grow by about 5%,
and each index adds about 10% database size with -Q.  I consider that
acceptable in view of the huge apropos(1) performance gains.
The -Q database for /usr/share/man still remains below 1 MB.

10 years agoPass the function flags SQLITE_UTF8 (because SQLITE_ANY is deprecated)
Ingo Schwarze [Wed, 16 Apr 2014 00:33:47 +0000 (00:33 +0000)]
Pass the function flags SQLITE_UTF8 (because SQLITE_ANY is deprecated)
and SQLITE_DETERMINISTIC when creating deterministic functions;
best practice measure suggested by espie@ and jeremy@;
as expected by jeremy@, no measurable effect on performance.

10 years agoOops, sorry, revert previous and commit the correct patch:
Ingo Schwarze [Tue, 15 Apr 2014 23:51:39 +0000 (23:51 +0000)]
Oops, sorry, revert previous and commit the correct patch:
At the end of mansearch(), fchdir() back to where we started from.

10 years agoAt the end of mansearch(), fchdir() back to where we started from;
Ingo Schwarze [Tue, 15 Apr 2014 23:48:51 +0000 (23:48 +0000)]
At the end of mansearch(), fchdir() back to where we started from;
this is cleaner and helps to not scatter gmon.out files all over
the place when profiling.

10 years agoremove documentation of the former macro key "NAME";
Ingo Schwarze [Tue, 15 Apr 2014 23:02:27 +0000 (23:02 +0000)]
remove documentation of the former macro key "NAME";
it got deleted with mansearch.h rev. 1.12

10 years agoDocument the database format and SQL code generation;
Ingo Schwarze [Tue, 15 Apr 2014 20:18:26 +0000 (20:18 +0000)]
Document the database format and SQL code generation;
suggested by kristaps@ and espie@.

10 years agoUsing macros in .Sh header lines, or having .Sm off or .Bk -words open
Ingo Schwarze [Tue, 15 Apr 2014 00:41:09 +0000 (00:41 +0000)]
Using macros in .Sh header lines, or having .Sm off or .Bk -words open
while processing .Sh, is not at all recommended, but it's not strictly
a syntax violation either, and in any case, mandoc must not die in an
assertion.  I broke this in rev. 1.124.

Crash found while trying to read the (rather broken) original 4.3BSD-Reno
od(1) manual page.

10 years agoUnify description handling across all document types (mdoc, man, cat).
Ingo Schwarze [Sun, 13 Apr 2014 22:03:04 +0000 (22:03 +0000)]
Unify description handling across all document types (mdoc, man, cat).
Assert that the description is unset right before calling the parse_*
handler, and assign a default if it's still unset right afterwards.
Remove all stray asserts and default assignments found elsewhere.

This fixes SQL_STEP failures for man(7) pages lacking descriptions.

10 years agobetter error reporting in case of SQL errors: mention dir and file
Ingo Schwarze [Sun, 13 Apr 2014 20:55:45 +0000 (20:55 +0000)]
better error reporting in case of SQL errors: mention dir and file

10 years agoFurther apropos(1) speed optimization was trickier than anticipated.
Ingo Schwarze [Fri, 11 Apr 2014 15:46:52 +0000 (15:46 +0000)]
Further apropos(1) speed optimization was trickier than anticipated.
Contrary to what i initially thought, almost all time is now spent
inside sqlite3(3) routines, and i found no easy way calling less of them.
However, sqlite(3) spends substantial time in malloc(3), and even more
(twice that) in its immediate malloc wrapper, sqlite3MemMalloc(),
keeping track of all individual malloc chunk sizes.  Typically about
90% of the malloced memory is used for purposes of the pagecache.

By providing an mmap(3) MAP_ANON SQLITE_CONFIG_PAGECACHE, execution
time decreases by 20-25% for simple (Nd and/or Nm) queries, 10-20% for
non-NAME queries, and even apropos(1) resident memory size as reported
by top(1) decreases by 20% for simple and by 60% for non-NAME queries.
The new function, mansearch_setup(), spends no measurable time.

The pagesize chosen is optimal:
* Substantially smaller pages yield no gain at all.
* Larger pages provide no additional benefit and just waste memory.

The chosen number of pages in the cache is a compromise:
* For simple queries, a handful of pages would suffice to get the full
speed effect, at an apropos(1) resident memory size of about 2.0 MB.
* For non-NAME queries, a large pagecache with 2k pages (2.5 MB) might
gain a few more percent in speed, but at the expense of doubling the
apropos(1) resident memory size for *all* queries.
* The chosen number of 256 pages (330 kB) allows nearly full speed gain
for all queries at the price of a 15% resident memory size increase.

10 years agoNext speed optimization step for the new apropos(1).
Ingo Schwarze [Thu, 10 Apr 2014 02:46:21 +0000 (02:46 +0000)]
Next speed optimization step for the new apropos(1).
Split manual names out of the common "keys" table into their
own "names" table.  This reduces standard apropos(1) search
times (i.e. searching for names and descriptions only) by
typically about 70% for the full /usr/share/man database.
(Yes, that multiplies with the previous optimization step,
so both together have reduced search times by a factor of
more than six.  I'm not done yet, expect more to come.)

Even with the minimal databases built with makewhatis(8) -Q,
this step still reduces search times by 15-20%.  For both cases,
database sizes and build times hardly change (+/-2%).

10 years agoAfter careful gprof(1)ing of the new apropos(1), move the descriptions
Ingo Schwarze [Wed, 9 Apr 2014 21:50:08 +0000 (21:50 +0000)]
After careful gprof(1)ing of the new apropos(1), move the descriptions
back from the keys table to the mpages table:  I found a good way
to still use them in searches, without complication of the code.

On my notebook, this reduces typical apropos(1) search times by about 40%,
it reduces /usr/share/man database size by 6% in makewhatis(8) -Q mode
and by 2% in standard mode (less overhead storing pointers to mpages),
and it doesn't measurably change database build times (may even be
going down by a percent or so because less data is being copied
around in ohashes).

10 years agoAdd a new term_flushln() flag TERMP_BRIND (if break, then indent)
Ingo Schwarze [Tue, 8 Apr 2014 07:13:11 +0000 (07:13 +0000)]
Add a new term_flushln() flag TERMP_BRIND (if break, then indent)
to control indentation of continuation lines in TERMP_NOBREAK mode.
In the past, this was always on; continue using it
for .Bl, .Nm, .Fn, .Fo, and .HP, but no longer for .IP and .TP.

I looked at this because sthen@ reported the issue in a manual
of a Perl module from ports, but it affects base, too: This patch
reduces groff-mandoc differences in base by more than 15%.

10 years agoIf the SYNOPSIS section contains an excessively long .Nm,
Ingo Schwarze [Tue, 8 Apr 2014 04:40:47 +0000 (04:40 +0000)]
If the SYNOPSIS section contains an excessively long .Nm,
adjust the right margin to avoid running into an assertion;
output in that case now agrees with groff, too.

10 years agoFully implement the \B (validate numerical expression) and
Ingo Schwarze [Tue, 8 Apr 2014 01:37:27 +0000 (01:37 +0000)]
Fully implement the \B (validate numerical expression) and
partially implement the \w (measure text width) escape sequence
in a way that makes them usable in numerical expressions and in
conditional requests, similar to how \n (interpolate number register)
and \* (expand user-defined string) are implemented.

This lets mandoc(1) handle the baroque low-level roff code
found at the beginning of the ggrep(1) manual.
Thanks to pascal@ for the report.

10 years agoWe already supported (outer) user-defined strings containing references
Ingo Schwarze [Mon, 7 Apr 2014 21:00:08 +0000 (21:00 +0000)]
We already supported (outer) user-defined strings containing references
to other (inner) user-defined strings in their values, such that the inner
ones get expanded at expansion time of the outer ones (delayed evaluation).
Now we also support specifying the name of an (outer) user-defined
string to expand using the expanded values of some other (inner)
user-defined strings (indirect reference).

10 years agoMake it clear which errors come from which tool.
Ingo Schwarze [Mon, 7 Apr 2014 18:26:10 +0000 (18:26 +0000)]
Make it clear which errors come from which tool.
joint work with sthen@

10 years agoAccept arbitrary argument delimiters for various roff(7) escape sequences.
Ingo Schwarze [Mon, 7 Apr 2014 17:51:10 +0000 (17:51 +0000)]
Accept arbitrary argument delimiters for various roff(7) escape sequences.
Needed for example by the new Perl pod2man(1) preamble.

10 years agoAlmost complete implementation of roff(7) numerical expressions.
Ingo Schwarze [Mon, 7 Apr 2014 15:07:13 +0000 (15:07 +0000)]
Almost complete implementation of roff(7) numerical expressions.
Support all binary operators except ';' (scale conversion).
Fully support chained operations and nested parentheses.
Use this for the .nr, .if, and .ie requests.
While here, fix parsing of integer numbers in roff_getnum().

10 years agobugfix: make sure all variables are properly initialized
Ingo Schwarze [Sat, 5 Apr 2014 21:18:19 +0000 (21:18 +0000)]
bugfix: make sure all variables are properly initialized
when rendering .ll (line length) requests.  oops.

10 years agoImplement the roff(7) .rr (remove register) request.
Ingo Schwarze [Sat, 5 Apr 2014 20:34:57 +0000 (20:34 +0000)]
Implement the roff(7) .rr (remove register) request.
As reported by sthen@, the perl-5.18 pod2man(1) preamble
thinks cool kids use that in manuals.  I hope *you* know better.

10 years agoIn -p (picky) mode, warn unless each filename (aka mlink)
Ingo Schwarze [Fri, 4 Apr 2014 18:23:30 +0000 (18:23 +0000)]
In -p (picky) mode, warn unless each filename (aka mlink)
appears as a name in the NAME section.
While here, garbage collect two unused variables, both called "match".

10 years agoWarn about missing mlinks.
Ingo Schwarze [Fri, 4 Apr 2014 16:43:16 +0000 (16:43 +0000)]
Warn about missing mlinks.
This is really expensive, more than tripling database build times,
so only do it when the -p (picky) option was given, but none of the
following options were given: -Q (quick), -d, -u, or -t.

10 years agoRemember which names are in the NAME section.
Ingo Schwarze [Fri, 4 Apr 2014 15:55:19 +0000 (15:55 +0000)]
Remember which names are in the NAME section.
This helps to find missing MLINKS.
Database build times do not change and database growth is minimal
(1.2% with -Q, 0.7% without -Q in /usr/share/man),
so making this optional would be pointless.

10 years agomerge OpenBSD rev. 1.20, describing new features
Ingo Schwarze [Fri, 4 Apr 2014 15:51:28 +0000 (15:51 +0000)]
merge OpenBSD rev. 1.20, describing new features

10 years agoWhen the -n or -t flag is given to makewhatis(8),
Ingo Schwarze [Fri, 4 Apr 2014 02:31:07 +0000 (02:31 +0000)]
When the -n or -t flag is given to makewhatis(8),
write names and decriptions to stdout,
in a format similar to apropos(1) output.
Inspired by espie@'s makewhatis.

10 years agoInstead of silently doing nothing at all,
Ingo Schwarze [Thu, 3 Apr 2014 21:45:31 +0000 (21:45 +0000)]
Instead of silently doing nothing at all,
warn and return non-zero when the manpath is empty, that is,
when /etc/man.conf is non-existent or unreadable
AND the environment variable MANPATH is unset or empty
AND no directories were given on the command line.

Inspired by the error handling in espie@'s makewhatis(8),
except that one doesn't know about MANPATH.

10 years agoRename the -W option to -p (mnemonics: picky, print to stderr):
Ingo Schwarze [Thu, 3 Apr 2014 16:27:28 +0000 (16:27 +0000)]
Rename the -W option to -p (mnemonics: picky, print to stderr):
That letter was already chosen by espie@ for OpenBSD 2.7,
so avoid being gratuitiously different more than a decade later.
Accept -v for backward compatibility with espie@'s makewhatis,
even though it does nothing right now.

10 years agoThe -v option of mandocdb(8) clashes with the -v option of espie@'s
Ingo Schwarze [Thu, 3 Apr 2014 15:37:19 +0000 (15:37 +0000)]
The -v option of mandocdb(8) clashes with the -v option of espie@'s
makewhatis(8), which traditionally does something different,
so rename it to -D (mnemonics: Debug, Dump, Display).

10 years agodocument -Q and -T; from OpenBSD
Ingo Schwarze [Thu, 3 Apr 2014 15:24:32 +0000 (15:24 +0000)]
document -Q and -T; from OpenBSD

10 years agoSupport the CONTEXT section for kernel manual pages found in Solaris and
Ingo Schwarze [Mon, 31 Mar 2014 01:05:32 +0000 (01:05 +0000)]
Support the CONTEXT section for kernel manual pages found in Solaris and
OpenBSD manuals.  It describes which contexts you can call functions in.
from dlg@, ok jmc@ deraadt@

10 years agoImprove formatting of broken blocks in -Tman,
Ingo Schwarze [Sun, 30 Mar 2014 23:34:32 +0000 (23:34 +0000)]
Improve formatting of broken blocks in -Tman,
somewhat similar to what mdoc_term.c already does for -Tascii.
OpenBSD rev. 1.58.

10 years agoAllow ERRORS in section 4; OpenBSD rev. 1.121.
Ingo Schwarze [Sun, 30 Mar 2014 23:28:06 +0000 (23:28 +0000)]
Allow ERRORS in section 4; OpenBSD rev. 1.121.

10 years agoSupport relative arguments to .ll (increase or decrease line length).
Ingo Schwarze [Sun, 30 Mar 2014 21:28:01 +0000 (21:28 +0000)]
Support relative arguments to .ll (increase or decrease line length).

10 years agoImplement the roff(7) .ll (line length) request.
Ingo Schwarze [Sun, 30 Mar 2014 19:47:48 +0000 (19:47 +0000)]
Implement the roff(7) .ll (line length) request.
Found by naddy@ in the textproc/enchant(1) port.
Of course, do not use this in new manuals.

10 years agoAllow leading and trailing vertical lines,
Ingo Schwarze [Fri, 28 Mar 2014 23:26:25 +0000 (23:26 +0000)]
Allow leading and trailing vertical lines,
and format them in the same way as groff.
While here, do not require whitespace before vertical lines
in layout specifications.
Issues found by bentley@ in mpv(1).

10 years agoProperly initialize malloc(3)ed memory.
Ingo Schwarze [Fri, 28 Mar 2014 19:17:12 +0000 (19:17 +0000)]
Properly initialize malloc(3)ed memory.
With this bug fix, partly unitialized memory could sometimes be
returned, sometimes causing crashes by bogus free(3)s in apropos(1).

10 years agoWithout bloating mandoc(1) itself, let mandocdb(8) support files
Ingo Schwarze [Wed, 26 Mar 2014 21:39:38 +0000 (21:39 +0000)]
Without bloating mandoc(1) itself, let mandocdb(8) support files
called manN/X.N.gz and catN/X.0.gz, reading them through a pipe(2)
from gunzip(1) -c.  Asked for by various people in the past.

10 years agoImprove error reporting.
Ingo Schwarze [Wed, 26 Mar 2014 20:53:36 +0000 (20:53 +0000)]
Improve error reporting.
Simplify combining a custom format string with perror(),
avoiding many manual calls to strerror(errno).
For low-level failures, report attempted function calls.
Do not abuse the say() filename argument for files outside the basedir,
and even less for other text.

10 years agoSkip leading escape sequences in man_deroff(). Helps indexing of
Ingo Schwarze [Sun, 23 Mar 2014 20:57:27 +0000 (20:57 +0000)]
Skip leading escape sequences in man_deroff().  Helps indexing of
some manuals containing overzealous escaping in their NAME section.

10 years agoRetire the old concat() function.
Ingo Schwarze [Sun, 23 Mar 2014 15:14:50 +0000 (15:14 +0000)]
Retire the old concat() function.
For .Sh, i wasn't even needed at all.
For .Dd, .Nm, and .Os, use the new mdoc_deroff() instead.
This gets rid of the last limited-size static buffers in this file,
hence eliminates the last explicit MANDOCERR_MEM throwers here,
and it shortens the code by 50 lines.

10 years agoIf an .Nd block contains macros, avoid fragmented entries in mandocdb(8),
Ingo Schwarze [Sun, 23 Mar 2014 12:44:56 +0000 (12:44 +0000)]
If an .Nd block contains macros, avoid fragmented entries in mandocdb(8),
instead use the .Nd content recursively.

10 years agoIf a man(7) NAME section contains macros, avoid truncated or empty
Ingo Schwarze [Sun, 23 Mar 2014 12:26:58 +0000 (12:26 +0000)]
If a man(7) NAME section contains macros, avoid truncated or empty
entries for .Nd in mandocdb(8), instead use the macro content
recursively.  This improves indexing of more than 200 manuals
in Xenocara, i.e. more than 15%, in particular GL and some Xkb.

10 years agoneeds mandoc_aux, too
Ingo Schwarze [Sun, 23 Mar 2014 12:19:03 +0000 (12:19 +0000)]
needs mandoc_aux, too

10 years agoavoid repetitive code for asprintf error handling
Ingo Schwarze [Sun, 23 Mar 2014 12:11:18 +0000 (12:11 +0000)]
avoid repetitive code for asprintf error handling

10 years agoThe files mandoc.c and mandoc.h contained both specialised low-level
Ingo Schwarze [Sun, 23 Mar 2014 11:59:17 +0000 (11:59 +0000)]
The files mandoc.c and mandoc.h contained both specialised low-level
functions used for multiple languages (mdoc, man, roff), for example
mandoc_escape(), mandoc_getarg(), mandoc_eos(), and generic auxiliary
functions.  Split the auxiliaries out into their own file and header.

10 years agoThe files mandoc.c and mandoc.h contained both specialised low-level
Ingo Schwarze [Sun, 23 Mar 2014 11:25:25 +0000 (11:25 +0000)]
The files mandoc.c and mandoc.h contained both specialised low-level
functions used for multiple languages (mdoc, man, roff), for example
mandoc_escape(), mandoc_getarg(), mandoc_eos(), and generic auxiliary
functions.  Split the auxiliaries out into their own file and header.
While here, do some #include cleanup.

10 years agoRemove currently unimplemented macros from the lists of used-defined
Ingo Schwarze [Thu, 20 Mar 2014 02:57:28 +0000 (02:57 +0000)]
Remove currently unimplemented macros from the lists of used-defined
macros to be cleared during .Dd and .TH because clearing them at that
point defeats the purpose of backup implementations provided in the
manual page itself, some of which _do_ work with mandoc(1).
While here, add the new .%C macro to the list to be cleared.

10 years agoRegister pure .so pages as mlinks, not as mpages.
Ingo Schwarze [Wed, 19 Mar 2014 22:33:09 +0000 (22:33 +0000)]
Register pure .so pages as mlinks, not as mpages.
This doesn't affect /usr/share/man, but improves /usr/X11R6/man:
* Eliminates multiple apropos(1) output for such pages.
* Reduces X11R6 database size from 450 kB to 240 kB (-47%).
* Reduces X11R6 database build time from 1.68s to 1.00s (-40%).

10 years agoWithout the MPARSE_SO option, if the file contains nothing but a
Ingo Schwarze [Wed, 19 Mar 2014 22:20:43 +0000 (22:20 +0000)]
Without the MPARSE_SO option, if the file contains nothing but a
single .so request, do not read the file pointed to, but instead
let mparse_result() provide the file name pointed to as a return
value.  To be used by makewhatis(8) in the future.

10 years agocope with mparse_alloc() interface change
Ingo Schwarze [Wed, 19 Mar 2014 22:05:10 +0000 (22:05 +0000)]
cope with mparse_alloc() interface change

10 years agoGeneralize the mparse_alloc() and roff_alloc() functions by giving
Ingo Schwarze [Wed, 19 Mar 2014 21:51:20 +0000 (21:51 +0000)]
Generalize the mparse_alloc() and roff_alloc() functions by giving
them an "options" argument, replacing the existing "inttype" and
"quick" arguments, preparing for a future MPARSE_SO option.
Store this argument in struct mparse and struct roff, replacing the
existing "inttype", "parsetype", and "quick" members.
No functional change except one tiny cosmetic fix in roff_TH().

10 years agoAllow checking that databases are up to date even when you have no write
Ingo Schwarze [Tue, 18 Mar 2014 16:56:10 +0000 (16:56 +0000)]
Allow checking that databases are up to date even when you have no write
permission on the databases, as requested by espie@ quite some time ago.
But make sure to not slow database generation down when you do have write
permission, and to not delay error reporting in -Q mode.

10 years agoin apropos(1) output, sort names and avoid multiple section numbers
Ingo Schwarze [Mon, 17 Mar 2014 16:31:44 +0000 (16:31 +0000)]
in apropos(1) output, sort names and avoid multiple section numbers

10 years agoSync to OpenBSD:
Ingo Schwarze [Mon, 17 Mar 2014 09:43:56 +0000 (09:43 +0000)]
Sync to OpenBSD:
* do not talk about shell globbing
* describe logical operations
* improve examples
* add HISTORY
* some wording improvements for clarity

10 years agominor sync to OpenBSD
Ingo Schwarze [Mon, 17 Mar 2014 08:34:00 +0000 (08:34 +0000)]
minor sync to OpenBSD

10 years agosync to OpenBSD: .ft is a roff(7) request, not a man(7) macro,
Ingo Schwarze [Mon, 17 Mar 2014 06:57:48 +0000 (06:57 +0000)]
sync to OpenBSD: .ft is a roff(7) request, not a man(7) macro,
and it is not even used frequently in man(7)

10 years agoIn -Tutf8 mode, make sure that hyphens get counted against the output line
Ingo Schwarze [Thu, 13 Mar 2014 19:23:50 +0000 (19:23 +0000)]
In -Tutf8 mode, make sure that hyphens get counted against the output line
length even when they are breakable.  Before this, a line containing N
breakable hyphens could get up to N characters wider than the right margin
in -Tutf8 output mode.
Issue reported by tedu@ on <bugs at OpenBSD>.

10 years agonew bug report from wiz@ regarding Tcl*(3)
Ingo Schwarze [Sat, 8 Mar 2014 21:54:39 +0000 (21:54 +0000)]
new bug report from wiz@ regarding Tcl*(3)

10 years agoIn .nf mode, use the MAN_LINE flag to detect input line breaks
Ingo Schwarze [Sat, 8 Mar 2014 16:22:04 +0000 (16:22 +0000)]
In .nf mode, use the MAN_LINE flag to detect input line breaks
instead of the man_node line member.  This is required to preserve
line breaks contained in user-defined macros called in .nf mode.
Found in a code audit triggered by fixing a similar issue in .TP.