aboutsummaryrefslogtreecommitdiffstatshomepage
Commit message (Collapse)AuthorAgeFilesLines
* let the build system cope with the recent ohash changesIngo Schwarze2014-06-203-8/+14
|
* take a note about pandocIngo Schwarze2014-06-201-1/+5
|
* Merge from OpenBSD - Marc Espie improved the ohash interface:Ingo Schwarze2014-06-204-36/+38
| | | | | | * 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
* sync to OpenBSD:Ingo Schwarze2014-06-202-53/+52
| | | | whitespace and comment changes, no functional change
* More tweaking of set_basedir().Ingo Schwarze2014-06-201-24/+40
| | | | | | | | | | | | 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().
* Some simple set_basedir() cleanup; more to come.Ingo Schwarze2014-06-191-17/+21
| | | | | | | | | | | | | | 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@.
* Merge OpenBSD rev. 1.108 by sthen@; original commit message:Ingo Schwarze2014-06-181-2/+3
| | | | | | 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).
* some new things to doIngo Schwarze2014-06-101-1/+19
|
* Render roff escape sequences contained in manual page descriptionsIngo Schwarze2014-05-071-2/+11
| | | | | before putting them into the mpages table. Issue found by bentley@ in OpenBSD::Getopt(3p).
* Fix two memory leaks in makewhatis -n:Ingo Schwarze2014-05-071-2/+14
| | | | | 1. As found by nigel@, names_check() requires database access. 2. Do not leak names and strings in -n mode.
* Do not segfault in makewhatis -Q if the next .SH after .SH NAMEIngo Schwarze2014-05-071-4/+7
| | | | does not have any arguments. Crash found by nigel@ in kermit(1).
* Improve error handling in dbopen(). If PRAGMA SQL statements fail,Ingo Schwarze2014-04-271-7/+22
| | | | | | | | | | | | | 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.
* OMRON used uppercase for the model names of their Motorola 88100 LUNAIngo Schwarze2014-04-271-3/+3
| | | | | | workstations, so show the kernel architecture names in uppercase to the user, too. Based on a patch from Kenji Aoyama@, thanks!
* Fix a minor optimization i broke in rev. 1.163 on August 20, 2010:Ingo Schwarze2014-04-251-2/+2
| | | | | | 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!
* Reduce the verbosity of makewhatis -t:Ingo Schwarze2014-04-252-4/+6
| | | | | | | | 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@.
* Various Makefile improvements:Ingo Schwarze2014-04-241-20/+43
| | | | | | | | * 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.
* misplaced punctuationIngo Schwarze2014-04-241-4/+4
|
* prototype for reallocarray()Ingo Schwarze2014-04-231-0/+3
|
* Audit malloc(3)/calloc(3)/realloc(3) usage.Ingo Schwarze2014-04-231-5/+4
| | | | First committed to wrong branch, sorry.
* Audit malloc(3)/calloc(3)/realloc(3) usage.Ingo Schwarze2014-04-2315-40/+104
| | | | | | | * 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).
* Audit strlcpy(3)/strlcat(3) usage:Ingo Schwarze2014-04-231-23/+23
| | | | | | * 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).
* espie@ suggests using SQL viewsIngo Schwarze2014-04-231-1/+7
|
* improve SQL style: avoid "SELECT *", be explicit in what columns we want;Ingo Schwarze2014-04-232-7/+10
| | | | suggested by espie@.
* Audit strlcpy(3)/strlcat(3) usage.Ingo Schwarze2014-04-239-103/+86
| | | | | | | | | | | | | * 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.
* add a LICENSE file for clarity and for the convenience of portersIngo Schwarze2014-04-222-1/+45
|
* in debug messages, truncating strings of excessive lengths is actuallyIngo Schwarze2014-04-201-2/+2
| | | | | a good thing, so cast the return value from sprintf to (void); this concludes the mandoc sprintf audit
* strlen+malloc+snprintf is error prone;Ingo Schwarze2014-04-201-23/+14
| | | | rewrite post_lb() to use asprintf(3) instead
* fix unchecked snprintf(3) in page header printing:Ingo Schwarze2014-04-204-22/+37
| | | | | the length of the title is unknown, and speed doesn't matter here, so use asprintf/free rather than a static buffer
* make sure static buffers for snprintf(3) are large enoughIngo Schwarze2014-04-205-22/+21
| | | | and cast snprintf return value to (void) where they are
* KNF: case (FOO): -> case FOO:, remove /* LINTED */ and /* ARGSUSED */,Ingo Schwarze2014-04-2052-2546/+2037
| | | | | remove trailing whitespace and blanks before tabs, improve some indenting; no functional change
* Two minor tweaks regarding the fallback from -u/-d to default mode:Ingo Schwarze2014-04-191-7/+9
| | | | | | | (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.
* Properly handle symlinks (hardlinks and .so only files were already ok):Ingo Schwarze2014-04-191-17/+76
| | | | | | | | 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!
* In update mode, when opening the database fails, probably because it isIngo Schwarze2014-04-181-8/+18
| | | | | | | | 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@.
* Slowly, the dust begins to settle.Ingo Schwarze2014-04-184-26/+26
| | | | | We are keeping the traditional name makewhatis(8). No content change.
* Fix a few lies; polish wording and formatting while here.Ingo Schwarze2014-04-181-25/+32
|
* Garbage collect one pair of needless parentheses in SQL code generation;Ingo Schwarze2014-04-171-8/+8
| | | | | note this doesn't affect performance, SQLite generates the same byte code. While here, make the calls to exprspec() easier to understand.
* Rename the mpages.id column to mpages.pageid. There is no good reasonIngo Schwarze2014-04-162-30/+30
| | | | to call this kid by a different name here than in all other tables.
* Give the mlinks and keys tables a pageid index,Ingo Schwarze2014-04-161-2/+4
| | | | | | | | | | | | | | | | 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.
* Pass the function flags SQLITE_UTF8 (because SQLITE_ANY is deprecated)Ingo Schwarze2014-04-161-3/+5
| | | | | | and SQLITE_DETERMINISTIC when creating deterministic functions; best practice measure suggested by espie@ and jeremy@; as expected by jeremy@, no measurable effect on performance.
* Oops, sorry, revert previous and commit the correct patch:Ingo Schwarze2014-04-151-5/+7
| | | | At the end of mansearch(), fchdir() back to where we started from.
* At the end of mansearch(), fchdir() back to where we started from;Ingo Schwarze2014-04-151-1/+2
| | | | | this is cleaner and helps to not scatter gmon.out files all over the place when profiling.
* remove documentation of the former macro key "NAME";Ingo Schwarze2014-04-151-3/+2
| | | | it got deleted with mansearch.h rev. 1.12
* Document the database format and SQL code generation;Ingo Schwarze2014-04-153-4/+383
| | | | suggested by kristaps@ and espie@.
* Using macros in .Sh header lines, or having .Sm off or .Bk -words openIngo Schwarze2014-04-151-12/+8
| | | | | | | | | 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.
* Unify description handling across all document types (mdoc, man, cat).Ingo Schwarze2014-04-131-9/+4
| | | | | | | | 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.
* better error reporting in case of SQL errors: mention dir and fileIngo Schwarze2014-04-131-9/+9
|
* Further apropos(1) speed optimization was trickier than anticipated.Ingo Schwarze2014-04-113-3/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Next speed optimization step for the new apropos(1).Ingo Schwarze2014-04-104-92/+148
| | | | | | | | | | | | | | 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%).
* After careful gprof(1)ing of the new apropos(1), move the descriptionsIngo Schwarze2014-04-094-81/+99
| | | | | | | | | | | | 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).
* Add a new term_flushln() flag TERMP_BRIND (if break, then indent)Ingo Schwarze2014-04-084-51/+46
| | | | | | | | | | 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%.