summaryrefslogtreecommitdiff
path: root/applets
diff options
context:
space:
mode:
authorMatt Kraai2000-10-25 19:00:51 +0000
committerMatt Kraai2000-10-25 19:00:51 +0000
commita0428eee9e0e5422fae9572d9dbafe7a9f81f485 (patch)
treed12dc08cf6173f358cf039fdcbc8c2bbb93e0445 /applets
parentef5529b27865adc79cd4d48f932d477b1d79b94e (diff)
downloadbusybox-a0428eee9e0e5422fae9572d9dbafe7a9f81f485.zip
busybox-a0428eee9e0e5422fae9572d9dbafe7a9f81f485.tar.gz
Avoid reinventing the wheel (and thus save some space).
Diffstat (limited to 'applets')
-rw-r--r--applets/busybox.c39
1 files changed, 13 insertions, 26 deletions
diff --git a/applets/busybox.c b/applets/busybox.c
index 696dd42..985798e 100644
--- a/applets/busybox.c
+++ b/applets/busybox.c
@@ -81,11 +81,18 @@ static void install_links(const char *busybox, int use_symbolic_links)
#endif /* BB_FEATURE_INSTALLER */
+static int applet_name_compare(const void *x, const void *y)
+{
+ const struct BB_applet *applet1 = x;
+ const struct BB_applet *applet2 = y;
+
+ return strcmp(applet1->name, applet2->name);
+}
int main(int argc, char **argv)
{
+ struct BB_applet search_applet, *applet;
const char *s;
- int u, l; /* Lower and upper bounds for the binary search. */
applet_name = "busybox";
#ifdef BB_FEATURE_INSTALLER
@@ -134,31 +141,11 @@ int main(int argc, char **argv)
#endif
/* Do a binary search to find the applet entry given the name. */
-
- u = NUM_APPLETS - 1;
- l = 0;
-
- for (;;) {
- int i = l + (u - l) / 2;
- int j = strcmp(applet_name, applets[i].name);
-
- if (j == 0) {
- if (applets[i].usage && argv[1] && strcmp(argv[1], "--help") == 0)
- usage(applets[i].usage);
- exit(((*(applets[i].main)) (argc, argv)));
- }
-
- if (u == l)
- break;
-
- if (j < 0)
- u = i - 1;
- else
- l = i + 1;
-
- if (u < l)
- break;
- }
+ search_applet.name = applet_name;
+ applet = bsearch(&search_applet, applets, NUM_APPLETS,
+ sizeof(struct BB_applet), applet_name_compare);
+ if (applet != NULL)
+ exit((*(applet->main)) (argc, argv));
return(busybox_main(argc, argv));
}