source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* 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).