6 static int been_there_done_that = 0;
8 static const struct Applet applets[] = {
10 #ifdef BB_BUSYBOX //bin
11 {"busybox", busybox_main},
13 #ifdef BB_BLOCK_DEVICE //sbin
14 {"block_device", block_device_main},
17 {"cat", cat_more_main},
20 {"chgrp", chgrp_main},
23 {"chmod", chmod_main},
26 {"chown", chown_main},
28 #ifdef BB_CHROOT //sbin
29 {"chroot", chroot_main},
31 #ifdef BB_CLEAR //usr/bin
32 {"clear", clear_main},
47 {"dmesg", dmesg_main},
49 #ifdef BB_DUTMP //usr/sbin
50 {"dutmp", cat_more_main},
53 {"false", false_main},
55 #ifdef BB_FDFLUSH //bin
56 {"fdflush", monadic_main},
58 #ifdef BB_FIND //usr/bin
73 #ifdef BB_LENGTH //usr/bin
74 {"length", length_main},
79 #ifdef BB_LOADKMAP //sbin
80 {"loadkmap", loadkmap_main},
82 #ifdef BB_LOSETUP //sbin
83 {"losetup", losetup_main},
88 #ifdef BB_MAKEDEVS //sbin
89 {"makedevs", makedevs_main},
91 #ifdef BB_MATH //usr/bin
95 {"mkdir", monadic_main},
98 {"mknod", mknod_main},
100 #ifdef BB_MKSWAP //sbin
101 {"mkswap", mkswap_main},
103 #ifdef BB_MNC //usr/bin
107 {"more", cat_more_main},
109 #ifdef BB_MOUNT //bin
110 {"mount", mount_main},
118 #ifdef BB_PRINTF //usr/bin
119 {"printf", printf_main},
124 #ifdef BB_REBOOT //sbin
125 {"reboot", reboot_main},
130 #ifdef BB_RMDIR //bin
131 {"rmdir", monadic_main},
133 #ifdef BB_SLEEP //bin
134 {"sleep", sleep_main},
139 #ifdef BB_SWAPOFF //sbin
140 {"swapoff", monadic_main},
142 #ifdef BB_SWAPON //sbin
143 {"swapon", monadic_main},
148 #ifdef BB_TOUCH //usr/bin
149 {"touch", monadic_main},
154 #ifdef BB_UMOUNT //bin
155 {"umount", umount_main},
157 #ifdef BB_UPDATE //sbin
158 {"update", update_main},
162 {"gunzip", zcat_main},
170 int main(int argc, char **argv)
173 char *name = argv[0];
174 const struct Applet *a = applets;
181 while (a->name != 0) {
182 if (strcmp(name, a->name) == 0) {
185 status = ((*(a->main)) (argc, argv));
187 fprintf(stderr, "%s: %s\n", a->name, strerror(errno));
189 fprintf(stderr, "\n");
194 return (busybox_main(argc, argv));
198 int busybox_main(int argc, char **argv)
203 /* If we've already been here once, exit now */
204 if (been_there_done_that == 1)
206 been_there_done_that = 1;
209 const struct Applet *a = applets;
210 fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n",
212 fprintf(stderr, "Usage: busybox [function] [arguments]...\n");
214 "\n\tMost people will create a symlink to busybox for each\n"
215 "\tfunction name, and busybox will act like whatever you invoke it as.\n");
216 fprintf(stderr, "\nCurrently defined functions:\n");
219 fprintf(stderr, "%s", a->name);
222 while (a->name != 0) {
223 fprintf(stderr, ", %s", a->name);
226 fprintf(stderr, "\n\n");
229 return (main(argc, argv));