unexpand: fix "a b"\n" input case
authorTomas Heinrich <heinrich.tomas@gmail.com>
Fri, 26 Mar 2010 08:46:07 +0000 (09:46 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 26 Mar 2010 08:46:07 +0000 (09:46 +0100)
Signed-off-by: Tomas Heinrich <heinrich.tomas@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/expand.c
testsuite/unexpand.tests

index 60ac9f56834fafb34de09b488507ff7eb9c5c378..cfb1e25d9216eebbd72593d18433233aa53afe00 100644 (file)
@@ -81,12 +81,13 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
 
                while (*ptr) {
                        unsigned n;
-                       unsigned len;
+                       unsigned len = 0;
 
                        while (*ptr == ' ') {
-                               column++;
                                ptr++;
+                               len++;
                        }
+                       column += len;
                        if (*ptr == '\t') {
                                column += tab_size - (column % tab_size);
                                ptr++;
@@ -94,16 +95,18 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
                        }
 
                        n = column / tab_size;
-                       column = column % tab_size;
-                       while (n--)
-                               putchar('\t');
+                       if (n) {
+                               len = column = column % tab_size;
+                               while (n--)
+                                       putchar('\t');
+                       }
 
                        if ((opt & OPT_INITIAL) && ptr != line) {
-                               printf("%*s%s", column, "", ptr);
+                               printf("%*s%s", len, "", ptr);
                                break;
                        }
                        n = strcspn(ptr, "\t ");
-                       printf("%*s%.*s", column, "", n, ptr);
+                       printf("%*s%.*s", len, "", n, ptr);
 # if ENABLE_FEATURE_ASSUME_UNICODE
                        {
                                char c;
index 5c2a29b5f50eb3932a7d97dd5962b51c7c2f9e8a..1af2fdc5fdaf30c3edc289f3f89d4cef9bab4094 100755 (executable)
@@ -27,6 +27,9 @@ testing "unexpand case 6" "unexpand" \
 testing "unexpand case 7" "unexpand" \
        "123\t 45678\n" "" "123 \t 45678\n" \
 
+testing "unexpand case 8" "unexpand" \
+       "a b\n" "" "a b\n" \
+
 testing "unexpand with unicode characher 0x394" "unexpand" \
        "1ΔΔΔ5\t99999\n" "" "1ΔΔΔ5   99999\n" \