aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-01-27 01:14:47 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-01-27 01:14:47 +0000
commit8a07f3594eed681882f664f692657e4c0cdd951d (patch)
tree65b5e23360a7a11f6ed80a27e96937ca783fbce2
parentd6acf872e8ac0f7bcf4efa6dd9803b6c9e8c6d00 (diff)
downloadmandoc-8a07f3594eed681882f664f692657e4c0cdd951d.tar.gz
mandoc-8a07f3594eed681882f664f692657e4c0cdd951d.tar.zst
mandoc-8a07f3594eed681882f664f692657e4c0cdd951d.zip
Parse the section number from the content of preformatted pages
and warn if it doesn't match the directory where the file was found.
-rw-r--r--TODO7
-rw-r--r--mandocdb.c45
2 files changed, 32 insertions, 20 deletions
diff --git a/TODO b/TODO
index e0319d96..e565055a 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,6 @@
************************************************************************
* Official mandoc TODO.
-* $Id: TODO,v 1.226 2017/01/26 19:32:46 schwarze Exp $
+* $Id: TODO,v 1.227 2017/01/27 01:14:47 schwarze Exp $
************************************************************************
Many issues are annotated for difficulty as follows:
@@ -259,11 +259,6 @@ are mere guesses, and some may be wrong.
even for apropos title line output; req by bapt@
loc * exist * algo * size * imp ***
-- makewhatis(8) for preformatted pages:
- parse the section number from the header line
- and compare to the section number from the directory name
- loc * exist * algo * size * imp **
-
- Does makewhatis(8) detect missing NAME sections, missing names,
and missing descriptions in all the file formats?
loc * exist * algo * size * imp ***
diff --git a/mandocdb.c b/mandocdb.c
index e6319489..26ea22f6 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.240 2017/01/27 01:09:14 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.241 2017/01/27 01:14:47 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -1254,29 +1254,48 @@ static void
parse_cat(struct mpage *mpage, int fd)
{
FILE *stream;
- char *line, *p, *title;
+ struct mlink *mlink;
+ char *line, *p, *title, *sec;
size_t linesz, plen, titlesz;
ssize_t len;
int offs;
- stream = (-1 == fd) ?
- fopen(mpage->mlinks->file, "r") :
- fdopen(fd, "r");
- if (NULL == stream) {
- if (-1 != fd)
+ mlink = mpage->mlinks;
+ stream = fd == -1 ? fopen(mlink->file, "r") : fdopen(fd, "r");
+ if (stream == NULL) {
+ if (fd != -1)
close(fd);
if (warnings)
- say(mpage->mlinks->file, "&fopen");
+ say(mlink->file, "&fopen");
return;
}
line = NULL;
linesz = 0;
- /* Skip to first blank line. */
+ /* Parse the section number from the header line. */
- while (getline(&line, &linesz, stream) != -1)
+ while (getline(&line, &linesz, stream) != -1) {
if (*line == '\n')
+ continue;
+ if ((sec = strchr(line, '(')) == NULL)
+ break;
+ if ((p = strchr(++sec, ')')) == NULL)
+ break;
+ free(mpage->sec);
+ mpage->sec = mandoc_strndup(sec, p - sec);
+ if (warnings && *mlink->dsec != '\0' &&
+ strcasecmp(mpage->sec, mlink->dsec))
+ say(mlink->file,
+ "Section \"%s\" manual in %s directory",
+ mpage->sec, mlink->dsec);
+ break;
+ }
+
+ /* Skip to first blank line. */
+
+ while (line == NULL || *line != '\n')
+ if (getline(&line, &linesz, stream) == -1)
break;
/*
@@ -1322,8 +1341,7 @@ parse_cat(struct mpage *mpage, int fd)
if (NULL == title || '\0' == *title) {
if (warnings)
- say(mpage->mlinks->file,
- "Cannot find NAME section");
+ say(mlink->file, "Cannot find NAME section");
fclose(stream);
free(title);
return;
@@ -1342,8 +1360,7 @@ parse_cat(struct mpage *mpage, int fd)
/* Skip to next word. */ ;
} else {
if (warnings)
- say(mpage->mlinks->file,
- "No dash in title line");
+ say(mlink->file, "No dash in title line");
p = title;
}