Hi David,

Thank you for your feedback, let me comment.

On 1/26/22 11:25, David Laight wrote:
From: Walter Lozano
Sent: 26 January 2022 14:14

In order to improve compatibility with GNU grep improve support for long
options to busybox grep.

You've broken backwards compatibility by removing --color from
default builds.

You are right about this, however, I was not sure about how to proceed, since previously the code seems to silently make use of long options even if LONG_OPTS was not enabled, which seems to be odd.

I don't have problems in keeping the old behavior, but it will be odd to check for LONG_OPTS for adding the new options, but keep the --color support if LONG_OPTS are not enabled.

From my understanding either, they should be decoupled as in this patch or force LONG_OPTS to be enabled if FEATURE_GREP_CONTEXT is enabled. Since FEATURE_GREP_CONTEXT does not depend on LONG_OPTS I thought it is not the proper solution.

There is also unnecessary duplication of source code.

Just use a #define and C string concatenation to add the extra
long option strings.

Yes, I totally agree you. However I used this approach since a previous patch I submitted was rewritten in this way [1] when applying to master.

Regards,

Walter

[1] https://git.busybox.net/busybox/commit/?id=6dd6a6c42d1465d8cca2539476f6bffd5e1353dd

---

Changes in v2:
- Decouple FEATURE_GREP_CONTEXT from LONG_OPTS.

  findutils/grep.c | 43 +++++++++++++++++++++++++++++++++++++++++--
  1 file changed, 41 insertions(+), 2 deletions(-)

diff --git a/findutils/grep.c b/findutils/grep.c
index 0b72812f1..4ae070a01 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -720,17 +720,56 @@ int grep_main(int argc UNUSED_PARAM, char **argv)

        /* do normal option parsing */
  #if ENABLE_FEATURE_GREP_CONTEXT
+#if !ENABLE_LONG_OPTS
        /* -H unsets -h; -C unsets -A,-B */
-       opts = getopt32long(argv, "^"
+       opts = getopt32(argv, "^"
                OPTSTR_GREP
                        "\0"
                        "H-h:C-AB",
-               "color\0" Optional_argument "\xff",
                &pattern_head, &fopt, &max_matches,
                &lines_after, &lines_before, &Copt
                , NULL
        );
+#else
+       static const char grep_longopts[] ALIGN1 =
+               "with-filename\0"        No_argument         "H"
+               "no-filename\0"          No_argument         "h"
+               "line-number\0"          No_argument         "n"
+               "files-without-match\0"  No_argument         "L"
+               "files-with-matches\0"   No_argument         "l"
+               "count\0"                No_argument         "c"
+               "only-matching\0"        No_argument         "o"
+               "quiet\0"                No_argument         "q"
+               "silent\0"               No_argument         "q"
+               "invert-match\0"         No_argument         "v"
+               "no-messages\0"          No_argument         "s"
+               "recursive\0"            No_argument         "r"
+               "ignore-case\0"          No_argument         "i"
+               "word-regexp\0"          No_argument         "w"
+               "line-regexp\0"          No_argument         "x"
+               "fixed-strings\0"        No_argument         "F"
+               "extended-regexp\0"      No_argument         "E"
+               "null-data\0"            No_argument         "z"
+               "max-count\0"            Required_argument   "m"
+               "after-context\0"        Required_argument   "A"
+               "before-context\0"       Required_argument   "B"
+               "context\0"              Required_argument   "C"
+               "regexp\0"               Required_argument   "e"
+               "file\0"                 Required_argument   "f"
+               "color\0"                Optional_argument   "\xff"
+               ;

+       /* -H unsets -h; -C unsets -A,-B */
+       opts = getopt32long(argv, "^"
+               OPTSTR_GREP
+                       "\0"
+                       "H-h:C-AB",
+               grep_longopts,
+               &pattern_head, &fopt, &max_matches,
+               &lines_after, &lines_before, &Copt
+               , NULL
+       );
+#endif
        if (opts & OPT_C) {
                /* -C unsets prev -A and -B, but following -A or -B
                 * may override it */
--
2.25.1

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, 
UK
Registration No: 1397386 (Wales)


--
Walter Lozano
Collabora Ltd.
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to