diff options
author | Matt Kraai | 2000-10-25 19:00:51 +0000 |
---|---|---|
committer | Matt Kraai | 2000-10-25 19:00:51 +0000 |
commit | a0428eee9e0e5422fae9572d9dbafe7a9f81f485 (patch) | |
tree | d12dc08cf6173f358cf039fdcbc8c2bbb93e0445 | |
parent | ef5529b27865adc79cd4d48f932d477b1d79b94e (diff) | |
download | busybox-a0428eee9e0e5422fae9572d9dbafe7a9f81f485.zip busybox-a0428eee9e0e5422fae9572d9dbafe7a9f81f485.tar.gz |
Avoid reinventing the wheel (and thus save some space).
-rw-r--r-- | applets/busybox.c | 39 | ||||
-rw-r--r-- | busybox.c | 39 |
2 files changed, 26 insertions, 52 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)); } @@ -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)); } |