[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