diff --git a/src/util.c b/src/util.c index 053184e..c1c8660 100644 --- a/src/util.c +++ b/src/util.c @@ -1397,12 +1397,15 @@ output_1_line (char const *base, char const *limit, char const *flag_format, break; case '\b': - column--; - if (column < 0) + if (0 < column) + column--; + else if (0 < tab) { tab--; column = tab_size - 1; } + else + continue; putc (c, out); break; diff --git a/tests/Makefile.am b/tests/Makefile.am index db757bd..5eb725a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -10,6 +10,7 @@ TESTS = \ colliding-file-names \ diff3 \ excess-slash \ + expand-tabs \ help-version \ ifdef \ invalid-re \ diff --git a/tests/expand-tabs b/tests/expand-tabs new file mode 100755 index 0000000..ae4c0fa --- /dev/null +++ b/tests/expand-tabs @@ -0,0 +1,19 @@ +#!/bin/sh +# Test tab expansion. + +. "${srcdir=.}/init.sh"; path_prepend_ ../src + +fail=0 + +cat >exp <<'EOF' || framework_failure_ +0a1 +> x +EOF + +for p in '\b\tx\n' '\b x\n' '\b \tx\n'; do + printf "$p" | returns_ 1 diff -t /dev/null - >out || fail=1 +done + +compare exp out || fail=1 + +Exit $fail