]> diplodocus.org Git - nmh/commitdiff
Fixed format engine output of negative number with 0 fill character.
authorDavid Levine <levinedl@acm.org>
Thu, 18 Dec 2014 02:43:37 +0000 (20:43 -0600)
committerDavid Levine <levinedl@acm.org>
Thu, 18 Dec 2014 02:43:37 +0000 (20:43 -0600)
Improper output was reported by Bob Carragher.

sbr/fmt_scan.c
test/format/test-functions

index 5732af910c73cd0ac39e113a805aeb4d64a06689..97a4a05a83a78c370eb7b0925f1a0cc0fb6294a3 100644 (file)
@@ -93,13 +93,18 @@ cpnumber(charstring_t dest, int num, unsigned int wid, char fill, size_t max) {
            charstring_push_back (rev, '?');
        } else if (num < 0  &&  wid > 0) {
            /* Shouldn't need the wid > 0 check, that's why the condition
-               at the top checks wid < max-1 when num < 0. */
-           charstring_push_back (rev, '-');
+              at the top checks wid < max-1 when num < 0. */
            --wid;
+           if (fill == ' ') {
+               charstring_push_back (rev, '-');
+           }
        }
        while (wid-- > 0  &&  fill != 0) {
            charstring_push_back (rev, fill);
        }
+       if (num < 0  &&  fill == '0') {
+           charstring_push_back (rev, '-');
+       }
 
        {
            /* Output the string in reverse. */
index 9cfaeeebb54da27bb99fb22d520894ba26e440fc..b757e8e005273cd462a42921ce2c384b238cb844 100755 (executable)
@@ -12,18 +12,29 @@ fi
 . "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
-expected="$MH_TEST_DIR/$$.expected"
-actual="$MH_TEST_DIR/$$.actual"
+expected="$MH_TEST_DIR/test-functions$$.expected"
+actual="$MH_TEST_DIR/test-functions$$.actual"
 
 # check sday when day of week is specified
-echo 1 >"$expected"
+printf '1\n' >"$expected"
 fmttest -raw -format '%(sday{text})' 'Fri Sep 12 20:02 2014' >"$actual"
 check "$expected" "$actual"
 
 # check sday when day of week is not specified
-echo 0 >"$expected"
+printf '0\n' >"$expected"
 fmttest -raw -format '%(sday{text})' 'Sep 12 20:02 2014' >"$actual"
 check "$expected" "$actual"
 
+# check negative number, without padding
+printf '%s\n' ' -42' >"$expected"
+fmttest -raw -format '%4(minus -42)' 0 >"$actual"
+check "$expected" "$actual"
+
+# check negative number, with padding
+# Output was "0-42" with nmh 1.6 and earlier.
+printf '%s\n' -042 >"$expected"
+fmttest -raw -format '%04(minus -42)' 0 >"$actual"
+check "$expected" "$actual"
+
 
 exit $failed