* mdocml: Merge OpenBSD rev.
@ 2013-09-17 23:07 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2013-09-17 23:07 UTC (permalink / raw)
To: source
Log Message:
-----------
Merge OpenBSD rev. 1.34.
Do not truncate the production database when starting to build a new one.
Suggested by deraadt@.
Tags:
----
VERSION_1_12
Modified Files:
--------------
mdocml:
mandocdb.c
Revision Data
-------------
Index: mandocdb.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandocdb.c,v
retrieving revision 1.49.2.2
retrieving revision 1.49.2.3
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.49.2.2 -r1.49.2.3
--- mandocdb.c
+++ mandocdb.c
@@ -495,19 +495,38 @@ main(int argc, char *argv[])
exit((int)MANDOCLEVEL_SYSERR);
}
- strlcpy(mdb.dbn, MANDOC_DB, PATH_MAX);
- strlcpy(mdb.idxn, MANDOC_IDX, PATH_MAX);
+ /* Create a new database in two temporary files. */
- flags = O_CREAT | O_TRUNC | O_RDWR;
- mdb.db = dbopen(mdb.dbn, flags, 0644, DB_BTREE, &info);
- mdb.idx = dbopen(mdb.idxn, flags, 0644, DB_RECNO, NULL);
-
- if (NULL == mdb.db) {
- perror(mdb.dbn);
- exit((int)MANDOCLEVEL_SYSERR);
- } else if (NULL == mdb.idx) {
- perror(mdb.idxn);
- exit((int)MANDOCLEVEL_SYSERR);
+ flags = O_CREAT | O_EXCL | O_RDWR;
+ while (NULL == mdb.db) {
+ strlcpy(mdb.dbn, MANDOC_DB, PATH_MAX);
+ strlcat(mdb.dbn, ".XXXXXXXXXX", PATH_MAX);
+ if (NULL == mktemp(mdb.dbn)) {
+ perror(mdb.dbn);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
+ mdb.db = dbopen(mdb.dbn, flags, 0644,
+ DB_BTREE, &info);
+ if (NULL == mdb.db && EEXIST != errno) {
+ perror(mdb.dbn);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
+ }
+ while (NULL == mdb.idx) {
+ strlcpy(mdb.idxn, MANDOC_IDX, PATH_MAX);
+ strlcat(mdb.idxn, ".XXXXXXXXXX", PATH_MAX);
+ if (NULL == mktemp(mdb.idxn)) {
+ perror(mdb.idxn);
+ unlink(mdb.dbn);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
+ mdb.idx = dbopen(mdb.idxn, flags, 0644,
+ DB_RECNO, NULL);
+ if (NULL == mdb.idx && EEXIST != errno) {
+ perror(mdb.idxn);
+ unlink(mdb.dbn);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
}
/*
@@ -527,6 +546,26 @@ main(int argc, char *argv[])
(*mdb.idx->close)(mdb.idx);
mdb.db = NULL;
mdb.idx = NULL;
+
+ /*
+ * Replace the old database with the new one.
+ * This is not perfectly atomic,
+ * but i cannot think of a better way.
+ */
+
+ if (-1 == rename(mdb.dbn, MANDOC_DB)) {
+ perror(MANDOC_DB);
+ unlink(mdb.dbn);
+ unlink(mdb.idxn);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
+ if (-1 == rename(mdb.idxn, MANDOC_IDX)) {
+ perror(MANDOC_IDX);
+ unlink(MANDOC_DB);
+ unlink(MANDOC_IDX);
+ unlink(mdb.idxn);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
}
out:
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
* mdocml: merge OpenBSD rev.
@ 2014-07-11 22:27 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2014-07-11 22:27 UTC (permalink / raw)
To: source
Log Message:
-----------
merge OpenBSD rev. 1.3 by tedu@:
make http decode linear time.
also remove a redundant null check.
Modified Files:
--------------
mdocml:
cgi.c
Revision Data
-------------
Index: cgi.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/cgi.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -Lcgi.c -Lcgi.c -u -p -r1.62 -r1.63
--- cgi.c
+++ cgi.c
@@ -165,7 +165,7 @@ html_printquery(const struct req *req)
}
if (NULL != req->q.expr) {
printf("&expr=");
- html_print(req->q.expr ? req->q.expr : "");
+ html_print(req->q.expr);
}
}
@@ -284,11 +284,13 @@ static int
http_decode(char *p)
{
char hex[3];
+ char *q;
int c;
hex[2] = '\0';
- for ( ; '\0' != *p; p++) {
+ q = p;
+ for ( ; '\0' != *p; p++, q++) {
if ('%' == *p) {
if ('\0' == (hex[0] = *(p + 1)))
return(0);
@@ -299,13 +301,13 @@ http_decode(char *p)
if ('\0' == c)
return(0);
- *p = (char)c;
- memmove(p + 1, p + 3, strlen(p + 3) + 1);
+ *q = (char)c;
+ p += 2;
} else
- *p = '+' == *p ? ' ' : *p;
+ *q = '+' == *p ? ' ' : *p;
}
- *p = '\0';
+ *q = '\0';
return(1);
}
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
* mdocml: merge OpenBSD rev.
@ 2014-07-11 22:25 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2014-07-11 22:25 UTC (permalink / raw)
To: source
Log Message:
-----------
merge OpenBSD rev. 1.2 by tedu@:
http headers must end lines with CRLF.
Modified Files:
--------------
mdocml:
cgi.c
Revision Data
-------------
Index: cgi.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/cgi.c,v
retrieving revision 1.61
retrieving revision 1.62
diff -Lcgi.c -Lcgi.c -u -p -r1.61 -r1.62
--- cgi.c
+++ cgi.c
@@ -314,12 +314,12 @@ resp_begin_http(int code, const char *ms
{
if (200 != code)
- printf("Status: %d %s\n", code, msg);
+ printf("Status: %d %s\r\n", code, msg);
- puts("Content-Type: text/html; charset=utf-8\n"
- "Cache-Control: no-cache\n"
- "Pragma: no-cache\n"
- "");
+ printf("Content-Type: text/html; charset=utf-8\r\n"
+ "Cache-Control: no-cache\r\n"
+ "Pragma: no-cache\r\n"
+ "\r\n");
fflush(stdout);
}
@@ -484,12 +484,13 @@ resp_search(const struct req *req, struc
* If we have just one result, then jump there now
* without any delay.
*/
- puts("Status: 303 See Other");
+ printf("Status: 303 See Other\r\n");
printf("Location: http://%s%s/show/%s/%s?",
httphost, scriptname, req->q.manpath, r[0].file);
http_printquery(req);
- puts("\n"
- "Content-Type: text/html; charset=utf-8\n");
+ printf("\r\n"
+ "Content-Type: text/html; charset=utf-8\r\n"
+ "\r\n");
return;
}
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
* mdocml: Merge OpenBSD rev.
@ 2014-06-18 19:34 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2014-06-18 19:34 UTC (permalink / raw)
To: source
Log Message:
-----------
Merge OpenBSD rev. 1.108 by sthen@; original commit message:
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).
Modified Files:
--------------
mdocml:
mandocdb.c
Revision Data
-------------
Index: mandocdb.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandocdb.c,v
retrieving revision 1.148
retrieving revision 1.149
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.148 -r1.149
--- mandocdb.c
+++ mandocdb.c
@@ -2230,7 +2230,8 @@ dbopen(int real)
rc = sqlite3_open_v2(MANDOC_DB, &db, ofl, NULL);
if (SQLITE_OK != rc) {
exitcode = (int)MANDOCLEVEL_SYSERR;
- say(MANDOC_DB, "%s", sqlite3_errstr(rc));
+ if (SQLITE_CANTOPEN != rc)
+ say(MANDOC_DB, "%s", sqlite3_errstr(rc));
return(0);
}
goto prepare_statements;
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
* mdocml: merge OpenBSD rev.
@ 2014-04-04 15:51 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2014-04-04 15:51 UTC (permalink / raw)
To: source
Log Message:
-----------
merge OpenBSD rev. 1.20, describing new features
Modified Files:
--------------
mdocml:
apropos.1
Revision Data
-------------
Index: apropos.1
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/apropos.1,v
retrieving revision 1.23
retrieving revision 1.24
diff -Lapropos.1 -Lapropos.1 -u -p -r1.23 -r1.24
--- apropos.1
+++ apropos.1
@@ -26,6 +26,7 @@
.Op Fl C Ar file
.Op Fl M Ar path
.Op Fl m Ar path
+.Op Fl O Ar outkey
.Op Fl S Ar arch
.Op Fl s Ar section
.Ar expression ...
@@ -75,6 +76,10 @@ for
.Xr mandocdb 8
databases.
Invalid paths, or paths without manual databases, are ignored.
+.It Fl O Ar outkey
+Show the values associated with the key
+.Ar outkey
+instead of the manual descriptions.
.It Fl S Ar arch
Restrict the search to pages for the specified
.Xr machine 1
@@ -192,6 +197,8 @@ Names and description:
.Bl -column "xLix" description -offset indent -compact
.It Li \&Nm Ta manual name
.It Li \&Nd Ta one-line manual description
+.It Li arch Ta machine architecture (case-insensitive)
+.It Li sec Ta manual section number
.El
.Pp
Sections and cross references:
@@ -320,6 +327,15 @@ with the argument
.Qq ssh :
.Pp
.Dl $ apropos \-\- \-i 'Nm~[[:<:]]ssh[[:>:]]'
+.Pp
+The following two invocations are equivalent:
+.Pp
+.D1 Li $ apropos -S Ar arch Li -s Ar section expression
+.Bd -ragged -offset indent
+.Li $ apropos \e( Ar expression Li \e)
+.Li -a arch~^( Ns Ar arch Ns Li |any)$
+.Li -a sec~^ Ns Ar section Ns Li $
+.Ed
.Sh SEE ALSO
.Xr man 1 ,
.Xr re_format 7 ,
@@ -330,7 +346,7 @@ An
utility first appeared in
.Bx 2 .
It was rewritten from scratch for
-.Ox 5.1 .
+.Ox 5.6 .
.Pp
The
.Fl M
@@ -358,4 +374,6 @@ wrote the original
.Nm
in February 1979.
The current version was written by
-.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv .
+.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
+and
+.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
* mdocml: Merge OpenBSD rev.
@ 2013-09-17 23:12 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2013-09-17 23:12 UTC (permalink / raw)
To: source
Log Message:
-----------
Merge OpenBSD rev. 1.43:
Kristaps changed the size member of struct manpaths from int to size_t.
No functional change.
Tags:
----
VERSION_1_12
Modified Files:
--------------
mdocml:
mandocdb.c
Revision Data
-------------
Index: mandocdb.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandocdb.c,v
retrieving revision 1.49.2.3
retrieving revision 1.49.2.4
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.49.2.3 -r1.49.2.4
--- mandocdb.c
+++ mandocdb.c
@@ -299,7 +299,7 @@ main(int argc, char *argv[])
int ch, i, flags;
DB *hash; /* temporary keyword hashtable */
BTREEINFO info; /* btree configuration */
- size_t sz1, sz2;
+ size_t sz1, sz2, ipath;
struct buf buf, /* keyword buffer */
dbuf; /* description buffer */
struct of *of; /* list of files for processing */
@@ -482,7 +482,7 @@ main(int argc, char *argv[])
} else
manpath_parse(&dirs, dir, NULL, NULL);
- for (i = 0; i < dirs.sz; i++) {
+ for (ipath = 0; ipath < dirs.sz; ipath++) {
/*
* Go to the root of the respective manual tree.
@@ -490,8 +490,8 @@ main(int argc, char *argv[])
* They are indexed relative to the root.
*/
- if (-1 == chdir(dirs.paths[i])) {
- perror(dirs.paths[i]);
+ if (-1 == chdir(dirs.paths[ipath])) {
+ perror(dirs.paths[ipath]);
exit((int)MANDOCLEVEL_SYSERR);
}
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
* mdocml: merge OpenBSD rev.
@ 2013-09-17 22:48 schwarze
0 siblings, 0 replies; 7+ messages in thread
From: schwarze @ 2013-09-17 22:48 UTC (permalink / raw)
To: source
Log Message:
-----------
merge OpenBSD rev. 1.41:
backout non-portable code
Tags:
----
VERSION_1_12
Modified Files:
--------------
mdocml:
mandocdb.c
Revision Data
-------------
Index: mandocdb.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandocdb.c,v
retrieving revision 1.49.2.1
retrieving revision 1.49.2.2
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.49.2.1 -r1.49.2.2
--- mandocdb.c
+++ mandocdb.c
@@ -56,15 +56,6 @@
#define MANDOC_SRC 0x1
#define MANDOC_FORM 0x2
-#define WARNING(_f, _b, _fmt, _args...) \
- do if (warnings) { \
- fprintf(stderr, "%s: ", (_b)); \
- fprintf(stderr, (_fmt), ##_args); \
- if ('\0' != *(_f)) \
- fprintf(stderr, ": %s", (_f)); \
- fprintf(stderr, "\n"); \
- } while (/* CONSTCOND */ 0)
-
/* Access to the mandoc database on disk. */
struct mdb {
@@ -133,17 +124,16 @@ static void hash_put(DB *, const stru
static void hash_reset(DB **);
static void index_merge(const struct of *, struct mparse *,
struct buf *, struct buf *, DB *,
- struct mdb *, struct recs *,
- const char *);
+ struct mdb *, struct recs *);
static void index_prune(const struct of *, struct mdb *,
- struct recs *, const char *);
-static void ofile_argbuild(int, char *[],
- struct of **, const char *);
+ struct recs *);
+static void ofile_argbuild(int, char *[], struct of **,
+ const char *);
static void ofile_dirbuild(const char *, const char *,
- const char *, int, struct of **, char *);
+ const char *, int, struct of **);
static void ofile_free(struct of *);
-static void pformatted(DB *, struct buf *, struct buf *,
- const struct of *, const char *);
+static void pformatted(DB *, struct buf *,
+ struct buf *, const struct of *);
static int pman_node(MAN_ARGS);
static void pmdoc_node(MDOC_ARGS);
static int pmdoc_head(MDOC_ARGS);
@@ -304,8 +294,9 @@ main(int argc, char *argv[])
struct recs recs;
enum op op; /* current operation */
const char *dir;
+ char *cp;
+ char pbuf[PATH_MAX];
int ch, i, flags;
- char dirbuf[PATH_MAX];
DB *hash; /* temporary keyword hashtable */
BTREEINFO info; /* btree configuration */
size_t sz1, sz2;
@@ -407,25 +398,31 @@ main(int argc, char *argv[])
dbuf.cp = mandoc_malloc(dbuf.size);
if (OP_TEST == op) {
- ofile_argbuild(argc, argv, &of, ".");
+ ofile_argbuild(argc, argv, &of, NULL);
if (NULL == of)
goto out;
- index_merge(of, mp, &dbuf, &buf,
- hash, &mdb, &recs, ".");
+ index_merge(of, mp, &dbuf, &buf, hash, &mdb, &recs);
goto out;
}
if (OP_UPDATE == op || OP_DELETE == op) {
- strlcat(mdb.dbn, dir, PATH_MAX);
- strlcat(mdb.dbn, "/", PATH_MAX);
+ if (NULL == realpath(dir, pbuf)) {
+ perror(dir);
+ exit((int)MANDOCLEVEL_BADARG);
+ }
+ if (strlcat(pbuf, "/", PATH_MAX) >= PATH_MAX) {
+ fprintf(stderr, "%s: path too long\n", pbuf);
+ exit((int)MANDOCLEVEL_BADARG);
+ }
+
+ strlcat(mdb.dbn, pbuf, PATH_MAX);
sz1 = strlcat(mdb.dbn, MANDOC_DB, PATH_MAX);
- strlcat(mdb.idxn, dir, PATH_MAX);
- strlcat(mdb.idxn, "/", PATH_MAX);
+ strlcat(mdb.idxn, pbuf, PATH_MAX);
sz2 = strlcat(mdb.idxn, MANDOC_IDX, PATH_MAX);
if (sz1 >= PATH_MAX || sz2 >= PATH_MAX) {
- fprintf(stderr, "%s: path too long\n", dir);
+ fprintf(stderr, "%s: path too long\n", mdb.idxn);
exit((int)MANDOCLEVEL_BADARG);
}
@@ -441,12 +438,12 @@ main(int argc, char *argv[])
exit((int)MANDOCLEVEL_SYSERR);
}
- ofile_argbuild(argc, argv, &of, dir);
+ ofile_argbuild(argc, argv, &of, pbuf);
if (NULL == of)
goto out;
- index_prune(of, &mdb, &recs, dir);
+ index_prune(of, &mdb, &recs);
/*
* Go to the root of the respective manual tree.
@@ -460,7 +457,7 @@ main(int argc, char *argv[])
exit((int)MANDOCLEVEL_SYSERR);
}
index_merge(of, mp, &dbuf, &buf, hash,
- &mdb, &recs, dir);
+ &mdb, &recs);
}
goto out;
@@ -475,12 +472,18 @@ main(int argc, char *argv[])
if (argc > 0) {
dirs.paths = mandoc_calloc(argc, sizeof(char *));
dirs.sz = argc;
- for (i = 0; i < argc; i++)
- dirs.paths[i] = mandoc_strdup(argv[i]);
+ for (i = 0; i < argc; i++) {
+ if (NULL == (cp = realpath(argv[i], pbuf))) {
+ perror(argv[i]);
+ goto out;
+ }
+ dirs.paths[i] = mandoc_strdup(cp);
+ }
} else
manpath_parse(&dirs, dir, NULL, NULL);
for (i = 0; i < dirs.sz; i++) {
+
/*
* Go to the root of the respective manual tree.
* This must work or no manuals may be found:
@@ -511,12 +514,11 @@ main(int argc, char *argv[])
* Search for manuals and fill the new database.
*/
- strlcpy(dirbuf, dirs.paths[i], PATH_MAX);
- ofile_dirbuild(".", "", "", 0, &of, dirbuf);
+ ofile_dirbuild(".", "", "", 0, &of);
if (NULL != of) {
index_merge(of, mp, &dbuf, &buf, hash,
- &mdb, &recs, dirs.paths[i]);
+ &mdb, &recs);
ofile_free(of);
of = NULL;
}
@@ -547,7 +549,7 @@ out:
usage:
fprintf(stderr,
- "usage: %s [-av] [-C file] | dir ... | -t file ...\n"
+ "usage: %s [-avvv] [-C file] | dir ... | -t file ...\n"
" -d dir [file ...] | "
"-u dir [file ...]\n",
progname);
@@ -558,18 +560,16 @@ usage:
void
index_merge(const struct of *of, struct mparse *mp,
struct buf *dbuf, struct buf *buf, DB *hash,
- struct mdb *mdb, struct recs *recs,
- const char *basedir)
+ struct mdb *mdb, struct recs *recs)
{
recno_t rec;
int ch, skip;
DBT key, val;
DB *files; /* temporary file name table */
- char emptystring[1] = {'\0'};
struct mdoc *mdoc;
struct man *man;
- char *p;
const char *fn, *msec, *march, *mtitle;
+ char *p;
uint64_t mask;
size_t sv;
unsigned seq;
@@ -629,9 +629,13 @@ index_merge(const struct of *of, struct
skip = 0;
assert(of->sec);
assert(msec);
- if (strcasecmp(msec, of->sec))
- WARNING(fn, basedir, "Section \"%s\" manual "
- "in \"%s\" directory", msec, of->sec);
+ if (warnings)
+ if (strcasecmp(msec, of->sec))
+ fprintf(stderr, "%s: "
+ "section \"%s\" manual "
+ "in \"%s\" directory\n",
+ fn, msec, of->sec);
+
/*
* Manual page directories exist for each kernel
* architecture as returned by machine(1).
@@ -649,10 +653,12 @@ index_merge(const struct of *of, struct
assert(of->arch);
assert(march);
- if (strcasecmp(march, of->arch))
- WARNING(fn, basedir, "Architecture \"%s\" "
- "manual in \"%s\" directory",
- march, of->arch);
+ if (warnings)
+ if (strcasecmp(march, of->arch))
+ fprintf(stderr, "%s: "
+ "architecture \"%s\" manual "
+ "in \"%s\" directory\n",
+ fn, march, of->arch);
/*
* By default, skip a file if the title given
@@ -688,7 +694,7 @@ index_merge(const struct of *of, struct
val.data = NULL;
val.size = 0;
if (0 == skip)
- val.data = emptystring;
+ val.data = "";
else {
ch = (*files->get)(files, &key, &val, 0);
if (ch < 0) {
@@ -742,7 +748,7 @@ index_merge(const struct of *of, struct
else if (man)
pman_node(hash, buf, dbuf, man_node(man));
else
- pformatted(hash, buf, dbuf, of, basedir);
+ pformatted(hash, buf, dbuf, of);
/* Test mode, do not access any database. */
@@ -789,6 +795,8 @@ index_merge(const struct of *of, struct
}
if (ch < 0) {
perror("hash");
+ unlink(mdb->dbn);
+ unlink(mdb->idxn);
exit((int)MANDOCLEVEL_SYSERR);
}
@@ -807,7 +815,7 @@ index_merge(const struct of *of, struct
val.size = dbuf->len;
if (verb)
- printf("%s: Adding to index: %s\n", basedir, fn);
+ printf("%s: adding to index\n", fn);
dbt_put(mdb->idx, mdb->idxn, &key, &val);
}
@@ -822,9 +830,9 @@ index_merge(const struct of *of, struct
while (0 == (*files->seq)(files, &key, &val, seq)) {
seq = R_NEXT;
if (val.size)
- WARNING((char *)val.data, basedir,
- "Probably unreachable, title "
- "is %s", (char *)key.data);
+ fprintf(stderr, "%s: probably "
+ "unreachable, title is %s\n",
+ (char *)val.data, (char *)key.data);
}
(*files->close)(files);
}
@@ -837,8 +845,7 @@ index_merge(const struct of *of, struct
* in `idx' (zeroing its value size).
*/
static void
-index_prune(const struct of *ofile, struct mdb *mdb,
- struct recs *recs, const char *basedir)
+index_prune(const struct of *ofile, struct mdb *mdb, struct recs *recs)
{
const struct of *of;
const char *fn;
@@ -913,8 +920,7 @@ index_prune(const struct of *ofile, stru
}
if (verb)
- printf("%s: Deleting from index: %s\n",
- basedir, fn);
+ printf("%s: deleting from index\n", fn);
val.size = 0;
ch = (*mdb->idx->put)(mdb->idx, &key, &val, R_CURSOR);
@@ -1474,15 +1480,16 @@ pman_node(MAN_ARGS)
* By necessity, this involves rather crude guesswork.
*/
static void
-pformatted(DB *hash, struct buf *buf, struct buf *dbuf,
- const struct of *of, const char *basedir)
+pformatted(DB *hash, struct buf *buf,
+ struct buf *dbuf, const struct of *of)
{
FILE *stream;
char *line, *p, *title;
size_t len, plen, titlesz;
if (NULL == (stream = fopen(of->fname, "r"))) {
- WARNING(of->fname, basedir, "%s", strerror(errno));
+ if (warnings)
+ perror(of->fname);
return;
}
@@ -1537,6 +1544,7 @@ pformatted(DB *hash, struct buf *buf, st
title[(int)titlesz - 1] = ' ';
}
+
/*
* If no page content can be found, or the input line
* is already the next section header, or there is no
@@ -1545,8 +1553,9 @@ pformatted(DB *hash, struct buf *buf, st
*/
if (NULL == title || '\0' == *title) {
- WARNING(of->fname, basedir,
- "Cannot find NAME section");
+ if (warnings)
+ fprintf(stderr, "%s: cannot find NAME section\n",
+ of->fname);
buf_appendb(dbuf, buf->cp, buf->size);
hash_put(hash, buf, TYPE_Nd);
fclose(stream);
@@ -1567,8 +1576,9 @@ pformatted(DB *hash, struct buf *buf, st
for (p += 2; ' ' == *p || '\b' == *p; p++)
/* Skip to next word. */ ;
} else {
- WARNING(of->fname, basedir,
- "No dash in title line");
+ if (warnings)
+ fprintf(stderr, "%s: no dash in title line\n",
+ of->fname);
p = title;
}
@@ -1595,16 +1605,30 @@ pformatted(DB *hash, struct buf *buf, st
}
static void
-ofile_argbuild(int argc, char *argv[],
- struct of **of, const char *basedir)
+ofile_argbuild(int argc, char *argv[], struct of **of,
+ const char *basedir)
{
char buf[PATH_MAX];
+ char pbuf[PATH_MAX];
const char *sec, *arch, *title;
- char *p;
+ char *relpath, *p;
int i, src_form;
struct of *nof;
for (i = 0; i < argc; i++) {
+ if (NULL == (relpath = realpath(argv[i], pbuf))) {
+ perror(argv[i]);
+ continue;
+ }
+ if (NULL != basedir) {
+ if (strstr(pbuf, basedir) != pbuf) {
+ fprintf(stderr, "%s: file outside "
+ "base directory %s\n",
+ pbuf, basedir);
+ continue;
+ }
+ relpath = pbuf + strlen(basedir);
+ }
/*
* Try to infer the manual section, architecture and
@@ -1613,8 +1637,8 @@ ofile_argbuild(int argc, char *argv[],
* cat<section>[/<arch>]/<title>.0
*/
- if (strlcpy(buf, argv[i], sizeof(buf)) >= sizeof(buf)) {
- fprintf(stderr, "%s: Path too long\n", argv[i]);
+ if (strlcpy(buf, relpath, sizeof(buf)) >= sizeof(buf)) {
+ fprintf(stderr, "%s: path too long\n", relpath);
continue;
}
sec = arch = title = "";
@@ -1646,8 +1670,11 @@ ofile_argbuild(int argc, char *argv[],
break;
}
if ('\0' == *title) {
- WARNING(argv[i], basedir,
- "Cannot deduce title from filename");
+ if (warnings)
+ fprintf(stderr,
+ "%s: cannot deduce title "
+ "from filename\n",
+ relpath);
title = buf;
}
@@ -1656,7 +1683,7 @@ ofile_argbuild(int argc, char *argv[],
*/
nof = mandoc_calloc(1, sizeof(struct of));
- nof->fname = mandoc_strdup(argv[i]);
+ nof->fname = mandoc_strdup(relpath);
nof->sec = mandoc_strdup(sec);
nof->arch = mandoc_strdup(arch);
nof->title = mandoc_strdup(title);
@@ -1687,7 +1714,7 @@ ofile_argbuild(int argc, char *argv[],
*/
static void
ofile_dirbuild(const char *dir, const char* psec, const char *parch,
- int p_src_form, struct of **of, char *basedir)
+ int p_src_form, struct of **of)
{
char buf[PATH_MAX];
size_t sz;
@@ -1699,7 +1726,8 @@ ofile_dirbuild(const char *dir, const ch
int src_form;
if (NULL == (d = opendir(dir))) {
- WARNING("", dir, "%s", strerror(errno));
+ if (warnings)
+ perror(dir);
return;
}
@@ -1729,7 +1757,9 @@ ofile_dirbuild(const char *dir, const ch
src_form |= MANDOC_FORM;
sec = fn + 3;
} else {
- WARNING(fn, basedir, "Bad section");
+ if (warnings) fprintf(stderr,
+ "%s/%s: bad section\n",
+ dir, fn);
if (use_all)
sec = fn;
else
@@ -1737,13 +1767,16 @@ ofile_dirbuild(const char *dir, const ch
}
} else if ('\0' == *arch) {
if (NULL != strchr(fn, '.')) {
- WARNING(fn, basedir, "Bad architecture");
+ if (warnings) fprintf(stderr,
+ "%s/%s: bad architecture\n",
+ dir, fn);
if (0 == use_all)
continue;
}
arch = fn;
} else {
- WARNING(fn, basedir, "Excessive subdirectory");
+ if (warnings) fprintf(stderr, "%s/%s: "
+ "excessive subdirectory\n", dir, fn);
if (0 == use_all)
continue;
}
@@ -1751,31 +1784,32 @@ ofile_dirbuild(const char *dir, const ch
buf[0] = '\0';
strlcat(buf, dir, PATH_MAX);
strlcat(buf, "/", PATH_MAX);
- strlcat(basedir, "/", PATH_MAX);
- strlcat(basedir, fn, PATH_MAX);
sz = strlcat(buf, fn, PATH_MAX);
if (PATH_MAX <= sz) {
- WARNING(fn, basedir, "Path too long");
+ if (warnings) fprintf(stderr, "%s/%s: "
+ "path too long\n", dir, fn);
continue;
}
- ofile_dirbuild(buf, sec, arch,
- src_form, of, basedir);
-
- p = strrchr(basedir, '/');
- *p = '\0';
+ ofile_dirbuild(buf, sec, arch, src_form, of);
continue;
}
if (DT_REG != dp->d_type) {
- WARNING(fn, basedir, "Not a regular file");
+ if (warnings)
+ fprintf(stderr,
+ "%s/%s: not a regular file\n",
+ dir, fn);
continue;
}
if (!strcmp(MANDOC_DB, fn) || !strcmp(MANDOC_IDX, fn))
continue;
if ('\0' == *psec) {
- WARNING(fn, basedir, "File outside section");
+ if (warnings)
+ fprintf(stderr,
+ "%s/%s: file outside section\n",
+ dir, fn);
if (0 == use_all)
continue;
}
@@ -1788,14 +1822,20 @@ ofile_dirbuild(const char *dir, const ch
suffix = strrchr(fn, '.');
if (NULL == suffix) {
- WARNING(fn, basedir, "No filename suffix");
+ if (warnings)
+ fprintf(stderr,
+ "%s/%s: no filename suffix\n",
+ dir, fn);
if (0 == use_all)
continue;
} else if ((MANDOC_SRC & src_form &&
strcmp(suffix + 1, psec)) ||
(MANDOC_FORM & src_form &&
strcmp(suffix + 1, "0"))) {
- WARNING(fn, basedir, "Wrong filename suffix");
+ if (warnings)
+ fprintf(stderr,
+ "%s/%s: wrong filename suffix\n",
+ dir, fn);
if (0 == use_all)
continue;
if ('0' == suffix[1])
@@ -1829,7 +1869,9 @@ ofile_dirbuild(const char *dir, const ch
strlcat(buf, "/", PATH_MAX);
sz = strlcat(buf, fn, PATH_MAX);
if (sz >= PATH_MAX) {
- WARNING(fn, basedir, "Path too long");
+ if (warnings) fprintf(stderr,
+ "%s/%s: path too long\n",
+ dir, fn);
continue;
}
q = strrchr(buf, '.');
@@ -1837,7 +1879,9 @@ ofile_dirbuild(const char *dir, const ch
*q = '\0';
sz = strlcat(buf, psec, PATH_MAX);
if (sz >= PATH_MAX) {
- WARNING(fn, basedir, "Path too long");
+ if (warnings) fprintf(stderr,
+ "%s/%s: path too long\n",
+ dir, fn);
continue;
}
if (0 == access(buf, R_OK))
@@ -1853,7 +1897,8 @@ ofile_dirbuild(const char *dir, const ch
}
sz = strlcat(buf, fn, PATH_MAX);
if (sz >= PATH_MAX) {
- WARNING(fn, basedir, "Path too long");
+ if (warnings) fprintf(stderr,
+ "%s/%s: path too long\n", dir, fn);
continue;
}
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-07-11 22:27 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-17 23:07 mdocml: Merge OpenBSD rev schwarze
-- strict thread matches above, loose matches on Subject: below --
2014-07-11 22:27 mdocml: merge " schwarze
2014-07-11 22:25 schwarze
2014-06-18 19:34 mdocml: Merge " schwarze
2014-04-04 15:51 mdocml: merge " schwarze
2013-09-17 23:12 mdocml: Merge " schwarze
2013-09-17 22:48 mdocml: merge " schwarze
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).