]> git.draconx.ca Git - dxcommon.git/commitdiff
help_print_desc: Ensure newline is printed for empty description.
authorNick Bowler <nbowler@draconx.ca>
Thu, 13 Apr 2023 01:11:38 +0000 (21:11 -0400)
committerNick Bowler <nbowler@draconx.ca>
Thu, 13 Apr 2023 01:11:38 +0000 (21:11 -0400)
Callers expect help_print_desc to always end on a new line, so that the
next option can be printed at the start of a new line.  Currently,
however, this function does nothing for an empty description string,
leading to incorrect output unless the option name was long enough
that help_print_optstring took care of it.

Add a special case to fix that up, and a new test case.

src/help.c
tests/functions.at

index 43bb266d4df4dc8c5dc17ed7519abd49d1bdb088..f96025f1298fdcad10c29953d64cd92aef0da7bb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2021-2022 Nick Bowler
+ * Copyright © 2021-2023 Nick Bowler
  *
  * Helper functions for formatting --help program output.
  *
@@ -188,6 +188,9 @@ void help_print_desc(const struct option *opt, const char *s, int i, int w)
        if (opt)
                s = pgettext_expr(opt->name, s);
 
+       if (i && s[0] == '\0')
+               putchar('\n');
+
        for (; *s; w = 0) {
                const char *nl = strchr(s, '\n');
                int n = (nl ? nl-s : -1);
index cfd5408ee604775f35a593f3e9362bdbd4b1adf8..d2006df045889efac3ee51c6d5112fc7240c35ef 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2015, 2021-2022 Nick Bowler
+dnl Copyright © 2015, 2021-2023 Nick Bowler
 dnl
 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
 dnl This is free software: you are free to do what the fuck you want to.
@@ -32,6 +32,7 @@ TEST_TAP_SIMPLE([64-bit unsigned unpacking], [packtestu64], [], [pack])
 AT_BANNER([Help formatting functions])
 
 AT_SETUP([help_print_desc])
+AT_KEYWORDS([help])
 
 AT_SKIP_IF([test ! -x "$builddir/t/helpdesc"])
 
@@ -52,7 +53,19 @@ AT_CHECK(["$builddir/t/helpdesc" 0 0 10 5 30 20 40 40 <test.txt],
 
 AT_CLEANUP
 
+AT_SETUP([help_print_desc (empty description)])
+AT_KEYWORDS([help])
+
+AT_SKIP_IF([test ! -x "$builddir/t/helpdesc"])
+
+AT_CHECK(["$builddir/t/helpdesc" 0 0 0 20 </dev/null])
+AT_CHECK(["$builddir/t/helpdesc" 1 20 </dev/null], [0], [
+])
+
+AT_CLEANUP
+
 AT_SETUP([help_print_optstring])
+AT_KEYWORDS([help])
 
 AT_SKIP_IF([test ! -x "$builddir/t/helpopt"])
 
@@ -84,6 +97,7 @@ AT_CHECK([m4_join([ ],
 AT_CLEANUP
 
 AT_SETUP([help_print_optstring (getopt_long_only)])
+AT_KEYWORDS([help])
 
 AT_SKIP_IF([test ! -x "$builddir/t/helpopt2"])