aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorTomas Heinrich <heinrich.tomas@gmail.com>2010-03-26 09:46:07 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-03-26 09:46:07 +0100
commit968951fd0ced7d0d4b81c0ee4466eada93ae4128 (patch)
treebe41b25123722927a266cd960140a82ae4ed5db5 /coreutils
parent1abc07dcca237e6b5c98fea740e59d59c801c9e2 (diff)
downloadbusybox-w32-968951fd0ced7d0d4b81c0ee4466eada93ae4128.tar.gz
busybox-w32-968951fd0ced7d0d4b81c0ee4466eada93ae4128.tar.bz2
busybox-w32-968951fd0ced7d0d4b81c0ee4466eada93ae4128.zip
unexpand: fix "a b"\n" input case
Signed-off-by: Tomas Heinrich <heinrich.tomas@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/expand.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/coreutils/expand.c b/coreutils/expand.c
index 60ac9f568..cfb1e25d9 100644
--- a/coreutils/expand.c
+++ b/coreutils/expand.c
@@ -81,12 +81,13 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
81 81
82 while (*ptr) { 82 while (*ptr) {
83 unsigned n; 83 unsigned n;
84 unsigned len; 84 unsigned len = 0;
85 85
86 while (*ptr == ' ') { 86 while (*ptr == ' ') {
87 column++;
88 ptr++; 87 ptr++;
88 len++;
89 } 89 }
90 column += len;
90 if (*ptr == '\t') { 91 if (*ptr == '\t') {
91 column += tab_size - (column % tab_size); 92 column += tab_size - (column % tab_size);
92 ptr++; 93 ptr++;
@@ -94,16 +95,18 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
94 } 95 }
95 96
96 n = column / tab_size; 97 n = column / tab_size;
97 column = column % tab_size; 98 if (n) {
98 while (n--) 99 len = column = column % tab_size;
99 putchar('\t'); 100 while (n--)
101 putchar('\t');
102 }
100 103
101 if ((opt & OPT_INITIAL) && ptr != line) { 104 if ((opt & OPT_INITIAL) && ptr != line) {
102 printf("%*s%s", column, "", ptr); 105 printf("%*s%s", len, "", ptr);
103 break; 106 break;
104 } 107 }
105 n = strcspn(ptr, "\t "); 108 n = strcspn(ptr, "\t ");
106 printf("%*s%.*s", column, "", n, ptr); 109 printf("%*s%.*s", len, "", n, ptr);
107# if ENABLE_FEATURE_ASSUME_UNICODE 110# if ENABLE_FEATURE_ASSUME_UNICODE
108 { 111 {
109 char c; 112 char c;