xargs: support --no-run-if-empty (synonym to -r)
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 3 Mar 2011 08:51:57 +0000 (09:51 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 3 Mar 2011 08:51:57 +0000 (09:51 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
findutils/xargs.c

index 0ec80f8092c9fc2e75f584fb6f15e2e91534e5df..967737133685dc56646b6d279adc507f873c7139 100644 (file)
  * http://www.opengroup.org/onlinepubs/007904975/utilities/xargs.html
  */
 
-//applet:IF_XARGS(APPLET_NOEXEC(xargs, xargs, BB_DIR_USR_BIN, BB_SUID_DROP, xargs))
-
-//kbuild:lib-$(CONFIG_XARGS) += xargs.o
-
 //config:config XARGS
 //config:      bool "xargs"
 //config:      default y
 //config:        instead of whitespace, and the quotes and backslash
 //config:        are not special.
 
+//applet:IF_XARGS(APPLET_NOEXEC(xargs, xargs, BB_DIR_USR_BIN, BB_SUID_DROP, xargs))
+
+//kbuild:lib-$(CONFIG_XARGS) += xargs.o
+
 #include "libbb.h"
 
 /* This is a NOEXEC applet. Be very careful! */
@@ -89,7 +89,9 @@ struct globals {
        int idx;
 } FIX_ALIASING;
 #define G (*(struct globals*)&bb_common_bufsiz1)
-#define INIT_G() do { } while (0)
+#define INIT_G() do { \
+       G.eof_str = NULL; /* need to clear by hand because we are NOEXEC applet */ \
+} while (0)
 
 
 /*
@@ -412,7 +414,12 @@ int xargs_main(int argc, char **argv)
 
        INIT_G();
 
-       G.eof_str = NULL;
+#if ENABLE_DESKTOP && ENABLE_LONG_OPTS
+       /* For example, Fedora's build system uses --no-run-if-empty */
+       applet_long_options =
+               "no-run-if-empty\0" No_argument "r"
+               ;
+#endif
        opt = getopt32(argv, OPTION_STR, &max_args, &max_chars, &G.eof_str, &G.eof_str);
 
        /* -E ""? You may wonder why not just omit -E?