Rip out the complete "reachable" checks, without replacement.
authorschwarze <schwarze@openbsd.org>
Sun, 5 Jan 2014 04:48:35 +0000 (04:48 +0000)
committerschwarze <schwarze@openbsd.org>
Sun, 5 Jan 2014 04:48:35 +0000 (04:48 +0000)
It's a pity i spent time during t2k13 writing this; however,
when an entire concept is busted, let us not look back.

There is no such thing as an unreachable page.  Even if you are crazy
enough to put a page starting with ".Dt NAMEI 9" into a file man1/cat.1,
we now make sure that it can be found by all of the following:
Nm=namei Nm=cat sec=1 sec=9
It will always be displayed as:
cat(1) - pathname lookup
So you know that you have to type `man cat` to get at it.
That obsoletes the concept of "unreachable manuals" for good.

usr.bin/mandoc/mandocdb.c

index 3872d12..0e37ea9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mandocdb.c,v 1.57 2014/01/05 04:13:46 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.58 2014/01/05 04:48:35 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -106,11 +106,6 @@ struct     mlink {
        struct mlink    *next;    /* singly linked list */
 };
 
-struct title {
-       char            *title; /* name(sec/arch) given inside the file */
-       char            *file; /* file name in case of mismatch */
-};
-
 enum   stmt {
        STMT_DELETE_PAGE = 0,   /* delete mpage */
        STMT_INSERT_PAGE,       /* insert mpage */
@@ -139,7 +134,7 @@ static      int      mlink_check(struct mpage *, struct mlink *);
 static void     mlink_free(struct mlink *);
 static void     mlinks_undupe(struct mpage *);
 static void     mpages_free(void);
-static void     mpages_merge(struct mchars *, struct mparse *, int);
+static void     mpages_merge(struct mchars *, struct mparse *);
 static void     parse_cat(struct mpage *);
 static void     parse_man(struct mpage *, const struct man_node *);
 static void     parse_mdoc(struct mpage *, const struct mdoc_node *);
@@ -427,7 +422,7 @@ mandocdb(int argc, char *argv[])
                if (OP_TEST != op)
                        dbprune();
                if (OP_DELETE != op)
-                       mpages_merge(mc, mp, 0);
+                       mpages_merge(mc, mp);
                dbclose(1);
        } else {
                /*
@@ -471,7 +466,7 @@ mandocdb(int argc, char *argv[])
                        if (0 == dbopen(0))
                                goto out;
 
-                       mpages_merge(mc, mp, warnings && !use_all);
+                       mpages_merge(mc, mp);
                        dbclose(0);
 
                        if (j + 1 < dirs.sz) {
@@ -937,19 +932,16 @@ mlink_check(struct mpage *mpage, struct mlink *mlink)
  * and filename to determine whether the file is parsable or not.
  */
 static void
-mpages_merge(struct mchars *mc, struct mparse *mp, int check_reachable)
+mpages_merge(struct mchars *mc, struct mparse *mp)
 {
-       struct ohash             title_table;
-       struct ohash_info        title_info, str_info;
+       struct ohash_info        str_info;
        struct mpage            *mpage;
        struct mlink            *mlink;
        struct mdoc             *mdoc;
        struct man              *man;
-       struct title            *title_entry;
-       char                    *title_str;
        const char              *cp;
        int                      match;
-       unsigned int             pslot, tslot;
+       unsigned int             pslot;
        enum mandoclevel         lvl;
 
        str_info.alloc = hash_alloc;
@@ -957,14 +949,6 @@ mpages_merge(struct mchars *mc, struct mparse *mp, int check_reachable)
        str_info.hfree = hash_free;
        str_info.key_offset = offsetof(struct str, key);
 
-       if (check_reachable) {
-               title_info.alloc = hash_alloc;
-               title_info.halloc = hash_halloc;
-               title_info.hfree = hash_free;
-               title_info.key_offset = offsetof(struct title, title);
-               ohash_init(&title_table, 6, &title_info);
-       }
-
        mpage = ohash_first(&mpages, &pslot);
        while (NULL != mpage) {
                mlinks_undupe(mpage);
@@ -1051,56 +1035,10 @@ mpages_merge(struct mchars *mc, struct mparse *mp, int check_reachable)
                else
                        parse_cat(mpage);
 
-               /*
-                * Build a title string for the file.  If it matches
-                * the location of the file, remember the title as
-                * found; else, remember it as missing.
-                */
-
-               if (check_reachable) {
-                       if (-1 == asprintf(&title_str, "%s(%s%s%s)",
-                           mpage->title, mpage->sec,
-                           '\0' == *mpage->arch ? "" : "/",
-                           mpage->arch)) {
-                               perror(NULL);
-                               exit((int)MANDOCLEVEL_SYSERR);
-                       }
-                       tslot = ohash_qlookup(&title_table, title_str);
-                       title_entry = ohash_find(&title_table, tslot);
-                       if (NULL == title_entry) {
-                               title_entry = mandoc_malloc(
-                                               sizeof(struct title));
-                               title_entry->title = title_str;
-                               title_entry->file = mandoc_strdup(
-                                   match ? "" : mpage->mlinks->file);
-                               ohash_insert(&title_table, tslot,
-                                               title_entry);
-                       } else {
-                               if (match)
-                                       *title_entry->file = '\0';
-                               free(title_str);
-                       }
-               }
-
                dbindex(mpage, mc);
                ohash_delete(&strings);
                mpage = ohash_next(&mpages, &pslot);
        }
-
-       if (check_reachable) {
-               title_entry = ohash_first(&title_table, &tslot);
-               while (NULL != title_entry) {
-                       if ('\0' != *title_entry->file)
-                               say(title_entry->file,
-                                   "Probably unreachable, title is %s",
-                                   title_entry->title);
-                       free(title_entry->title);
-                       free(title_entry->file);
-                       free(title_entry);
-                       title_entry = ohash_next(&title_table, &tslot);
-               }
-               ohash_delete(&title_table);
-       }
 }
 
 static void