[PATCH] unexpand: correct behavior for --first-only --tabs=4
Denys Vlasenko
vda.linux at googlemail.com
Tue Jun 9 13:41:22 UTC 2020
Applied, thanks!
On Sat, May 30, 2020 at 7:06 PM Mark Edgar <medgar123 at gmail.com> wrote:
>
> 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.
> ---
> coreutils/expand.c | 8 ++++----
> testsuite/unexpand.tests | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/coreutils/expand.c b/coreutils/expand.c
> index 4fa974df8..dd98c1c03 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 7b326dc2c..aeaae13f0 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" \
> --
> 2.26.2
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list