]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandocdb.c
Implement in-line equations, much needed by Xenocara manuals.
[mandoc.git] / mandocdb.c
index 492f9ee813441109c4939f05dfd9d676fd9d9395..d0422420ae23d1e9880c37ec0bfcbd56f934423e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mandocdb.c,v 1.162 2014/09/03 23:21:47 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.166 2014/10/12 20:32:39 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -169,7 +169,7 @@ static      void     putmdockey(const struct mpage *,
                        const struct mdoc_node *, uint64_t);
 static void     render_key(struct mchars *, struct str *);
 static void     say(const char *, const char *, ...);
                        const struct mdoc_node *, uint64_t);
 static void     render_key(struct mchars *, struct str *);
 static void     say(const char *, const char *, ...);
-static int      set_basedir(const char *);
+static int      set_basedir(const char *, int);
 static int      treescan(void);
 static size_t   utf8(unsigned int, char [7]);
 
 static int      treescan(void);
 static size_t   utf8(unsigned int, char [7]);
 
@@ -315,6 +315,7 @@ static      const struct mdoc_handler mdocs[MDOC_MAX] = {
        { NULL, 0 },  /* sp */
        { NULL, 0 },  /* %U */
        { NULL, 0 },  /* Ta */
        { NULL, 0 },  /* sp */
        { NULL, 0 },  /* %U */
        { NULL, 0 },  /* Ta */
+       { NULL, 0 },  /* ll */
 };
 
 
 };
 
 
@@ -436,7 +437,7 @@ main(int argc, char *argv[])
                 * Most of these deal with a specific directory.
                 * Jump into that directory first.
                 */
                 * Most of these deal with a specific directory.
                 * Jump into that directory first.
                 */
-               if (OP_TEST != op && 0 == set_basedir(path_arg))
+               if (OP_TEST != op && 0 == set_basedir(path_arg, 1))
                        goto out;
 
                if (dbopen(1)) {
                        goto out;
 
                if (dbopen(1)) {
@@ -502,12 +503,12 @@ main(int argc, char *argv[])
                                ohash_init(&mlinks, 6, &mlinks_info);
                        }
 
                                ohash_init(&mlinks, 6, &mlinks_info);
                        }
 
-                       if (0 == set_basedir(dirs.paths[j]))
-                               goto out;
+                       if (0 == set_basedir(dirs.paths[j], argc > 0))
+                               continue;
                        if (0 == treescan())
                        if (0 == treescan())
-                               goto out;
+                               continue;
                        if (0 == dbopen(0))
                        if (0 == dbopen(0))
-                               goto out;
+                               continue;
 
                        mpages_merge(mc, mp);
                        if (warnings && !nodb &&
 
                        mpages_merge(mc, mp);
                        if (warnings && !nodb &&
@@ -1196,8 +1197,8 @@ mpages_merge(struct mchars *mc, struct mparse *mp)
                if (mpage->mlinks->gzip)
                        mpage->form |= FORM_GZ;
                putkey(mpage, mpage->sec, TYPE_sec);
                if (mpage->mlinks->gzip)
                        mpage->form |= FORM_GZ;
                putkey(mpage, mpage->sec, TYPE_sec);
-               putkey(mpage, '\0' == *mpage->arch ?
-                   any : mpage->arch, TYPE_arch);
+               if (*mpage->arch != '\0')
+                       putkey(mpage, mpage->arch, TYPE_arch);
 
                for (mlink = mpage->mlinks; mlink; mlink = mlink->next) {
                        if ('\0' != *mlink->dsec)
 
                for (mlink = mpage->mlinks; mlink; mlink = mlink->next) {
                        if ('\0' != *mlink->dsec)
@@ -1735,7 +1736,7 @@ putkeys(const struct mpage *mpage,
                htab = &strings;
                if (debug > 1)
                    for (i = 0; i < mansearch_keymax; i++)
                htab = &strings;
                if (debug > 1)
                    for (i = 0; i < mansearch_keymax; i++)
-                       if (1 << i & v)
+                       if ((uint64_t)1 << i & v)
                            say(mpage->mlinks->file,
                                "Adding key %s=%*s",
                                mansearch_keynames[i], sz, cp);
                            say(mpage->mlinks->file,
                                "Adding key %s=%*s",
                                mansearch_keynames[i], sz, cp);
@@ -2343,7 +2344,7 @@ hash_free(void *p, void *arg)
 }
 
 static int
 }
 
 static int
-set_basedir(const char *targetdir)
+set_basedir(const char *targetdir, int report_baddir)
 {
        static char      startdir[PATH_MAX];
        static int       getcwd_status;  /* 1 = ok, 2 = failure */
 {
        static char      startdir[PATH_MAX];
        static int       getcwd_status;  /* 1 = ok, 2 = failure */
@@ -2396,12 +2397,16 @@ set_basedir(const char *targetdir)
         * we can reliably check whether files are inside.
         */
        if (NULL == realpath(targetdir, basedir)) {
         * we can reliably check whether files are inside.
         */
        if (NULL == realpath(targetdir, basedir)) {
-               exitcode = (int)MANDOCLEVEL_BADARG;
-               say("", "&%s: realpath", targetdir);
+               if (report_baddir || errno != ENOENT) {
+                       exitcode = (int)MANDOCLEVEL_BADARG;
+                       say("", "&%s: realpath", targetdir);
+               }
                return(0);
        } else if (-1 == chdir(basedir)) {
                return(0);
        } else if (-1 == chdir(basedir)) {
-               exitcode = (int)MANDOCLEVEL_BADARG;
-               say("", "&chdir");
+               if (report_baddir || errno != ENOENT) {
+                       exitcode = (int)MANDOCLEVEL_BADARG;
+                       say("", "&chdir");
+               }
                return(0);
        }
        chdir_status = 1;
                return(0);
        }
        chdir_status = 1;