diff options
author | Mark Edgar <medgar123@gmail.com> | 2020-05-30 19:05:46 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-06-09 15:40:49 +0200 |
commit | b2ab920716f640cbaaf486512ba177f4e0b597c5 (patch) | |
tree | ae3c6cb964bedf4f59f917c93172f8c9197af0d2 | |
parent | 9b4a9d96b89f06355ad9551d782d34506699aac8 (diff) | |
download | busybox-w32-b2ab920716f640cbaaf486512ba177f4e0b597c5.tar.gz busybox-w32-b2ab920716f640cbaaf486512ba177f4e0b597c5.tar.bz2 busybox-w32-b2ab920716f640cbaaf486512ba177f4e0b597c5.zip |
unexpand: correct behavior for --first-only --tabs=4
Prior to the patch, both -f and --first-only are in all cases either
no-op or ignored.
Without --tabs, --first-only is the default so specifying it is a no-op.
With --tabs, --all is implied, and --first-only is intended to reset this.
function old new delta
expand_main 690 694 +4
Signed-off-by: Mark Edgar <medgar123@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/expand.c | 8 | ||||
-rwxr-xr-x | testsuite/unexpand.tests | 33 |
2 files changed, 37 insertions, 4 deletions
diff --git a/coreutils/expand.c b/coreutils/expand.c index 4fa974df8..5f5993921 100644 --- a/coreutils/expand.c +++ b/coreutils/expand.c | |||
@@ -160,7 +160,7 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt) | |||
160 | putchar('\t'); | 160 | putchar('\t'); |
161 | } | 161 | } |
162 | 162 | ||
163 | if ((opt & OPT_INITIAL) && ptr != line) { | 163 | if (!(opt & OPT_ALL) && ptr != line) { |
164 | printf("%*s%s", len, "", ptr); | 164 | printf("%*s%s", len, "", ptr); |
165 | break; | 165 | break; |
166 | } | 166 | } |
@@ -207,13 +207,13 @@ int expand_main(int argc UNUSED_PARAM, char **argv) | |||
207 | "ft:a" | 207 | "ft:a" |
208 | "\0" | 208 | "\0" |
209 | "ta" /* -t NUM sets -a */, | 209 | "ta" /* -t NUM sets -a */, |
210 | "first-only\0" No_argument "i" | 210 | "first-only\0" No_argument "f" |
211 | "tabs\0" Required_argument "t" | 211 | "tabs\0" Required_argument "t" |
212 | "all\0" No_argument "a" | 212 | "all\0" No_argument "a" |
213 | , &opt_t | 213 | , &opt_t |
214 | ); | 214 | ); |
215 | /* -f --first-only is the default */ | 215 | /* -t implies -a, but an explicit -f overrides */ |
216 | if (!(opt & OPT_ALL)) opt |= OPT_INITIAL; | 216 | if (opt & OPT_INITIAL) opt &= ~OPT_ALL; |
217 | } | 217 | } |
218 | tab_size = xatou_range(opt_t, 1, UINT_MAX); | 218 | tab_size = xatou_range(opt_t, 1, UINT_MAX); |
219 | 219 | ||
diff --git a/testsuite/unexpand.tests b/testsuite/unexpand.tests index 7b326dc2c..4ab693ec8 100755 --- a/testsuite/unexpand.tests +++ b/testsuite/unexpand.tests | |||
@@ -31,6 +31,39 @@ testing "unexpand case 7" "unexpand" \ | |||
31 | testing "unexpand case 8" "unexpand" \ | 31 | testing "unexpand case 8" "unexpand" \ |
32 | "a b\n" "" "a b\n" \ | 32 | "a b\n" "" "a b\n" \ |
33 | 33 | ||
34 | testcase() | ||
35 | { | ||
36 | testing "unexpand flags $*" "unexpand $*" \ | ||
37 | "$want" "" ' a b c' | ||
38 | } | ||
39 | |||
40 | # tabs=8, Convert only leading sequences of blanks | ||
41 | want='\ta b c' | ||
42 | testcase | ||
43 | testcase -f | ||
44 | testcase -f -t8 | ||
45 | testcase -t8 -f | ||
46 | testcase -t8 --first-only | ||
47 | |||
48 | # tabs=8, Convert all blanks | ||
49 | want='\ta\tb c' | ||
50 | testcase -a | ||
51 | testcase -t8 | ||
52 | testcase -a -t8 | ||
53 | |||
54 | # tabs=4, Convert all blanks | ||
55 | want='\t\ta\t\tb\t c' | ||
56 | testcase -t4 | ||
57 | testcase -a -t4 | ||
58 | testcase -t4 -a | ||
59 | |||
60 | # tabs=4, Convert only leading sequences of blanks | ||
61 | want='\t\ta b c' | ||
62 | testcase -t4 -f | ||
63 | testcase -f -t4 | ||
64 | testcase -t4 --first-only | ||
65 | testcase --first-only -t4 | ||
66 | |||
34 | test x"$CONFIG_UNICODE_SUPPORT" = x"y" \ | 67 | test x"$CONFIG_UNICODE_SUPPORT" = x"y" \ |
35 | && test x"$CONFIG_UNICODE_USING_LOCALE" != x"y" \ | 68 | && test x"$CONFIG_UNICODE_USING_LOCALE" != x"y" \ |
36 | && testing "unexpand with unicode characher 0x394" "unexpand" \ | 69 | && testing "unexpand with unicode characher 0x394" "unexpand" \ |