diff options
-rw-r--r-- | scripts/test/expand.test | 2 | ||||
-rw-r--r-- | toys/posix/expand.c | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/scripts/test/expand.test b/scripts/test/expand.test index bb0ca083..510f89f5 100644 --- a/scripts/test/expand.test +++ b/scripts/test/expand.test @@ -11,7 +11,7 @@ testing "expand default" "expand input" " foo bar\n" "\tfoo\tbar\n" " testing "expand default stdin" "expand" " foo bar\n" "" "\tfoo\tbar\n" testing "expand single" "expand -t 2 input" " foo bar\n" "\tfoo\tbar\n" "" testing "expand tablist" "expand -t 5,10,12 input" " foo bar foo\n" "\tfoo\tbar\tfoo\n" "" -testing "expand backspace" "expand input" "foobarf bar\n" "foobarfoo\b\b\tbar\n" "" +testing "expand backspace" "expand input" "foobarfoo\b\b bar\n" "foobarfoo\b\b\tbar\n" "" # advanced tests diff --git a/toys/posix/expand.c b/toys/posix/expand.c index b29a98f4..922f5e67 100644 --- a/toys/posix/expand.c +++ b/toys/posix/expand.c @@ -45,9 +45,13 @@ static void expand_file(int fd, char *name) if (!len) break; for (i=0; i<len; i++) { int len = 1; - if (toybuf[i] != '\t') { - if (EOF == putc(toybuf[i], stdout)) perror_exit(0); - if (toybuf[i] == '\n') { + char c = toybuf[i]; + + if (c != '\t') { + if (EOF == putc(c, stdout)) perror_exit(0); + + if (c == '\b' && x) len = -1; + if (c == '\n') { x = stop = 0; continue; } |