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));
 }