[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    [PATCH] unexpand: correct behavior for --first-only --tabs=4
From:       Mark Edgar <medgar123 () gmail ! com>
Date:       2020-05-30 17:05:46
Message-ID: CABHMh_1va-2r=C=aE2MyFRQo=J4+kMt_qVQbbVe9R0a7mbR44Q () mail ! gmail ! com
[Download RAW message or body]

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@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic