X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=busybox.c;h=221ef2a65b77c55ab26d34d0172ff0b05b6f1d1b;hb=0021679b0dc5767e0c023b28b36eeb1476dc2364;hp=b65b13e65598575cdb93aa298decc2988a7222a9;hpb=61677feff7f549a48267c2c0c50a7420de6e2599;p=oweals%2Fbusybox.git diff --git a/busybox.c b/busybox.c index b65b13e65..221ef2a65 100644 --- a/busybox.c +++ b/busybox.c @@ -30,14 +30,15 @@ int atexit(void (*__func) (void)) void *__libc_stack_end; #endif -static const struct Applet applets[] = { +const struct BB_applet applets[] = { +#ifdef BB_AR + {"ar", ar_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_BASENAME {"basename", basename_main, _BB_DIR_USR_BIN}, #endif -#ifdef BB_BUSYBOX {"busybox", busybox_main, _BB_DIR_BIN}, -#endif #ifdef BB_BLOCK_DEVICE {"block_device", block_device_main, _BB_DIR_SBIN}, #endif @@ -45,13 +46,13 @@ static const struct Applet applets[] = { {"cat", cat_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHROOT {"chroot", chroot_main, _BB_DIR_SBIN}, @@ -65,12 +66,15 @@ static const struct Applet applets[] = { #ifdef BB_CP_MV {"cp", cp_mv_main, _BB_DIR_BIN}, #endif -#ifdef BB_CP_MV - {"mv", cp_mv_main, _BB_DIR_BIN}, +#ifdef BB_CUT + {"cut", cut_main, _BB_DIR_USR_BIN}, #endif #ifdef BB_DATE {"date", date_main, _BB_DIR_BIN}, #endif +#ifdef BB_DC + {"dc", dc_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_DD {"dd", dd_main, _BB_DIR_BIN}, #endif @@ -92,6 +96,9 @@ static const struct Applet applets[] = { #ifdef BB_ECHO {"echo", echo_main, _BB_DIR_BIN}, #endif +#ifdef BB_TRUE_FALSE + {"false", false_main, _BB_DIR_BIN}, +#endif #ifdef BB_FBSET {"fbset", fbset_main, _BB_DIR_USR_SBIN}, #endif @@ -113,12 +120,15 @@ static const struct Applet applets[] = { #ifdef BB_FSCK_MINIX {"fsck.minix", fsck_minix_main, _BB_DIR_SBIN}, #endif -#ifdef BB_MKFS_MINIX - {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN}, -#endif #ifdef BB_GREP {"grep", grep_main, _BB_DIR_BIN}, #endif +#ifdef BB_GUNZIP + {"gunzip", gunzip_main, _BB_DIR_BIN}, +#endif +#ifdef BB_GZIP + {"gzip", gzip_main, _BB_DIR_BIN}, +#endif #ifdef BB_HALT {"halt", halt_main, _BB_DIR_SBIN}, #endif @@ -131,15 +141,15 @@ static const struct Applet applets[] = { #ifdef BB_HOSTNAME {"hostname", hostname_main, _BB_DIR_BIN}, #endif +#ifdef BB_ID + {"id", id_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_INIT {"init", init_main, _BB_DIR_SBIN}, #endif #ifdef BB_INSMOD {"insmod", insmod_main, _BB_DIR_SBIN}, #endif -#ifdef BB_FEATURE_LINUXRC // - {"linuxrc", init_main, _BB_DIR_ROOT}, -#endif #ifdef BB_KILL {"kill", kill_main, _BB_DIR_BIN}, #endif @@ -149,6 +159,9 @@ static const struct Applet applets[] = { #ifdef BB_LENGTH {"length", length_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_LINUXRC + {"linuxrc", init_main, _BB_DIR_ROOT}, +#endif #ifdef BB_LN {"ln", ln_main, _BB_DIR_BIN}, #endif @@ -161,6 +174,12 @@ static const struct Applet applets[] = { #ifdef BB_LOADKMAP {"loadkmap", loadkmap_main, _BB_DIR_SBIN}, #endif +#ifdef BB_LOGGER + {"logger", logger_main, _BB_DIR_USR_BIN}, +#endif +#ifdef BB_LOGNAME + {"logname", logname_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_LS {"ls", ls_main, _BB_DIR_BIN}, #endif @@ -173,20 +192,29 @@ static const struct Applet applets[] = { #ifdef BB_MATH {"math", math_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_MD5SUM + {"md5sum", md5sum_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_MKDIR {"mkdir", mkdir_main, _BB_DIR_BIN}, #endif #ifdef BB_MKFIFO {"mkfifo", mkfifo_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_MKFS_MINIX + {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN}, +#endif #ifdef BB_MKNOD {"mknod", mknod_main, _BB_DIR_BIN}, #endif #ifdef BB_MKSWAP {"mkswap", mkswap_main, _BB_DIR_SBIN}, #endif -#ifdef BB_MNC - {"mnc", mnc_main, _BB_DIR_USR_BIN}, +#ifdef BB_MKTEMP + {"mktemp", mktemp_main, _BB_DIR_BIN}, +#endif +#ifdef BB_NC + {"nc", nc_main, _BB_DIR_USR_BIN}, #endif #ifdef BB_MORE {"more", more_main, _BB_DIR_BIN}, @@ -197,6 +225,9 @@ static const struct Applet applets[] = { #ifdef BB_MT {"mt", mt_main, _BB_DIR_BIN}, #endif +#ifdef BB_CP_MV + {"mv", cp_mv_main, _BB_DIR_BIN}, +#endif #ifdef BB_NSLOOKUP {"nslookup", nslookup_main, _BB_DIR_USR_BIN}, #endif @@ -230,12 +261,15 @@ static const struct Applet applets[] = { #ifdef BB_SED {"sed", sed_main, _BB_DIR_BIN}, #endif -#ifdef BB_SH - {"sh", shell_main, _BB_DIR_BIN}, +#ifdef BB_SETKEYCODES + {"setkeycodes", setkeycodes_main, _BB_DIR_USR_BIN}, #endif #ifdef BB_SFDISK {"sfdisk", sfdisk_main, _BB_DIR_SBIN}, #endif +#ifdef BB_SH + {"sh", shell_main, _BB_DIR_BIN}, +#endif #ifdef BB_SLEEP {"sleep", sleep_main, _BB_DIR_BIN}, #endif @@ -248,12 +282,6 @@ static const struct Applet applets[] = { #ifdef BB_SYSLOGD {"syslogd", syslogd_main, _BB_DIR_SBIN}, #endif -#ifdef BB_LOGGER - {"logger", logger_main, _BB_DIR_USR_BIN}, -#endif -#ifdef BB_LOGNAME - {"logname", logname_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_SWAPONOFF {"swapon", swap_on_off_main, _BB_DIR_SBIN}, #endif @@ -269,9 +297,6 @@ static const struct Applet applets[] = { #ifdef BB_TELNET {"telnet", telnet_main, _BB_DIR_USR_BIN}, #endif -#ifdef BB_TEST - {"[", test_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_TEST {"test", test_main, _BB_DIR_USR_BIN}, #endif @@ -287,9 +312,6 @@ static const struct Applet applets[] = { #ifdef BB_TRUE_FALSE {"true", true_main, _BB_DIR_BIN}, #endif -#ifdef BB_TRUE_FALSE - {"false", false_main, _BB_DIR_BIN}, -#endif #ifdef BB_TTY {"tty", tty_main, _BB_DIR_USR_BIN}, #endif @@ -299,21 +321,30 @@ static const struct Applet applets[] = { #ifdef BB_UNAME {"uname", uname_main, _BB_DIR_BIN}, #endif -#ifdef BB_UPTIME - {"uptime", uptime_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_UNIQ - {"uniq", uniq_main, _BB_DIR_BIN}, + {"uniq", uniq_main, _BB_DIR_USR_BIN}, #endif #ifdef BB_UPDATE {"update", update_main, _BB_DIR_SBIN}, #endif +#ifdef BB_UPTIME + {"uptime", uptime_main, _BB_DIR_USR_BIN}, +#endif +#ifdef BB_UUENCODE + {"uuencode", uuencode_main, _BB_DIR_USR_BIN}, +#endif +#ifdef BB_UUDECODE + {"uudecode", uudecode_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_USLEEP {"usleep", usleep_main, _BB_DIR_BIN}, #endif #ifdef BB_WC {"wc", wc_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_WHICH + {"which", which_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_WHOAMI {"whoami", whoami_main, _BB_DIR_USR_BIN}, #endif @@ -323,11 +354,8 @@ static const struct Applet applets[] = { #ifdef BB_GUNZIP {"zcat", gunzip_main, _BB_DIR_BIN}, #endif -#ifdef BB_GUNZIP - {"gunzip", gunzip_main, _BB_DIR_BIN}, -#endif -#ifdef BB_GZIP - {"gzip", gzip_main, _BB_DIR_BIN}, +#ifdef BB_TEST + {"[", test_main, _BB_DIR_USR_BIN}, #endif {0} }; @@ -338,7 +366,7 @@ int main(int argc, char **argv) { char *s; char *name; - const struct Applet *a = applets; + const struct BB_applet *a = applets; for (s = name = argv[0]; *s != '\0';) { if (*s++ == '/') @@ -349,18 +377,11 @@ int main(int argc, char **argv) while (a->name != 0) { if (strcmp(name, a->name) == 0) { - int status; - - status = ((*(a->main)) (argc, argv)); - if (status < 0) { - fprintf(stderr, "%s: %s\n", a->name, strerror(errno)); - } - fprintf(stderr, "\n"); - exit(status); + exit(((*(a->main)) (argc, argv))); } a++; } - exit(busybox_main(argc, argv)); + return(busybox_main(argc, argv)); } @@ -372,17 +393,16 @@ int busybox_main(int argc, char **argv) argv++; if (been_there_done_that == 1 || argc < 1) { - const struct Applet *a = applets; + const struct BB_applet *a = applets; - fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", - BB_VER, BB_BT); - fprintf(stderr, "Usage: busybox [function] [arguments]...\n"); - fprintf(stderr, " or: [function] [arguments]...\n\n"); - fprintf(stderr, - "\tBusyBox is a multi-call binary that combines many common Unix utilities into a\n" - "\tsingle executable. Most people will create a link to busybox for each function\n" - "\tthey wish to use, and BusyBox will act like whatever it was invoked as.\n"); - fprintf(stderr, "\nCurrently defined functions:\n"); + fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n" + "Usage: busybox [function] [arguments]...\n" + " or: [function] [arguments]...\n\n" + "\tBusyBox is a multi-call binary that combines many common Unix\n" + "\tutilities into a single executable. Most people will create a\n" + "\tlink to busybox for each function they wish to use, and BusyBox\n" + "\twill act like whatever it was invoked as.\n" + "\nCurrently defined functions:\n", BB_VER, BB_BT); while (a->name != 0) { col += @@ -395,11 +415,10 @@ int busybox_main(int argc, char **argv) } fprintf(stderr, "\n\n"); exit(-1); - } else { - /* If we've already been here once, exit now */ - been_there_done_that = 1; - return (main(argc, argv)); } + /* If we've already been here once, exit now */ + been_there_done_that = 1; + return (main(argc, argv)); } /*