busybox --list option. +140 bytes. Rob wanted it.
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 21 Apr 2010 01:02:57 +0000 (21:02 -0400)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 21 Apr 2010 01:02:57 +0000 (21:02 -0400)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/appletlib.c

index 7a5e7ae..a8cd8e6 100644 (file)
@@ -595,6 +595,17 @@ static void check_suid(int applet_no)
 
 
 #if ENABLE_FEATURE_INSTALLER
+static const char usr_bin [] ALIGN1 = "/usr/bin/";
+static const char usr_sbin[] ALIGN1 = "/usr/sbin/";
+static const char *const install_dir[] = {
+       &usr_bin [8], /* "/" */
+       &usr_bin [4], /* "/bin/" */
+       &usr_sbin[4], /* "/sbin/" */
+       usr_bin,
+       usr_sbin
+};
+
+
 /* create (sym)links for each applet */
 static void install_links(const char *busybox, int use_symbolic_links,
                char *custom_install_dir)
@@ -602,16 +613,6 @@ static void install_links(const char *busybox, int use_symbolic_links,
        /* directory table
         * this should be consistent w/ the enum,
         * busybox.h::bb_install_loc_t, or else... */
-       static const char usr_bin [] ALIGN1 = "/usr/bin";
-       static const char usr_sbin[] ALIGN1 = "/usr/sbin";
-       static const char *const install_dir[] = {
-               &usr_bin [8], /* "", equivalent to "/" for concat_path_file() */
-               &usr_bin [4], /* "/bin" */
-               &usr_sbin[4], /* "/sbin" */
-               usr_bin,
-               usr_sbin
-       };
-
        int (*lf)(const char *, const char *);
        char *fpc;
        unsigned i;
@@ -635,8 +636,8 @@ static void install_links(const char *busybox, int use_symbolic_links,
        }
 }
 #else
-#define install_links(x,y,z) ((void)0)
-#endif /* FEATURE_INSTALLER */
+# define install_links(x,y,z) ((void)0)
+#endif
 
 /* If we were called as "busybox..." */
 static int busybox_main(char **argv)
@@ -657,19 +658,20 @@ static int busybox_main(char **argv)
                full_write2_str(bb_banner); /* reuse const string */
                full_write2_str(" multi-call binary.\n"); /* reuse */
                full_write2_str(
-                      "Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko\n"
-                      "and others. Licensed under GPLv2.\n"
-                      "See source distribution for full notice.\n"
-                      "\n"
-                      "Usage: busybox [function] [arguments]...\n"
-                      "   or: function [arguments]...\n"
-                      "\n"
-                      "\tBusyBox is a multi-call binary that combines many common Unix\n"
-                      "\tutilities into a single executable.  Most people will create a\n"
-                      "\tlink to busybox for each function they wish to use and BusyBox\n"
-                      "\twill act like whatever it was invoked as.\n"
-                      "\n"
-                      "Currently defined functions:\n");
+                       "Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko\n"
+                       "and others. Licensed under GPLv2.\n"
+                       "See source distribution for full notice.\n"
+                       "\n"
+                       "Usage: busybox [function] [arguments]...\n"
+                       "   or: function [arguments]...\n"
+                       "\n"
+                       "\tBusyBox is a multi-call binary that combines many common Unix\n"
+                       "\tutilities into a single executable.  Most people will create a\n"
+                       "\tlink to busybox for each function they wish to use and BusyBox\n"
+                       "\twill act like whatever it was invoked as.\n"
+                       "\n"
+                       "Currently defined functions:\n"
+               );
                col = 0;
                a = applet_names;
                /* prevent last comma to be in the very last pos */
@@ -694,6 +696,23 @@ static int busybox_main(char **argv)
                return 0;
        }
 
+       if (strncmp(argv[1], "--list", 6) == 0) {
+               unsigned i = 0;
+               const char *a = applet_names;
+               dup2(1, 2);
+               while (*a) {
+#if ENABLE_FEATURE_INSTALLER
+                       if (argv[1][6]) /* --list-path? */
+                               full_write2_str(install_dir[APPLET_INSTALL_LOC(i)] + 1);
+#endif
+                       full_write2_str(a);
+                       full_write2_str("\n");
+                       i++;
+                       a += strlen(a) + 1;
+               }
+               return 0;
+       }
+
        if (ENABLE_FEATURE_INSTALLER && strcmp(argv[1], "--install") == 0) {
                int use_symbolic_links;
                const char *busybox;