Avoid reinventing the wheel (and thus save some space).
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 @@
#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 @@
#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));
}
diff --git a/busybox.c b/busybox.c
index 696dd42..985798e 100644
--- a/busybox.c
+++ b/busybox.c
@@ -81,11 +81,18 @@
#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 @@
#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));
}