From: Ingo Schwarze <schwarze@usta.de>
To: tech@mdocml.bsd.lv
Subject: Re: mandocdb: do not use bogus files
Date: Tue, 15 Nov 2011 00:34:03 +0100 [thread overview]
Message-ID: <20111114233403.GL27815@iris.usta.de> (raw)
In-Reply-To: <4EC174F1.70902@bsd.lv>
Hi Kristaps,
Kristaps Dzonsons wrote on Mon, Nov 14, 2011 at 09:07:13PM +0100:
> This is a good start, but it needs more documentation as to what's
> happening. You mention man(1) a great deal, but I can't easily find
> an authoritative list of man's behaviour in this regard (not on a
> 4.9 box, anyway).
I fear that is only documented in /etc/man.conf.
So i kind of see your point that this is all rather fuzzy.
Below is a patch to avoid references to man(1) and be somewhat
more explicit about what i'm doing (right now, that is...)
Again, i expect many more changes in this area before the dust
settles, so i'd like to keep the documentation brief for now
lest i have to rewrite it over and over.
While here, i'd like to reword a few comments that left me
wondering when i tried to understand the code, and i'd like
to fix a minor pasto in an error path.
Is this OK for you?
Thanks,
Ingo
Index: mandocdb.8
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mandocdb.8,v
retrieving revision 1.5
diff -u -p -r1.5 mandocdb.8
--- mandocdb.8 14 Nov 2011 18:52:05 -0000 1.5
+++ mandocdb.8 14 Nov 2011 23:23:14 -0000
@@ -48,9 +48,13 @@ The arguments are as follows:
.It Fl a
Use all directories and files found below
.Ar dir ... .
-By default, directories and files
-.Xr man 1
-cannot find will be silently skipped.
+By default, only files matching
+.Sm off
+.Sy man Ar section Li /
+.Op Ar arch Li /
+.Ar title . section
+.Sm on
+will be used.
.It Fl d Ar dir
Merge (remove and re-add)
.Ar
Index: mandocdb.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mandocdb.c,v
retrieving revision 1.6
diff -u -p -r1.6 mandocdb.c
--- mandocdb.c 14 Nov 2011 18:52:05 -0000 1.6
+++ mandocdb.c 14 Nov 2011 23:23:15 -0000
@@ -254,11 +254,11 @@ mandocdb(int argc, char *argv[])
*db, /* keyword database */
*hash; /* temporary keyword hashtable */
BTREEINFO info; /* btree configuration */
- recno_t maxrec; /* supremum of all records */
- recno_t *recs; /* buffer of empty records */
+ recno_t maxrec; /* last record number in the index */
+ recno_t *recs; /* the numbers of all empty records */
size_t sz1, sz2,
- recsz, /* buffer size of recs */
- reccur; /* valid number of recs */
+ recsz, /* number of allocated slots in recs */
+ reccur; /* current number of empty records */
struct buf buf, /* keyword buffer */
dbuf; /* description buffer */
struct of *of; /* list of files for processing */
@@ -344,7 +344,7 @@ mandocdb(int argc, char *argv[])
if (NULL == db) {
perror(fbuf);
exit((int)MANDOCLEVEL_SYSERR);
- } else if (NULL == db) {
+ } else if (NULL == idx) {
perror(ibuf);
exit((int)MANDOCLEVEL_SYSERR);
}
@@ -393,7 +393,7 @@ mandocdb(int argc, char *argv[])
if (NULL == db) {
perror(fbuf);
exit((int)MANDOCLEVEL_SYSERR);
- } else if (NULL == db) {
+ } else if (NULL == idx) {
perror(ibuf);
exit((int)MANDOCLEVEL_SYSERR);
}
@@ -479,9 +479,9 @@ index_merge(const struct of *of, struct
continue;
/*
- * Make sure the manual section and architecture
- * agree with the directory where the file is located
- * or man(1) will not be able to find it.
+ * By default, skip a file if the manual section
+ * and architecture given in the file disagree
+ * with the directory where the file is located.
*/
msec = NULL != mdoc ?
@@ -507,9 +507,10 @@ index_merge(const struct of *of, struct
arch = "";
/*
- * Case is relevant for man(1), so use the file name
- * instead of the (usually) all caps page title,
- * if the two agree.
+ * By default, skip a file if the title given
+ * in the file disagrees with the file name.
+ * If both agree, use the file name as the title,
+ * because the one in the file usually is all caps.
*/
mtitle = NULL != mdoc ?
@@ -1208,7 +1209,9 @@ ofile_argbuild(char *argv[], int argc, i
for (i = 0; i < argc; i++) {
/*
- * Analyze the path.
+ * Try to infer the manual section, architecture and
+ * page title from the path, assuming it looks like
+ * man*/[<arch>/]<title>.<section>
*/
if (strlcpy(buf, argv[i], sizeof(buf)) >= sizeof(buf)) {
@@ -1302,8 +1305,8 @@ ofile_dirbuild(const char *dir, const ch
arch = parch;
/*
- * Don't bother parsing directories
- * that man(1) won't find.
+ * By default, only use directories called:
+ * man<section>/[<arch>/]
*/
if (NULL == sec) {
@@ -1343,7 +1346,9 @@ ofile_dirbuild(const char *dir, const ch
continue;
/*
- * Don't bother parsing files that man(1) won't find.
+ * By default, skip files where the file name suffix
+ * does not agree with the section directory
+ * they are located in.
*/
suffix = strrchr(fn, '.');
@@ -1369,6 +1374,12 @@ ofile_dirbuild(const char *dir, const ch
nof->sec = mandoc_strdup(psec);
if (NULL != parch)
nof->arch = mandoc_strdup(parch);
+
+ /*
+ * Remember the file name without the extension,
+ * to be used as the page title in the database.
+ */
+
if (NULL != suffix)
*suffix = '\0';
nof->title = mandoc_strdup(fn);
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
next prev parent reply other threads:[~2011-11-14 23:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-13 18:42 Ingo Schwarze
2011-11-13 20:05 ` Kristaps Dzonsons
2011-11-14 0:06 ` Ingo Schwarze
2011-11-14 19:13 ` Ingo Schwarze
2011-11-14 20:07 ` Kristaps Dzonsons
2011-11-14 23:34 ` Ingo Schwarze [this message]
2011-11-24 10:10 ` Kristaps Dzonsons
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111114233403.GL27815@iris.usta.de \
--to=schwarze@usta.de \
--cc=tech@mdocml.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).