If a single page references the same non-existent manual more than
authorschwarze <schwarze@openbsd.org>
Sun, 2 Jul 2017 21:17:12 +0000 (21:17 +0000)
committerschwarze <schwarze@openbsd.org>
Sun, 2 Jul 2017 21:17:12 +0000 (21:17 +0000)
once, print "(N times)" after the message "referenced manual not
found", to lessen the risk that people fix the first instance and
miss the others; jmc@ confirmed that this is useful.

usr.bin/mandoc/main.c
usr.bin/mandoc/mandoc_xr.c
usr.bin/mandoc/mandoc_xr.h

index ed40dff..20b6b1e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.200 2017/07/02 15:31:48 schwarze Exp $ */
+/*     $OpenBSD: main.c,v 1.201 2017/07/02 21:17:12 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -814,7 +814,11 @@ check_xr(const char *file)
                        continue;
                if (fs_search(&search, &paths, 1, &xr->name, NULL, &sz))
                        continue;
-               mandoc_asprintf(&cp, "Xr %s %s", xr->name, xr->sec);
+               if (xr->count == 1)
+                       mandoc_asprintf(&cp, "Xr %s %s", xr->name, xr->sec);
+               else
+                       mandoc_asprintf(&cp, "Xr %s %s (%d times)",
+                           xr->name, xr->sec, xr->count);
                mmsg(MANDOCERR_XR_BAD, MANDOCLEVEL_STYLE,
                    file, xr->line, xr->pos + 1, cp);
                free(cp);
index a856469..a4b2e90 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandoc_xr.c,v 1.2 2017/07/02 15:31:48 schwarze Exp $ */
+/*     $OpenBSD: mandoc_xr.c,v 1.3 2017/07/02 21:17:12 schwarze Exp $ */
 /*
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -81,6 +81,7 @@ mandoc_xr_add(const char *sec, const char *name, int line, int pos)
        xr->name = xr->hashkey + ssz;
        xr->line = line;
        xr->pos = pos;
+       xr->count = 1;
        memcpy(xr->sec, sec, ssz);
        memcpy(xr->name, name, nsz);
 
@@ -97,6 +98,7 @@ mandoc_xr_add(const char *sec, const char *name, int line, int pos)
                return 0;
        }
 
+       oxr->count++;
        ret = (oxr->line == -1) ^ (xr->line == -1);
        if (xr->line == -1)
                oxr->line = -1;
index 4bd8aba..708f502 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandoc_xr.h,v 1.2 2017/07/02 15:31:48 schwarze Exp $ */
+/*     $OpenBSD: mandoc_xr.h,v 1.3 2017/07/02 21:17:12 schwarze Exp $ */
 /*
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -21,6 +21,7 @@ struct        mandoc_xr {
        char             *name;
        int               line;  /* Or -1 for this page's own names. */
        int               pos;
+       int               count;
        char              hashkey[];
 };