Make cp and mv optionally preserve hard links.
[oweals/busybox.git] / applets / applets.c
index c2ccb88faf05795402f230046f82bcdc8d602bbd..f3e56a9f39b6563cd1dd88386223109561c708fe 100644 (file)
 #undef PROTOTYPES
 #include "applets.h"
 
-#define bb_need_full_version
-#define BB_DECLARE_EXTERN
-#include "messages.c"
-
 struct BB_applet *applet_using;
 
 /* The -1 arises because of the {0,NULL,0,-1} entry above. */
@@ -71,7 +67,7 @@ static int applet_name_compare(const void *x, const void *y)
        return strcmp(name, applet->name);
 }
 
-extern size_t NUM_APPLETS;
+extern const size_t NUM_APPLETS;
 
 struct BB_applet *find_applet_by_name(const char *name)
 {
@@ -81,13 +77,32 @@ struct BB_applet *find_applet_by_name(const char *name)
 
 void run_applet_by_name(const char *name, int argc, char **argv)
 {
+       static int recurse_level = 0;
+       extern int been_there_done_that; /* From busybox.c */
+
+       recurse_level++;
        /* Do a binary search to find the applet entry given the name. */
        if ((applet_using = find_applet_by_name(name)) != NULL) {
                applet_name = applet_using->name;
-               if (argv[1] && strcmp(argv[1], "--help") == 0)
-                       show_usage();
+               if (argv[1] && strcmp(argv[1], "--help") == 0) {
+                       if (strcmp(applet_using->name, "busybox")==0) {
+                               if(argv[2])
+                                 applet_using = find_applet_by_name(argv[2]);
+                                else
+                                 applet_using = NULL;
+                       }
+                       if(applet_using)
+                               show_usage();
+                       been_there_done_that=1;
+                       busybox_main(0, NULL);
+               }
                exit((*(applet_using->main)) (argc, argv));
        }
+       /* Just in case they have renamed busybox - Check argv[1] */
+       if (recurse_level == 1) {
+               run_applet_by_name("busybox", argc, argv);
+       }
+       recurse_level--;
 }