aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Edgar <medgar123@gmail.com>2020-05-30 19:05:46 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2020-06-09 15:40:49 +0200
commitb2ab920716f640cbaaf486512ba177f4e0b597c5 (patch)
treeae3c6cb964bedf4f59f917c93172f8c9197af0d2
parent9b4a9d96b89f06355ad9551d782d34506699aac8 (diff)
downloadbusybox-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.c8
-rwxr-xr-xtestsuite/unexpand.tests33
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" \
31testing "unexpand case 8" "unexpand" \ 31testing "unexpand case 8" "unexpand" \
32 "a b\n" "" "a b\n" \ 32 "a b\n" "" "a b\n" \
33 33
34testcase()
35{
36 testing "unexpand flags $*" "unexpand $*" \
37 "$want" "" ' a b c'
38}
39
40# tabs=8, Convert only leading sequences of blanks
41want='\ta b c'
42testcase
43testcase -f
44testcase -f -t8
45testcase -t8 -f
46testcase -t8 --first-only
47
48# tabs=8, Convert all blanks
49want='\ta\tb c'
50testcase -a
51testcase -t8
52testcase -a -t8
53
54# tabs=4, Convert all blanks
55want='\t\ta\t\tb\t c'
56testcase -t4
57testcase -a -t4
58testcase -t4 -a
59
60# tabs=4, Convert only leading sequences of blanks
61want='\t\ta b c'
62testcase -t4 -f
63testcase -f -t4
64testcase -t4 --first-only
65testcase --first-only -t4
66
34test x"$CONFIG_UNICODE_SUPPORT" = x"y" \ 67test 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" \