summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc/mandocdb.c
AgeCommit message (Collapse)Author
2015-01-15Fatal errors no longer exist.Ingo Schwarze
If a file can be opened, mandoc will produce some output; at worst, the output may be almost empty. Simplifies error handling and frees a message type for future use.
2015-01-03Fix a potential NULL pointer access in an error message after waitpid()Ingo Schwarze
failure; found using detailed information provided by Ulrich Spoerlein <uqs at FreeBSD> about FreeBSD Coverity CID 1261304.
2015-01-02Explicitly set the *data member of struct ohash_info to NULL.Ingo Schwarze
It is never dereferenced, but it gets copied around, which worries static analysis tools and might also confuse human auditors. FreeBSD Coverity CID 1261298, 1261299, 1261300, reported by Pedro Giffuni and Ulrich Spörlein <pfg@ and uqs@ at FreeBSD>.
2014-12-30When a file is given on the command line, actually exists, and its nameIngo Schwarze
relative to the respective manual tree is longer than PATH_MAX, do not leak the memory allocated to hold the name. Not sure that can actually happen, but better safe than sorry. FreeBSD Coverity Scan CID 1261303, reported by Pedro Giffuni <pfg@>.
2014-12-05Improve parsing of function names.Ingo Schwarze
This gets rid of the last bogus entries in base and Xenocara.
2014-12-05Do not misinterpret function arguments as function names;Ingo Schwarze
improves semantic analysis of more than 300 manuals.
2014-12-05Render text before, not after accumulating flag bits, such that flagsIngo Schwarze
for different representations of the same string end up in the same database entry. Improves name classification for 500 manuals.
2014-12-04When finding a .so link after the page was already processed,Ingo Schwarze
do not clobber the existing names flags; instead, OR the additional flags into them.
2014-12-04correctly store .Dt and .TH information in the names tableIngo Schwarze
2014-12-04in the SYNOPSIS, add .Fo and first .Fn arguments to the names tableIngo Schwarze
2014-12-04In the SYNOPSIS, if .Nm occurs without argument, give the first .NmIngo Schwarze
that occurred in the document a NAME_SYN entry in the names table.
2014-11-27Make makewhatis(8) understand .so links to .gz pages.Ingo Schwarze
Drop the FORM_GZ annotation in the mpages table; it is conceptually wrong because it ought to be in the mlinks table: An uncompressed .so link file can point to a compressed manual page file and vice versa. Besides, it is no longer needed because mparse_open() handles it all. Sprinkle some KNF while here.
2014-11-26Simplify the mparse_open()/mparse_wait() interface.Ingo Schwarze
Don't bother the user with the PID of the child process, store it inside the opaque mparse handle.
2014-11-19Three fixes with respect to the names table:Ingo Schwarze
1. Do not mask out NAME_FIRST before its first use. 2. Avoid duplicate NAME_FILE entries. 3. Correctly mask NAME_FILE for .so links.
2014-10-28Make the character table available to libroff so it can check theIngo Schwarze
validity of character escape names and warn about unknown ones. This requires mchars_spec2cp() to report unknown names again. Fortunately, that doesn't require changing the calling code because according to groff, invalid character escapes should not produce output anyway, and now that we warn about them, that's fine.
2014-10-27Fix a regression in term.c rev. 1.89 reported by bentley@:Ingo Schwarze
In UTF-8 output, do not print anything if mchars_spec2cp() returns 0. In particular, this repairs handling of zero-width spaces (\&). While here, let mchars_spec2cp() return 0xFFFD instead of -1 if the character is not found, simplifying the using code. In HTML output, do not print obfuscated ASCII characters and do not test for one-char escapes, mchars_spec2cp() already does that.
2014-10-12add missing entry for .ll to the dispatch table;Ingo Schwarze
patch from Martin <Natano at natano dot net>, thanks
2014-09-09If a manpath directory (for example, a _whatdb entry from man.conf(5)Ingo Schwarze
or an entry in the MANPATH environment variable) does not exist, silently skip it. This brings makewhatis(8) back closer to the behaviour of espie@'s version and ought to shut up the weekly(8) whining observed by henning@ on machines not having xbase installed. Also, don't error out after the first unusable manpath entry, still try the others. Of course, still complain about non-existent directories specified on the command line and about any directories failing for other reasons than ENOENT.
2014-09-07Do not report a page as arch=any merely because .Dt lacks the third argument.Ingo Schwarze
Pages found outside arch-specific dirs still get arch=any, of course. Issue reported by justinhenryhaynes at gmail dot com on misc@, thanks!
2014-09-07fix debugging outputIngo Schwarze
2014-09-03Add *.gz support to apropos(1) -a, manm(1), and even mandoc(1).Ingo Schwarze
Implemented by moving the zip code from makewhatis(8) to the parser lib.
2014-09-03If a manual page is installed gzip(1)ed, let makewhatis(8) takeIngo Schwarze
note in mandoc.db(5), such that man(1) -w and apropos(1) -w can report the correct filename. This is a prerequisite for letting apropos -a and man support gzip'ed manuals in the future, which doesn't work yet.
2014-09-01When makewhatis(8) finds an .so link after the manual being pointed toIngo Schwarze
has already been processed, add the file names to the names table, too, not just to the mlinks table. This fixes a bug where apropos(1) and the new man(1) wouldn't find some of the Xenocara manuals via some of their .so links. After rebuilding, run "makewhatis /usr/X11R6/man" or just wait for weekly(8).
2014-08-23Fix fd leak when fdopen fails.doug
ok schwarze@
2014-08-08Absurdly, the return value of sqlite3_column_text()Ingo Schwarze
is "const unsigned char *", which causes warnings with GCC on Linux. Explicitly cast to "const char *" to avoid this. Issue noticed by kristaps@.
2014-08-08Bring the handling of defective prologues even closer to groff,Ingo Schwarze
in particular relaxing the distinction between prologue and body and further improving messages. * The last .Dd wins and the last .Os wins, even in the body. * The last .Dt before the first body macro wins. * Missing title in .Dt defaults to UNTITLED. Warn about it. * Missing section in .Dt does not default to 1. But warn about it. * Do not warn multiple times about the same mdoc(7) prologue macro. * Warn about missing .Os. * Incomplete .TH defaults to empty strings. Warn about it.
2014-06-21Prefix messages about bad command line options and argumentsIngo Schwarze
with "mandoc: " or "makewhatis: ", respectively, similar to what we already do for other messages.
2014-06-20More tweaking of set_basedir().Ingo Schwarze
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().
2014-06-19Some simple set_basedir() cleanup; more to come.Ingo Schwarze
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@.
2014-06-18Don't display "unable to open mandoc.db" error messages (SQLITE_CANTOPEN)Stuart Henderson
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). ok schwarze@
2014-06-05work-around issue in makewhatis, that expects its current dir to NOT be /.Marc Espie
okay aja@, miod@ until Ingo figures things out. (This fixes the ///sr/ports/pobj/p5-YAML-0.84/fake-amd64/usr/local/man/man3p/YAML::Loader::Base.3p: fopen: No such file or directory style errors)
2014-05-12adjust to ohash being in libutil now, and to the interface changes.Marc Espie
fix potential integer overflows in memory allocation (mostly for pedagogical purposes, these are unlikely to overflow in practice) move the rest of lst.lib stuff into its own directory.
2014-05-07Render roff escape sequences contained in manual page descriptionsIngo Schwarze
before putting them into the mpages table. Issue found by bentley@ in OpenBSD::Getopt(3p).
2014-05-07Fix two memory leaks in makewhatis -n:Ingo Schwarze
1. As found by nigel@, names_check() requires database access. 2. Do not leak names and strings in -n mode.
2014-04-27Improve error handling in dbopen(). If PRAGMA SQL statements fail,Ingo Schwarze
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.
2014-04-25Reduce the verbosity of makewhatis -t:Ingo Schwarze
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@.
2014-04-23Audit malloc(3)/calloc(3)/realloc(3) usage.Ingo Schwarze
* 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).
2014-04-23Audit strlcpy(3)/strlcat(3) usage:Ingo Schwarze
* 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).
2014-04-23improve SQL style: avoid "SELECT *", be explicit in what columns we want;Ingo Schwarze
suggested by espie@.
2014-04-20KNF: case (FOO): -> case FOO, remove /* LINTED */ and /* ARGSUSED */,Ingo Schwarze
remove trailing whitespace and blanks before tabs, improve some indenting; no functional change
2014-04-19Two minor tweaks regarding the fallback from -u/-d to default mode:Ingo Schwarze
(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.
2014-04-19Properly handle symlinks (hardlinks and .so only files were already ok):Ingo Schwarze
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!
2014-04-18In update mode, when opening the database fails, probably because it isIngo Schwarze
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@.
2014-04-16Rename the mpages.id column to mpages.pageid. There is no good reasonIngo Schwarze
to call this kid by a different name here than in all other tables. Easier to polish this now than after enabling.
2014-04-16Give the mlinks and keys tables a pageid index,Ingo Schwarze
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~." by more 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.
2014-04-13Unify description handling across all document types (mdoc, man, cat).Ingo Schwarze
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.
2014-04-13better error reporting in case of SQL errors: mention dir and fileIngo Schwarze
2014-04-10Next speed optimization step for the new apropos(1).Ingo Schwarze
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%).
2014-04-09After careful gprof(1)ing of the new apropos(1), move the descriptionsIngo Schwarze
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).
2014-04-04In -p (picky) mode, warn unless each filename (aka mlink)Ingo Schwarze
appears as a name in the NAME section. While here, garbage collect two unused variables, both called "match".