ISO C99 7.19.2.5 doesn't like mixing putchar(3) and putwchar(3) on
authorschwarze <schwarze@openbsd.org>
Fri, 8 Jul 2016 22:27:58 +0000 (22:27 +0000)
committerschwarze <schwarze@openbsd.org>
Fri, 8 Jul 2016 22:27:58 +0000 (22:27 +0000)
the same stream, and actually, it fails spectacularly on glibc.
Portability issue pointed out by Svyatoslav Mishyn <juef at openmailbox
dot org> after testing on Void Linux.

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

index 8cadeef..1a4092f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.172 2016/04/14 20:54:15 schwarze Exp $ */
+/*     $OpenBSD: main.c,v 1.173 2016/07/08 22:27:58 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2012, 2014-2016 Ingo Schwarze <schwarze@openbsd.org>
@@ -438,7 +438,7 @@ main(int argc, char *argv[])
                                    conf.output.synopsisonly);
 
                        if (argc > 1 && curp.outtype <= OUTT_UTF8)
-                               ascii_sepline(curp.outdata);
+                               terminal_sepline(curp.outdata);
                } else if (rc < MANDOCLEVEL_ERROR)
                        rc = MANDOCLEVEL_ERROR;
 
index a295d41..ee2cbf1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.h,v 1.19 2015/11/07 13:57:55 schwarze Exp $ */
+/*     $OpenBSD: main.h,v 1.20 2016/07/08 22:27:58 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -43,7 +43,6 @@ void           *locale_alloc(const struct manoutput *);
 void            *utf8_alloc(const struct manoutput *);
 void            *ascii_alloc(const struct manoutput *);
 void             ascii_free(void *);
-void             ascii_sepline(void *);
 
 void            *pdf_alloc(const struct manoutput *);
 void            *ps_alloc(const struct manoutput *);
@@ -51,3 +50,4 @@ void            pspdf_free(void *);
 
 void             terminal_mdoc(void *, const struct roff_man *);
 void             terminal_man(void *, const struct roff_man *);
+void             terminal_sepline(void *);
index bf8a0a5..e2e3c25 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: term_ascii.c,v 1.38 2015/11/12 21:49:29 schwarze Exp $ */
+/*     $OpenBSD: term_ascii.c,v 1.39 2016/07/08 22:27:58 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -151,18 +151,17 @@ ascii_setwidth(struct termp *p, int iop, int width)
 }
 
 void
-ascii_sepline(void *arg)
+terminal_sepline(void *arg)
 {
        struct termp    *p;
        size_t           i;
 
        p = (struct termp *)arg;
-       p->line += 3;
-       putchar('\n');
+       (*p->endline)(p);
        for (i = 0; i < p->defrmargin; i++)
-               putchar('-');
-       putchar('\n');
-       putchar('\n');
+               (*p->letter)(p, '-');
+       (*p->endline)(p);
+       (*p->endline)(p);
 }
 
 static size_t