]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandocdb.c
fix the section number in the <title> element for preformatted pages;
[mandoc.git] / mandocdb.c
index 4bfb2cf6182dd05283bac3f18defcf17d447eb2b..0ef661b2d57c79894c22eaa890a529c8ab680c29 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mandocdb.c,v 1.266 2020/01/26 21:25:41 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.268 2021/08/07 13:02:10 schwarze Exp $ */
 /*
- * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2016 Ed Maste <emaste@freebsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -15,6 +15,8 @@
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Implementation of the makewhatis(8) program.
  */
 #include "config.h"
 
@@ -118,7 +120,7 @@ struct      mdoc_handler {
 int             mandocdb(int, char *[]);
 
 static void     dbadd(struct dba *, struct mpage *);
-static void     dbadd_mlink(const struct mlink *mlink);
+static void     dbadd_mlink(const struct mlink *);
 static void     dbprune(struct dba *);
 static void     dbwrite(struct dba *);
 static void     filescan(const char *);
@@ -163,6 +165,9 @@ static      void     putkey(const struct mpage *, char *, uint64_t);
 static void     putkeys(const struct mpage *, char *, size_t, uint64_t);
 static void     putmdockey(const struct mpage *,
                        const struct roff_node *, uint64_t, int);
+#ifdef READ_ALLOWED_PATH
+static int      read_allowed(const char *);
+#endif
 static int      render_string(char **, size_t *);
 static void     say(const char *, const char *, ...)
                        __attribute__((__format__ (__printf__, 2, 3)));
@@ -610,8 +615,8 @@ treescan(void)
                                continue;
                        }
                        if (strncmp(buf, basedir, basedir_len) != 0
-#ifdef HOMEBREWDIR
-                           && strncmp(buf, HOMEBREWDIR, strlen(HOMEBREWDIR))
+#ifdef READ_ALLOWED_PATH
+                           && !read_allowed(buf)
 #endif
                        ) {
                                if (warnings) say("",
@@ -821,8 +826,8 @@ filescan(const char *infile)
                start = usefile;
        else if (strncmp(usefile, basedir, basedir_len) == 0)
                start = usefile + basedir_len;
-#ifdef HOMEBREWDIR
-       else if (strncmp(usefile, HOMEBREWDIR, strlen(HOMEBREWDIR)) == 0)
+#ifdef READ_ALLOWED_PATH
+       else if (read_allowed(usefile))
                start = usefile;
 #endif
        else {
@@ -2379,6 +2384,25 @@ set_basedir(const char *targetdir, int report_baddir)
        return 1;
 }
 
+#ifdef READ_ALLOWED_PATH
+static int
+read_allowed(const char *candidate)
+{
+       const char      *cp;
+       size_t           len;
+
+       for (cp = READ_ALLOWED_PATH;; cp += len) {
+               while (*cp == ':')
+                       cp++;
+               if (*cp == '\0')
+                       return 0;
+               len = strcspn(cp, ":");
+               if (strncmp(candidate, cp, len) == 0)
+                       return 1;
+       }
+}
+#endif
+
 static void
 say(const char *file, const char *format, ...)
 {