aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/test/expand.test2
-rw-r--r--toys/posix/expand.c10
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;
}