aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/seq.test14
-rw-r--r--toys/lsb/seq.c4
2 files changed, 16 insertions, 2 deletions
diff --git a/tests/seq.test b/tests/seq.test
index 3f3b4099..4d23f8e2 100755
--- a/tests/seq.test
+++ b/tests/seq.test
@@ -26,3 +26,17 @@ testing "seq separator -" "seq -s - 1 3" "1-2-3\n" "" ""
testing "seq format string" 'seq -f %+01g -10 5 10' "-10\n-5\n+0\n+5\n+10\n" "" ""
testing "seq separator and format string" "seq -f \%03g -s \; 5 -1 0" "005;004;003;002;001;000\n" "" ""
+# Test -f format filtering
+for i in %f %e %g "boo %f yah" "% f" %-1.2f %+-f "%+ - f" %.2f %3.f "%'.2f" \
+ %%%f%% %%%f%%%
+do
+ testing "seq filter -f \"$i\"" "seq -f \"$i\" 1 3 > /dev/null && echo yes" \
+ "yes\n" "" ""
+done
+# Test -f format filtering failures
+for i in %d %s "" "boo %f %f yah" "%*f" %-1.2.3f '%2$f' %1-f "%1 f" \
+ %2..2f
+do
+ testing "seq filter reject -f '$i'" \
+ "seq -f '$i' 1 3 2>/dev/null || echo no" "no\n" "" ""
+done
diff --git a/toys/lsb/seq.c b/toys/lsb/seq.c
index 322940b3..f1ca0d00 100644
--- a/toys/lsb/seq.c
+++ b/toys/lsb/seq.c
@@ -17,7 +17,7 @@ config SEQ
to 1. Two arguments are used as first and last. Arguments can be
negative or floating point.
- -f Use fmt_str as a floating point format string
+ -f Use fmt_str as a printf-style floating point format string
-s Use sep_str as separator, default is a newline character
*/
@@ -47,7 +47,7 @@ static void insanitize(char *f)
}
// The @ is a byte offset, not utf8 chars. Waiting for somebody to complain...
- if (*s) error_exit("bad -f '%s'@%d", f, s-f+1);
+ if (*s || !found) error_exit("bad -f '%s'@%d", f, s-f+1);
}
void seq_main(void)