summaryrefslogtreecommitdiffstats
path: root/mandocdb.c
Commit message (Collapse)AuthorAgeFilesLines
...
* Re-tooled mandocdb using sqlite3 and ohash.Kristaps Dzonsons2012-06-081-1319/+1401
| | | | | | | | | | See the tech@ mailing list entries in June 2012 for details, as well as the discuss@ mailing list entries from March 2012. Among other changes, this utility now: 1. uses a single sqlite3 database instead of several berkeley dbs 2. stores utf-8 encoded strings 3. using ohash to aggressively hash its contents 4. using fts() instead of manually walking directories
* Support -Ios='OpenBSD 5.1' to override uname(3) as the source of theIngo Schwarze2012-05-271-1/+1
| | | | | | | | | | default value for the mdoc(7) .Os macro. Needed for man.cgi on the OpenBSD website. Problem with man.cgi first noticed by deraadt@; beck@ and deraadt@ agree with the way to solve the issue. "Please check them in and I'll look into them later!" kristaps@
* update Copyright years according to the CVS logs; no code changeIngo Schwarze2012-05-271-2/+2
|
* Being reluctant to add yet more trailing whitespace, i rather backIngo Schwarze2012-04-151-8/+8
| | | | it out here than merge it to OpenBSD. No binary change.
* Improve mandocdb's ability to handle NAME sections by sucking the entireKristaps Dzonsons2012-03-231-9/+57
| | | | | shebang into a buffer and parsing it that way. This improves on many cruddy -man manuals in the wild.
* Clean up code a bit by pushing warnings into WARNING macro.Kristaps Dzonsons2012-03-231-63/+48
|
* Merge some/most of schwarze@'s OpenBSD changes into mandoc: many moreKristaps Dzonsons2012-03-231-116/+158
| | | | | | | | | | | | | | | warnings about grokking manpages in their respective directories. DO NOT, however, import his temporary-file routines (I don't plan on staying with a recno/btree split) nor the realpath() routines, which destroy relative path-ness. Also pull in the lorder bits. There are some changes I started to make then stopped relating to reporting errors in the correct directories. I'll clean this up in subsequent commits. This puts us more or less on parity with OpenBSD.
* When parsing catpages, read from the first section (NAME, we hope) untilKristaps Dzonsons2011-12-311-15/+43
| | | | | the next section. Also, remove the limit of 72 characters and enforce this, instead in the apropos frontend.
* Do not skip manuals shared across architectures when building databases.Ingo Schwarze2011-12-281-3/+18
|
* First memory leak in mandocdb.c freeing "struct of". Also properlyKristaps Dzonsons2011-12-251-2/+7
| | | | const-ify several strings.
* Use the traditional name "whatis.db" for the mandocdb(8) databases.Ingo Schwarze2011-12-251-1/+1
| | | | Requested by deraadt@, ok kristaps@.
* For binary compatability of the databases across architectures,Ingo Schwarze2011-12-251-8/+8
| | | | | | | use pointers to arrays, not pointers to structs. It is now possible to create databases on sparc64 and use them on i386 and vice versa. Kristaps@ can't think of anything else that might be required, either. Put this in now such that we can move on.
* Implement test mode (makewhatis -t), required for pkg_create(8).Ingo Schwarze2011-12-251-212/+328
| | | | | | | | | | | | Always do all consistency checks; when any one fails, decide whether to print a message, or skip the file, or both, or none. While here, do some cleanup as well: * Bail out on conflicting options. * Do not crash with -a if there are plain files in the root dir. * Collect some related variables into structs. Feedback and OK kristaps@.
* Do not cast void pointers to pointers requiring alignment.Ingo Schwarze2011-12-201-4/+12
| | | | | | | | | This makes mandocdb(8)/apropos(1) work on strict alignment architectures. Basic way to fix this confirmed by deraadt@ and kettenis@, thanks. ok kristaps@ This now works on both sparc64 and i386, but note that the binary database format is still machine-dependent.
* Make the stored "cat"/"mdoc"/"man" strings just be c/d/a single-characterKristaps Dzonsons2011-12-161-8/+6
| | | | | bytes. This cuts down a little in index size and allows for cleaner extraction of information.
* Make paths in the mandocdb(8) index relative to the databases' pathKristaps Dzonsons2011-12-161-42/+34
| | | | | | | prefix. This means that an index in, say, /usr/share/man will point to man1/foo.1 instead of /usr/share/man/man1/foo.1. Not only does this save a lot of space, it also allows manual trees to be moved around without any side effects to the mandocdb(8) databases.
* implement -C (alternative config file) for apropos(1) and mandocdb(8),Ingo Schwarze2011-12-121-5/+11
| | | | | including various tweaks to the whatis(8) manual; ok kristaps@
* Avoid leaking index records:Ingo Schwarze2011-12-101-20/+24
| | | | | Before allocating a record for a file, first make sure we actually want to use the file.
* Fix selection of arch-specific manuals:Ingo Schwarze2011-12-101-2/+6
| | | | | | (1) Correctly compare cat vs. man paths. (2) Compare arch (and section) names case-insensitively. Problem noticed by kristaps@.
* Tweak pformatted():Ingo Schwarze2011-12-091-12/+13
| | | | | | | * If the first section is empty, use the file name as .Nd. * No need to check (len > 0) after successful fgetln(3). * Improve some comments and strip trailing whitespace. ok kristaps@
* Considerably tidy mandocdb(8) catman descriptions by skipping to the firstKristaps Dzonsons2011-12-091-2/+2
| | | | hyphen-space combo, not the last hyphen as done previously.
* Strip backspace encoding from preformatted manuals. This cleans up a lotKristaps Dzonsons2011-12-091-0/+12
| | | | of catpage entries in the mandoc databases.
* Clean up grok of preformatted manual description.Kristaps Dzonsons2011-12-081-28/+35
| | | | | | (1) put fclose() at the end, as line isn't valid afterward (see fgetln()) (2) clean up loops to be more readable to my old eyes (3) mandate trailing newline, nul-terminate, and use strrchr
* index_prune always counted the free slots,Ingo Schwarze2011-12-081-9/+9
| | | | but didn't tell anybody about them, so they weren't reused
* If arguments are passed to mandocdb(8) in "default" mode, then useKristaps Dzonsons2011-12-081-4/+11
| | | | | realpath() to convert them into absolute paths before putting the traversed subdirectory filenames into the index.
* Implement search support for 24 additional macros, extract more informationIngo Schwarze2011-12-071-299/+252
| | | | | | from Fn, and lift section restrictions from An Cd Er Ev Fn Fo In Pa St Va Vt by removing 4 handler functions and 50 lines of code. ok kristaps@
* Fix parsing of file names given on the command line; i broke itIngo Schwarze2011-12-041-4/+3
| | | | when adding support for formatted manual pages.
* Back out lorder, which doesn't seem necessary (?). I think this means allKristaps Dzonsons2011-12-031-1/+0
| | | | fields are endian-neutral, although the recno(3) key is unknown.
* Make sure the btree(3) goop is also BE. This covers both the DB metadataKristaps Dzonsons2011-12-031-0/+1
| | | | and prior commits handle the contained binary fields.
* This is a little gross: Linux and Apple need lots some cajoling to workKristaps Dzonsons2011-12-021-1/+5
| | | | | | | | with byte-swapping. Tested on Mac. Any Linux machines somebody can test on? Anybody? While here, note the correct byte-size in mandocdb(8) and also note field widths and endianness. The btree is now endian-neutral.
* Use OpenBSD's endian functions. Make btree type also be endian-neutral.Kristaps Dzonsons2011-12-011-5/+3
|
* In apropos_db.c, move all btree reading (and safety checks) into theKristaps Dzonsons2011-12-011-4/+4
| | | | | | | | btree_read() function. Also, add a forgotten free() for the type of grokked record. Then in both mandocdb.c and apropos_db.c, make the "rec" field of the btree by in network-order.
* Fix mandocdb(8) to pass over the type when pruning the database. ThisKristaps Dzonsons2011-12-011-25/+53
| | | | | | fixed `-d' perpetually adding the same files. While here, clean up the code and document it. Remove -vv (complain if you want it back in). Document the error messages in a DIAGNOSTICS section of mandocdb(8).
* chdir(2) to the right man page tree before parsing manuals;Ingo Schwarze2011-11-291-1/+17
| | | | ok kristaps@
* Reimplement the global command line options -a and -vIngo Schwarze2011-11-271-26/+20
| | | | | | as static global variables, reducing the maze of arguments passed around among various static functions. Suggested by kristaps@.
* Save the manual type (mdoc, man, or cat) in the index fileIngo Schwarze2011-11-271-0/+1
| | | | | | | | of the mandoc databases, as suggested by kristaps@. Given the well-structured code, this is surprisingly simple. This changes the mandoc.index database format. Run "sudo mandocdb" to regenerate your databases.
* Rudimentary handling of formatted manuals ("cat pages").Ingo Schwarze2011-11-271-30/+205
| | | | | Coded on the train back from p2k11 in Budapest. Kristaps has seen the patch and agreed with the direction.
* Sync to OpenBSD, mostly gratuitous and whitespace differences,Ingo Schwarze2011-11-261-4/+9
| | | | | | | | | but a few serious things as well: * -M overrides MANPATH * -m prepends to the path * put back database close calls that got lost in mandocdb * missing sys/types.h in manpath.c, needed for size_t ok kristaps@
* Store page titles in the correct case, and by default, onlyIngo Schwarze2011-11-261-37/+189
| | | | | | put stuff into the database that man(1) will be able to retrieve. However, support an option to use all directories and files. feedback and ok kristaps@
* I say that mandocdb(8) uses "man(1)'s method", but it doesn't. It just usesKristaps Dzonsons2011-11-241-1/+1
| | | | | the configuration file and ignores MANPATH. Everybody else uses MANPATH (being apropos and man), so why shouldn't we?
* Have mandocdb(8) take advantage of manpath.h.Kristaps Dzonsons2011-11-231-5/+25
| | | | | This brings it in line with makewhatis(8), which, like apropos(1), will use man.conf (or manpath(1)) if no manpath entries are provided.
* Merge schwarze@'s work for 64-bit types. This is based on a tweaked patchKristaps Dzonsons2011-11-201-13/+13
| | | | | | | submitted to tech@ on 16/11/2011, 01:39. It has been updated to account for the logical-operator functions and to avoid keeping a live pointer into the DBT value, which is not guaranteed to be consistent across calls into the bdb library.
* Inventing new keywords for mostly the same thing when a well-establishedIngo Schwarze2011-11-131-35/+18
| | | | | | | | | | set of keywords already exists is a bad idea, so reuse the mdoc(7) macro names as apropos(1) search types. This is a gain in brevity as well. Some time ago, kristaps@ agreed in principle. The search type bit field constants are used by both mandocdb(8) and apropos(1) and should better stay in sync, so give them their own header file.
* Fix two crashes that occur when walking very large (i.e. real-world) trees:Ingo Schwarze2011-11-131-4/+4
| | | | | | 1) Avoid excessive, needless recursion, lest you overflow the stack; 2) Close all dir file descriptors, lest you run out of descriptors. ok kristaps@
* fix an obvious typo: sz was used uninitializedIngo Schwarze2011-09-171-1/+1
| | | | found while merging to OpenBSD
* Big step forward in bringing mandocdb in line with most makewhatis-typeKristaps Dzonsons2011-07-151-54/+184
| | | | systems.
* First step of making mandocdb a true makewhatis/mandb replacement:Kristaps Dzonsons2011-07-151-95/+115
| | | | | | | accept a set of directories on the command line ("manpaths") that are recursed for files. The databases are created in each manpath root. This temporarily removes OP_UPDATE and OP_DELETE functionality, which will be added back in.
* Move parts of mandocdb that "do stuff" to the databases into their ownKristaps Dzonsons2011-07-151-125/+173
| | | | | functions. This will make it easier to call repeatedly (for different directoreis) as must be done with the new interfaces being developed.
* move mandocdb(1) to mandocdb(8)Ingo Schwarze2011-07-141-1/+1
| | | | "please make this change" kristaps@
* Rename makewhatis [back] into mandocdb. This is to maintain consistencyKristaps Dzonsons2011-07-141-0/+1105
with OpenBSD, which is sandboxing the code for merge. It makes sense because it doesn't really make a `makewhatis' file in the traditional sense, so it may be confusing.