summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coreutils/expand.c8
-rwxr-xr-xtestsuite/unexpand.tests33
2 files changed, 37 insertions, 4 deletions
diff --git a/coreutils/expand.c b/coreutils/expand.c
index 4fa974d..5f59939 100644
--- a/coreutils/expand.c
+++ b/coreutils/expand.c
@@ -160,7 +160,7 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
putchar('\t');
}
- if ((opt & OPT_INITIAL) && ptr != line) {
+ if (!(opt & OPT_ALL) && ptr != line) {
printf("%*s%s", len, "", ptr);
break;
}
@@ -207,13 +207,13 @@ int expand_main(int argc UNUSED_PARAM, char **argv)
"ft:a"
"\0"
"ta" /* -t NUM sets -a */,
- "first-only\0" No_argument "i"
+ "first-only\0" No_argument "f"
"tabs\0" Required_argument "t"
"all\0" No_argument "a"
, &opt_t
);
- /* -f --first-only is the default */
- if (!(opt & OPT_ALL)) opt |= OPT_INITIAL;
+ /* -t implies -a, but an explicit -f overrides */
+ if (opt & OPT_INITIAL) opt &= ~OPT_ALL;
}
tab_size = xatou_range(opt_t, 1, UINT_MAX);
diff --git a/testsuite/unexpand.tests b/testsuite/unexpand.tests
index 7b326dc..4ab693e 100755
--- a/testsuite/unexpand.tests
+++ b/testsuite/unexpand.tests
@@ -31,6 +31,39 @@ testing "unexpand case 7" "unexpand" \
testing "unexpand case 8" "unexpand" \
"a b\n" "" "a b\n" \
+testcase()
+{
+ testing "unexpand flags $*" "unexpand $*" \
+ "$want" "" ' a b c'
+}
+
+# tabs=8, Convert only leading sequences of blanks
+want='\ta b c'
+testcase
+testcase -f
+testcase -f -t8
+testcase -t8 -f
+testcase -t8 --first-only
+
+# tabs=8, Convert all blanks
+want='\ta\tb c'
+testcase -a
+testcase -t8
+testcase -a -t8
+
+# tabs=4, Convert all blanks
+want='\t\ta\t\tb\t c'
+testcase -t4
+testcase -a -t4
+testcase -t4 -a
+
+# tabs=4, Convert only leading sequences of blanks
+want='\t\ta b c'
+testcase -t4 -f
+testcase -f -t4
+testcase -t4 --first-only
+testcase --first-only -t4
+
test x"$CONFIG_UNICODE_SUPPORT" = x"y" \
&& test x"$CONFIG_UNICODE_USING_LOCALE" != x"y" \
&& testing "unexpand with unicode characher 0x394" "unexpand" \