]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
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.

10 years agoTo find out whether .TP head arguments are same-line or next-line arguments,
Ingo Schwarze [Sat, 8 Mar 2014 15:50:41 +0000 (15:50 +0000)]
To find out whether .TP head arguments are same-line or next-line arguments,
use the MAN_LINE flag instead of the man_node line member.
This is required such that user-defined macros wrapping .TP work correctly.

Issue found by Havard Eidnes in Tcl_NewStringObj(3), reported via
the NetBSD bug tracking system and Thomas Klausner <wiz at NetBSD>.

10 years agoImprove .if/.ie condition handling.
Ingo Schwarze [Sat, 8 Mar 2014 04:43:54 +0000 (04:43 +0000)]
Improve .if/.ie condition handling.
* Support string comparisons.
* Support negation not only for numerical, but for all conditions.
* Switch the `o' condition from false to true.
* Handle the `c', `d', and `r' conditions as false for now.
* Use int for boolean data instead of rolling our own "enum roffrule";
needed such that we can use the standard ! and == operators.

Havard Eidnes reported via the NetBSD bug tracking system that some
Tcl*(3) manuals need this, and Thomas Klausner <wiz at NetBSD>
forwarded the report to me.  This doesn't make the crazy Tcl*(3)
macrology maze happy yet, but brings us a bit closer.

10 years agoIn roff_cond_sub(), make sure that the incorrect input sequence `\\}',
Ingo Schwarze [Fri, 7 Mar 2014 18:37:37 +0000 (18:37 +0000)]
In roff_cond_sub(), make sure that the incorrect input sequence `\\}',
when found on a macro line, does not close a conditional block.
The companion function roff_cond_text() already did this correctly,
but make the code more readable without functional change.
While here, report the correct column number in related error messages.

10 years agoEven on macro lines, \} must not cause whitespace.
Ingo Schwarze [Fri, 7 Mar 2014 18:30:11 +0000 (18:30 +0000)]
Even on macro lines, \} must not cause whitespace.

10 years agoThree bugfixes related to the closing of conditional blocks:
Ingo Schwarze [Fri, 7 Mar 2014 02:22:05 +0000 (02:22 +0000)]
Three bugfixes related to the closing of conditional blocks:
1. Handle more than one `\}' on macro lines, as it was already done
for text lines.
2. Do not treat `\}' as a macro invocation after a dot at the beginning
of a line.  That allows more than one `\}' to work on lines starting
with `.\}'.  It also simplifies the code.
3. Do not complain about characters following `\}'.  Those are not lost,
but handled normally both on text and macro lines.

10 years agoIn -Tutf8 mode, mandoc_char(7) named accent character escape sequences
Ingo Schwarze [Wed, 5 Mar 2014 23:14:46 +0000 (23:14 +0000)]
In -Tutf8 mode, mandoc_char(7) named accent character escape sequences
have to render as non-combining accents; if you want combining accents,
you have to explicitly specify them using the Unicode character numbers
for combining accents, or you can use character escape sequences for
accented characters.  This lets mandoc behave like groff.

Additionally, both the Ossanna/Kernighan/Ritter troff manual and
the GNU troff manual say that \' and \` are equivalent to \(aa and
\(ga, respectively, so do the same for these.  This mitigates issues
with man(7) code autogenerated by texinfo2man(1), which mistranslates
TeX ` and ' to \` and \' instead of \(oq and \(cq as reported by
sthen@ and as analyzed by bentley@.

10 years ago- remove index.html, it is now part of the website repo
Ingo Schwarze [Mon, 3 Mar 2014 18:53:27 +0000 (18:53 +0000)]
- remove index.html, it is now part of the website repo
- install mandocdb, manpage, and apropos
- and some general cleanup (e.g., installcgi is .PHONY)

10 years agoMANDOCERR_BADTAB needs checking, but .UR/.UE is done
Ingo Schwarze [Mon, 3 Mar 2014 18:37:32 +0000 (18:37 +0000)]
MANDOCERR_BADTAB needs checking, but .UR/.UE is done

10 years agoMove the regression suite to the attic.
Ingo Schwarze [Mon, 3 Mar 2014 17:08:26 +0000 (17:08 +0000)]
Move the regression suite to the attic.
It has not been used or maintained for several years,
and we won't start using it now.
Devlopment regression testing is done in OpenBSD, and
there is no value in maintaining two regression suites in parallel.

10 years agoAfter Werner Lemberg accepted and committed some updates to the manual
Ingo Schwarze [Sun, 16 Feb 2014 14:26:55 +0000 (14:26 +0000)]
After Werner Lemberg accepted and committed some updates to the manual
page template contained in groff_mdoc(7), catch up with our own stuff.
In particular, allow ERRORS in section 4 and DIAGNOSTICS in section 9.
ok jmc@

10 years agowhen indenting, extend the right margin accordingly, when needed;
Ingo Schwarze [Sun, 16 Feb 2014 12:33:39 +0000 (12:33 +0000)]
when indenting, extend the right margin accordingly, when needed;
fixes a crash reported by blambert@ and a few other, similar ones

10 years agodocument .as and .ce
Ingo Schwarze [Fri, 14 Feb 2014 23:50:57 +0000 (23:50 +0000)]
document .as and .ce

10 years agoParse and ignore the roff(7) .ce request (center some lines).
Ingo Schwarze [Fri, 14 Feb 2014 23:24:26 +0000 (23:24 +0000)]
Parse and ignore the roff(7) .ce request (center some lines).

We even parse and ignore the .ad request (adjustment mode),
and it doesn't make sense to more prominently warn about
temporary than about permanent adjustment changes.

Request found by naddy@ in xloadimage(1) and by juanfra@ in racket(1).

10 years agoImplement the roff(7) .as request (append to user-defined string).
Ingo Schwarze [Fri, 14 Feb 2014 23:05:20 +0000 (23:05 +0000)]
Implement the roff(7) .as request (append to user-defined string).
Missing feature found by jca@ in ratpoison(1).
The ratpoison(1) manual still doesn't work because it uses .shift
and .while, too (apparently, ratpoison is so complex that it
needs a Turing-complete language to even format its manual :-).

Written at Christchurch International Airport.

10 years agoHandle some predefined read-only number registers, e.g. .H and .V.
Ingo Schwarze [Fri, 14 Feb 2014 22:27:41 +0000 (22:27 +0000)]
Handle some predefined read-only number registers, e.g. .H and .V.
In particular, this improves handling of the pod2man(1) preamble;
for examples of the effect, see some author names in perlthrtut(1).

Missing feature reported by Andreas Voegele <mail at andreasvoegele dot com>
more than two years ago.  Written at Christchurch International Airport.

10 years agouse .At where appropriate; from Jan Stary <hans at stare dot cz>
Ingo Schwarze [Fri, 14 Feb 2014 17:35:05 +0000 (17:35 +0000)]
use .At where appropriate; from Jan Stary <hans at stare dot cz>

10 years agoSupplement the documentation of the .St macro by minimal commentary
Ingo Schwarze [Fri, 24 Jan 2014 22:54:33 +0000 (22:54 +0000)]
Supplement the documentation of the .St macro by minimal commentary
regarding the content and relationships of the various standards,
and sort and group them.
tweaks and ok guenther@, ok millert@ sobrado@ jmc@

10 years agoImplement the \: (optional line break) escape sequence,
Ingo Schwarze [Wed, 22 Jan 2014 20:58:39 +0000 (20:58 +0000)]
Implement the \: (optional line break) escape sequence,
documented in the Ossanna-Kernighan-Ritter troff manual
and also supported by groff.

Missing feature reported by Steffen Nurpmeso <sdaoden at gmail dot com>.

10 years agoTreat the line after .Cd as a single argument.
Ingo Schwarze [Tue, 21 Jan 2014 10:26:53 +0000 (10:26 +0000)]
Treat the line after .Cd as a single argument.
This doesn't hurt normal manual display
and makes the mandocdb(8) database more useful.

10 years agoKeep words after .Ic together in a single argument.
Ingo Schwarze [Mon, 20 Jan 2014 11:28:29 +0000 (11:28 +0000)]
Keep words after .Ic together in a single argument.
This doesn't hurt normal manual display
and makes the mandocdb(8) database more useful.

10 years agoChange markup of some fixed strings from .Ar to .Cm.
Ingo Schwarze [Mon, 20 Jan 2014 00:51:43 +0000 (00:51 +0000)]
Change markup of some fixed strings from .Ar to .Cm.

10 years agoAlways compare arch case-insensitively.
Ingo Schwarze [Sun, 19 Jan 2014 23:09:30 +0000 (23:09 +0000)]
Always compare arch case-insensitively.

10 years agoAvoid the risk of trying to modify a literal string.
Ingo Schwarze [Sun, 19 Jan 2014 22:48:16 +0000 (22:48 +0000)]
Avoid the risk of trying to modify a literal string.

10 years agoAlways store the arch in lower-case only.
Ingo Schwarze [Sun, 19 Jan 2014 22:41:25 +0000 (22:41 +0000)]
Always store the arch in lower-case only.
Reduces database size by ~0.5%, and by ~1.5% with -Q.

10 years agoGet rid of the local keys table, use the new mansearch_const.c.
Ingo Schwarze [Sun, 19 Jan 2014 01:18:34 +0000 (01:18 +0000)]
Get rid of the local keys table, use the new mansearch_const.c.
No functional change.

10 years agoSupport a second -v on mandocdb(8) to show keys while they are being added;
Ingo Schwarze [Sun, 19 Jan 2014 00:09:38 +0000 (00:09 +0000)]
Support a second -v on mandocdb(8) to show keys while they are being added;
i need that for debugging, in particular to be used with -t.
To be able to do so, provide a global table of key names, for reuse.

11 years agoCope with slightly broken NAME sections in man(7) pages
Ingo Schwarze [Sat, 18 Jan 2014 08:55:17 +0000 (08:55 +0000)]
Cope with slightly broken NAME sections in man(7) pages
having a trailing comma after the last name, like this:

ASN1_OBJECT_new, ASN1_OBJECT_free, - object allocation functions

11 years agoSort the macro keys by their real-world frequency to reduce the average
Ingo Schwarze [Sat, 18 Jan 2014 08:23:55 +0000 (08:23 +0000)]
Sort the macro keys by their real-world frequency to reduce the average
mask size.  No functional change.

This shrinks the standard /usr/share/man database by 7%, now at 10.3x
the size of whatis.db, and with -Q even by 11%, now at 3.0x of whatis.db.
Now i'm out of ideas to easily shrink the size of the database.

11 years agoDrop the AUTOINCREMENT PRIMARY KEYs from the mlinks and keys tables.
Ingo Schwarze [Sat, 18 Jan 2014 08:21:03 +0000 (08:21 +0000)]
Drop the AUTOINCREMENT PRIMARY KEYs from the mlinks and keys tables.
They are completely unused, and i cannot imagine what they *could*
ever be used for; but apparently, they are expensive to generate.

Standard DB build time goes down by 10%, now at 1.9x of makewhatis.
Standard DB size goes down by 4%, now at 11x of makewhatis.
DB build time with -Q goes down by 15%, now at 0.28x of makewhatis.
DB size with -Q goes down by 3%, now at 3.35x of makewhatis.

11 years agoDespite some experimenting, i'm unable to find any relevant effect of
Ingo Schwarze [Sat, 18 Jan 2014 08:19:18 +0000 (08:19 +0000)]
Despite some experimenting, i'm unable to find any relevant effect of
creating an index for the keys table on apropos(1) search times;
apparently, adding that index was premature optimization in the first
place; so, stop adding that index.

Its root gone, the following evil is reduced (/usr/share/man on my notebook)
 - DB build time with -Q goes down by 15%, now at 1/3 of makewhatis
 - DB size with -Q goes down by 35%, now at 3.5x of makewhatis
 - full DB build time goes down by 12%, now at 2.1x of makewhatis
 - full DB size goes down by 42%, now at 11.5x of makewhatis

11 years agoRemove useless use of strnlen(3).
Ingo Schwarze [Sat, 11 Jan 2014 22:16:10 +0000 (22:16 +0000)]
Remove useless use of strnlen(3).
Yuckiness pointed out by deraadt@.

11 years agoCache the result of uname(3) such that we don't need to call it
Ingo Schwarze [Tue, 7 Jan 2014 09:10:45 +0000 (09:10 +0000)]
Cache the result of uname(3) such that we don't need to call it
over and over again for each manual; found with gprof(1).
Speeds up mandocdb(8) -Q by 3%, now at 39.5% of makewhatis(8).

11 years agoGprof(1) is fun. You should use it more often.
Ingo Schwarze [Mon, 6 Jan 2014 23:46:07 +0000 (23:46 +0000)]
Gprof(1) is fun.  You should use it more often.

Another 10% speedup for mandocdb(8) -Q, and even 3% without -Q.
With -Q, we are now at 41% of the time required by makewhatis(8).

Do not copy predefined strings into the dynamic string table, just
leave them in their own static table and use that one as a fallback
at lookup time.  This saves us copying and deleting them for each manual.
No functional change.

11 years agoAnother 18% speedup for mandocdb(8) -Q, found by gprof(1).
Ingo Schwarze [Mon, 6 Jan 2014 22:39:25 +0000 (22:39 +0000)]
Another 18% speedup for mandocdb(8) -Q, found by gprof(1).
In -Q mode, refrain form validating and normalizing the format
of the date given in .Dd or .TH, as it won't be used anyway.

For /usr/share/man, mandocdb -Q now takes 45% of the time of makewhatis(8).

11 years agoAnother 25% speedup for mandocdb(8) -Q mode, found with gprof(1).
Ingo Schwarze [Mon, 6 Jan 2014 21:34:31 +0000 (21:34 +0000)]
Another 25% speedup for mandocdb(8) -Q mode, found with gprof(1).
For /usr/share/man, we only need 56% of the time of makewhatis(8) now.

In groff, user-defined macros clashing with mdoc(7) or man(7)
standard macros are cleared when parsing the .Dd or .TH macro,
respectively.  Of course, we continue doing that in standard mode
to assure full groff bug compatibility.

However, in -Q mode, full groff bug compatibility makes no sense
when it's unreasonably expensive, so skip this step in -Q mode.
Real-world manuals hardly ever redefine standard macros,
that's terrible style, and if they do, it's pointless to do so
before .Dd or .TH because it has no effect.  Even if someone does,
it's extremely unlikely to break mandocdb(8) -Q parsing because we
abort the parse sequence after the NAME section, anyway.

So if you manually redefine .Sh, .Nm, .Nd, or .SH in a way that doesn't
work at all and rely on .Dd or .TH to fix it up for you, your broken
manual will no longer get a perfect apropos(1) entry until you re-run
mandocdb(8) without -Q.  It think that consequence is acceptable
in order to get a 25% speedup for everyone else.

11 years agoDo not sync to disk after each individual manual page (duh!),
Ingo Schwarze [Mon, 6 Jan 2014 20:53:40 +0000 (20:53 +0000)]
Do not sync to disk after each individual manual page (duh!),
only sync to disk one single time when all data is ready.

Rebuild times for /usr/share/man/mandoc.db shrink on my notebook:
In standard mode from 45 seconds to 11 seconds   (75% reduction)
In -Q mode       from 25 seconds to 3.1 seconds  (87% reduction)
For comparison: makewhatis(8):      4.2 seconds

That is, in -Q mode, we are now *faster* than the existing makewhatis(8),
and careful profiling shows there is still a lot of room for improval.

11 years agoFix mandocdb(8) -d and -u.
Ingo Schwarze [Mon, 6 Jan 2014 15:32:47 +0000 (15:32 +0000)]
Fix mandocdb(8) -d and -u.
It was broken by recent optimizations.

11 years agoRename dbindex() to dbadd() to be less confusing.
Ingo Schwarze [Mon, 6 Jan 2014 13:54:17 +0000 (13:54 +0000)]
Rename dbindex() to dbadd() to be less confusing.
The concept of an index file is gone since the switch to SQLite.
No functional change.

11 years agoRemove the redundant "file" column from the "mlinks" table.
Ingo Schwarze [Mon, 6 Jan 2014 03:52:13 +0000 (03:52 +0000)]
Remove the redundant "file" column from the "mlinks" table.
The contents can easily be reconstructed from sec, arch, name, form.
Shrinks the database by another 3% in standard mode and 9% in -Q mode.

11 years agoDrop Nd from the mpages table, it is still in the keys table.
Ingo Schwarze [Mon, 6 Jan 2014 03:02:46 +0000 (03:02 +0000)]
Drop Nd from the mpages table, it is still in the keys table.
This shrinks the database in standard mode by 3%, in -Q mode by 9%,
without loss of functionality.

11 years agoJoerg Sonnenberger contributed copyrightable amounts of text to
Ingo Schwarze [Mon, 6 Jan 2014 00:53:33 +0000 (00:53 +0000)]
Joerg Sonnenberger contributed copyrightable amounts of text to
some files.  To make it clear that he also put his contributions
under the ISC license, with his explicit permission, add his
Copyright notice to the relevant files.  No code change.

11 years agoCope with mparse_alloc() interface change.
Ingo Schwarze [Sun, 5 Jan 2014 20:41:04 +0000 (20:41 +0000)]
Cope with mparse_alloc() interface change.

11 years agoAdd an option -Q (quick) to mandocdb(8)
Ingo Schwarze [Sun, 5 Jan 2014 20:26:36 +0000 (20:26 +0000)]
Add an option -Q (quick) to mandocdb(8)
for accelerated generation of reduced-size databases.

Implement this by allowing the parsers to optionally
abort the parse sequence after the NAME section.

While here, garbage collect the unused void *arg attribute of
struct mparse and mparse_alloc() and fix some errors in mandoc(3).

This reduces the processing time of mandocdb(8) on /usr/share/man
by a factor of 2 and the database size by a factor of 4.
However, it still takes 5 times the time and 6 times the space
of makewhatis(8), so more work is clearly needed.

11 years agoTag functions with format strings as arguments as printf-like.
Joerg Sonnenberger [Sun, 5 Jan 2014 19:10:56 +0000 (19:10 +0000)]
Tag functions with format strings as arguments as printf-like.
Fix one case where a non-literal is used as format string.
Fix another case where a variable is formatted using the wrong type.

11 years agoMerge NetBSD's r1.4: Rename data to getdata to work around bugs in the
Joerg Sonnenberger [Sun, 5 Jan 2014 18:37:53 +0000 (18:37 +0000)]
Merge NetBSD's r1.4: Rename data to getdata to work around bugs in the
PPC64 toolchain.

11 years agoRip out the complete "reachable" checks, without replacement.
Ingo Schwarze [Sun, 5 Jan 2014 04:48:40 +0000 (04:48 +0000)]
Rip out the complete "reachable" checks, without replacement.
It's a pity i spent time during t2k13 writing this; however,
when an entire concept is busted, let us not look back,

There is no such thing as an unreachable page.  Even if you are crazy
enough to put a page starting with ".Dt NAMEI 9" into a file man1/cat.1,
we now make sure that it can be found by all of the following:
Nm=namei Nm=cat sec=1 sec=9
It will always be displayed as:
cat(1) - pathname lookup
So you know that you have to type `man cat` to get at it.
That obsoletes the concept of "unreachable manuals" for good.

11 years agoRemove the obsolete file name column from the mpages table.
Ingo Schwarze [Sun, 5 Jan 2014 04:13:52 +0000 (04:13 +0000)]
Remove the obsolete file name column from the mpages table.
This column wasn't helpful because one manpage can have multiple MLINKS.
Use the file name column in the mlinks table, instead.

11 years agoRemove the obsolete sec and arch columns from the mpages table.
Ingo Schwarze [Sun, 5 Jan 2014 03:25:51 +0000 (03:25 +0000)]
Remove the obsolete sec and arch columns from the mpages table.
They were confusing because a manpage can have MLINKS in different
sections and architectures.

11 years agoReimplement apropos -s NUM -S ARCH EXPR by internally converting it to
Ingo Schwarze [Sun, 5 Jan 2014 03:06:43 +0000 (03:06 +0000)]
Reimplement apropos -s NUM -S ARCH EXPR by internally converting it to
apropos \( EXPR \) -a 'sec~^NUM$' -a 'arch~^(ARCH|any)$'
in preparation for removal of sec and arch from the mpage table.

Almost no functional change except for the following bonus:
This also makes sure that for cross-section and cross-arch MLINKs,
all of the following work:
apropos -s 1 encrypt
apropos -s 8 encrypt
apropos -s 1 makekey
apropos -s 8 makekey

While here, print error messages about invalid regexps to stderr.

11 years agoPut section and architecture info into the keys table,
Ingo Schwarze [Sun, 5 Jan 2014 00:29:54 +0000 (00:29 +0000)]
Put section and architecture info into the keys table,
in preparation for removing them from the mpages table,
aiming for cleaner and more uniform interfaces.
Database growth is below 4%, part of which will be reclaimed.

As a bonus, this allows searches like:
./obj/apropos An=kettenis -a arch=ppc
./obj/apropos An=kettenis -a sec~[^4]

11 years agoNew implementation of complex search criteria using \(, \), -a because
Ingo Schwarze [Sat, 4 Jan 2014 23:43:53 +0000 (23:43 +0000)]
New implementation of complex search criteria using \(, \), -a because
the old implementation got lost in the Berkeley to SQLite switch.
Note that this is not just feature creep, but required for upcoming
database format cleanup and simplification.

11 years agoPut mansearch.{h,c}, manpage.c, and compat_ohash.{h,c}
Ingo Schwarze [Sat, 4 Jan 2014 15:00:02 +0000 (15:00 +0000)]
Put mansearch.{h,c}, manpage.c, and compat_ohash.{h,c}
into the distribution tarball.  Bump VERSION.

11 years agoPut ./configure into the distributin tarball.
Ingo Schwarze [Sat, 4 Jan 2014 14:45:54 +0000 (14:45 +0000)]
Put ./configure into the distributin tarball.

11 years agoUse C99 uint32_t, not BSD-style u_int32_t.
Ingo Schwarze [Sat, 4 Jan 2014 14:09:28 +0000 (14:09 +0000)]
Use C99 uint32_t, not BSD-style u_int32_t.
Needed for Solaris 10 as reported by Matthias Scheler.

11 years agoEven though strnlen(3) is required by POSIX 2008,
Ingo Schwarze [Sat, 4 Jan 2014 13:40:01 +0000 (13:40 +0000)]
Even though strnlen(3) is required by POSIX 2008,
Matthias Scheler reports than Solaris 10 lacks it.
While here, sort the declarations in config.h
and move the headers to the top.

11 years agoClean up feature tests:
Ingo Schwarze [Sat, 4 Jan 2014 01:11:00 +0000 (01:11 +0000)]
Clean up feature tests:
* Split the configure steering script out of the Makefile.
* Let the configure step depend on the test sources.
* Clean up the test programs such that they can be run.

11 years agoAvoid "utf8" in the names of a function and a struct member
Ingo Schwarze [Thu, 2 Jan 2014 22:44:10 +0000 (22:44 +0000)]
Avoid "utf8" in the names of a function and a struct member
that don't necessarily have anything to do with UTF-8.
Just renaming, no functional change.

11 years agoDo not put UTF-8-encoded strings into the database by default, use ASCII.
Ingo Schwarze [Thu, 2 Jan 2014 22:19:41 +0000 (22:19 +0000)]
Do not put UTF-8-encoded strings into the database by default, use ASCII.
Just like for mandoc(1), provide a -Tutf8 option for people who want that.