blob: 9ee5d2e3a064eb031e87cee2f6b46402703224ba [file] [log] [blame]
Erik Andersene49d5ec2000-02-08 19:58:47 +00001/* vi: set sw=4 ts=4: */
Eric Andersencc8ed391999-10-05 16:24:54 +00002#include "internal.h"
3#include <stdio.h>
4#include <string.h>
5#include <errno.h>
6
7static int been_there_done_that = 0;
8
Erik Andersen31638212000-01-15 22:28:50 +00009/* It has been alledged that doing such things can
10 * help reduce binary size when staticly linking,
11 * of course with glibc, this is unlikely as long
12 * as we use things like printf -- perhaps a printf
13 * replacement may be in order
14 */
Erik Andersen05df2392000-01-13 04:43:48 +000015#if 0
Erik Andersene49d5ec2000-02-08 19:58:47 +000016void exit(int status) __attribute__ ((noreturn));
17void exit(int status)
18{
19 _exit(status);
20};
21void abort(void) __attribute__ ((__noreturn__));
22void abort(void)
23{
24 _exit(0);
25};
26int atexit(void (*__func) (void))
27{
28 _exit(0);
29};
Erik Andersen05df2392000-01-13 04:43:48 +000030void *__libc_stack_end;
31#endif
32
Erik Andersenbcd61772000-05-13 06:33:19 +000033const struct BB_applet applets[] = {
Eric Andersencc8ed391999-10-05 16:24:54 +000034
Eric Andersen86ab8a32000-06-02 03:21:42 +000035#ifdef BB_AR
36 {"ar", ar_main, _BB_DIR_USR_BIN},
37#endif
Erik Andersen298854f2000-03-23 01:09:18 +000038#ifdef BB_BASENAME
Erik Andersend75af992000-03-16 08:09:09 +000039 {"basename", basename_main, _BB_DIR_USR_BIN},
Erik Andersene2729152000-02-18 21:34:17 +000040#endif
Erik Andersend75af992000-03-16 08:09:09 +000041 {"busybox", busybox_main, _BB_DIR_BIN},
Erik Andersen298854f2000-03-23 01:09:18 +000042#ifdef BB_BLOCK_DEVICE
Erik Andersend75af992000-03-16 08:09:09 +000043 {"block_device", block_device_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000044#endif
Erik Andersen298854f2000-03-23 01:09:18 +000045#ifdef BB_CAT
Erik Andersend75af992000-03-16 08:09:09 +000046 {"cat", cat_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000047#endif
Erik Andersen298854f2000-03-23 01:09:18 +000048#ifdef BB_CHMOD_CHOWN_CHGRP
Erik Andersen5e1189e2000-04-15 16:34:54 +000049 {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
50#endif
51#ifdef BB_CHMOD_CHOWN_CHGRP
Erik Andersend75af992000-03-16 08:09:09 +000052 {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
53#endif
Erik Andersen298854f2000-03-23 01:09:18 +000054#ifdef BB_CHMOD_CHOWN_CHGRP
Erik Andersend75af992000-03-16 08:09:09 +000055 {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
56#endif
Erik Andersen298854f2000-03-23 01:09:18 +000057#ifdef BB_CHROOT
Erik Andersend75af992000-03-16 08:09:09 +000058 {"chroot", chroot_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000059#endif
Erik Andersen298854f2000-03-23 01:09:18 +000060#ifdef BB_CLEAR
Erik Andersend75af992000-03-16 08:09:09 +000061 {"clear", clear_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000062#endif
Erik Andersen298854f2000-03-23 01:09:18 +000063#ifdef BB_CHVT
Erik Andersend75af992000-03-16 08:09:09 +000064 {"chvt", chvt_main, _BB_DIR_USR_BIN},
Eric Andersenabc0f4f1999-12-08 23:19:36 +000065#endif
Erik Andersen298854f2000-03-23 01:09:18 +000066#ifdef BB_CP_MV
Erik Andersend75af992000-03-16 08:09:09 +000067 {"cp", cp_mv_main, _BB_DIR_BIN},
68#endif
Erik Andersen7ab9c7e2000-05-12 19:41:47 +000069#ifdef BB_CUT
70 {"cut", cut_main, _BB_DIR_USR_BIN},
71#endif
Erik Andersen298854f2000-03-23 01:09:18 +000072#ifdef BB_DATE
Erik Andersend75af992000-03-16 08:09:09 +000073 {"date", date_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000074#endif
Erik Andersen298854f2000-03-23 01:09:18 +000075#ifdef BB_DD
Erik Andersend75af992000-03-16 08:09:09 +000076 {"dd", dd_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000077#endif
Erik Andersen298854f2000-03-23 01:09:18 +000078#ifdef BB_DF
Erik Andersend75af992000-03-16 08:09:09 +000079 {"df", df_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000080#endif
Erik Andersen298854f2000-03-23 01:09:18 +000081#ifdef BB_DIRNAME
Erik Andersend75af992000-03-16 08:09:09 +000082 {"dirname", dirname_main, _BB_DIR_USR_BIN},
Erik Andersenfb002d02000-03-05 08:07:00 +000083#endif
Erik Andersen298854f2000-03-23 01:09:18 +000084#ifdef BB_DMESG
Erik Andersend75af992000-03-16 08:09:09 +000085 {"dmesg", dmesg_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000086#endif
Erik Andersen298854f2000-03-23 01:09:18 +000087#ifdef BB_DU
Erik Andersend75af992000-03-16 08:09:09 +000088 {"du", du_main, _BB_DIR_BIN},
John Beppu7a986061999-12-09 18:29:29 +000089#endif
Erik Andersen298854f2000-03-23 01:09:18 +000090#ifdef BB_DUTMP
Erik Andersend75af992000-03-16 08:09:09 +000091 {"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
92#endif
Erik Andersen298854f2000-03-23 01:09:18 +000093#ifdef BB_ECHO
Erik Andersend75af992000-03-16 08:09:09 +000094 {"echo", echo_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +000095#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +000096#ifdef BB_TRUE_FALSE
97 {"false", false_main, _BB_DIR_BIN},
98#endif
Erik Andersen298854f2000-03-23 01:09:18 +000099#ifdef BB_FBSET
Erik Andersend75af992000-03-16 08:09:09 +0000100 {"fbset", fbset_main, _BB_DIR_USR_SBIN},
Erik Andersen1c5b2581999-12-16 20:59:36 +0000101#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000102#ifdef BB_FDFLUSH
Erik Andersend75af992000-03-16 08:09:09 +0000103 {"fdflush", fdflush_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000104#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000105#ifdef BB_FIND
Erik Andersend75af992000-03-16 08:09:09 +0000106 {"find", find_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000107#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000108#ifdef BB_FREE
Erik Andersend75af992000-03-16 08:09:09 +0000109 {"free", free_main, _BB_DIR_USR_BIN},
Eric Andersen0460ff21999-10-25 23:32:44 +0000110#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000111#ifdef BB_FREERAMDISK
Erik Andersend75af992000-03-16 08:09:09 +0000112 {"freeramdisk", freeramdisk_main, _BB_DIR_SBIN},
Erik Andersen64371702000-03-04 22:23:27 +0000113#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000114#ifdef BB_DEALLOCVT
Erik Andersend75af992000-03-16 08:09:09 +0000115 {"deallocvt", deallocvt_main, _BB_DIR_USR_BIN},
Eric Andersen0460ff21999-10-25 23:32:44 +0000116#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000117#ifdef BB_FSCK_MINIX
Erik Andersend75af992000-03-16 08:09:09 +0000118 {"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
Eric Andersene494fdd1999-10-19 20:23:03 +0000119#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000120#ifdef BB_GREP
Erik Andersend75af992000-03-16 08:09:09 +0000121 {"grep", grep_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000122#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +0000123#ifdef BB_GUNZIP
124 {"gunzip", gunzip_main, _BB_DIR_BIN},
125#endif
126#ifdef BB_GZIP
127 {"gzip", gzip_main, _BB_DIR_BIN},
128#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000129#ifdef BB_HALT
Erik Andersend75af992000-03-16 08:09:09 +0000130 {"halt", halt_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000131#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000132#ifdef BB_HEAD
Erik Andersend75af992000-03-16 08:09:09 +0000133 {"head", head_main, _BB_DIR_BIN},
John Beppu3157b1f1999-12-10 07:42:50 +0000134#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000135#ifdef BB_HOSTID
Erik Andersend75af992000-03-16 08:09:09 +0000136 {"hostid", hostid_main, _BB_DIR_USR_BIN},
Erik Andersen31638212000-01-15 22:28:50 +0000137#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000138#ifdef BB_HOSTNAME
Erik Andersend75af992000-03-16 08:09:09 +0000139 {"hostname", hostname_main, _BB_DIR_BIN},
Eric Andersen485b9551999-12-07 23:14:59 +0000140#endif
Erik Andersen94f5e0b2000-05-01 19:10:52 +0000141#ifdef BB_ID
142 {"id", id_main, _BB_DIR_USR_BIN},
143#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000144#ifdef BB_INIT
Erik Andersend75af992000-03-16 08:09:09 +0000145 {"init", init_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000146#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000147#ifdef BB_INSMOD
Erik Andersend75af992000-03-16 08:09:09 +0000148 {"insmod", insmod_main, _BB_DIR_SBIN},
Erik Andersen6da0ae81999-12-17 01:08:27 +0000149#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000150#ifdef BB_KILL
Erik Andersend75af992000-03-16 08:09:09 +0000151 {"kill", kill_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000152#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000153#ifdef BB_KILLALL
Erik Andersend75af992000-03-16 08:09:09 +0000154 {"killall", kill_main, _BB_DIR_USR_BIN},
Erik Andersen246cc6d2000-03-07 07:41:42 +0000155#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000156#ifdef BB_LENGTH
Erik Andersend75af992000-03-16 08:09:09 +0000157 {"length", length_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000158#endif
Erik Andersen9a8195c2000-04-18 23:32:10 +0000159#ifdef BB_LINUXRC
Erik Andersen5e1189e2000-04-15 16:34:54 +0000160 {"linuxrc", init_main, _BB_DIR_ROOT},
161#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000162#ifdef BB_LN
Erik Andersend75af992000-03-16 08:09:09 +0000163 {"ln", ln_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000164#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000165#ifdef BB_LOADACM
Erik Andersend75af992000-03-16 08:09:09 +0000166 {"loadacm", loadacm_main, _BB_DIR_USR_BIN},
Eric Andersen3e0fbae1999-10-19 06:02:44 +0000167#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000168#ifdef BB_LOADFONT
Erik Andersend75af992000-03-16 08:09:09 +0000169 {"loadfont", loadfont_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000170#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000171#ifdef BB_LOADKMAP
Erik Andersend75af992000-03-16 08:09:09 +0000172 {"loadkmap", loadkmap_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000173#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +0000174#ifdef BB_LOGGER
175 {"logger", logger_main, _BB_DIR_USR_BIN},
176#endif
177#ifdef BB_LOGNAME
178 {"logname", logname_main, _BB_DIR_USR_BIN},
179#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000180#ifdef BB_LS
Erik Andersend75af992000-03-16 08:09:09 +0000181 {"ls", ls_main, _BB_DIR_BIN},
Erik Andersen6f23cec1999-12-15 22:14:12 +0000182#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000183#ifdef BB_LSMOD
Erik Andersend75af992000-03-16 08:09:09 +0000184 {"lsmod", lsmod_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000185#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000186#ifdef BB_MAKEDEVS
Erik Andersend75af992000-03-16 08:09:09 +0000187 {"makedevs", makedevs_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000188#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000189#ifdef BB_MATH
Erik Andersend75af992000-03-16 08:09:09 +0000190 {"math", math_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000191#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000192#ifdef BB_MKDIR
Erik Andersend75af992000-03-16 08:09:09 +0000193 {"mkdir", mkdir_main, _BB_DIR_BIN},
Erik Andersene49d5ec2000-02-08 19:58:47 +0000194#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000195#ifdef BB_MKFIFO
Erik Andersend75af992000-03-16 08:09:09 +0000196 {"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
Eric Andersen19db07b1999-12-11 08:41:28 +0000197#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +0000198#ifdef BB_MKFS_MINIX
199 {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
200#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000201#ifdef BB_MKNOD
Erik Andersend75af992000-03-16 08:09:09 +0000202 {"mknod", mknod_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000203#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000204#ifdef BB_MKSWAP
Erik Andersend75af992000-03-16 08:09:09 +0000205 {"mkswap", mkswap_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000206#endif
Erik Andersen227a59b2000-04-25 23:24:55 +0000207#ifdef BB_MKTEMP
208 {"mktemp", mktemp_main, _BB_DIR_BIN},
209#endif
Erik Andersen7ab9c7e2000-05-12 19:41:47 +0000210#ifdef BB_NC
211 {"nc", nc_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000212#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000213#ifdef BB_MORE
Erik Andersend75af992000-03-16 08:09:09 +0000214 {"more", more_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000215#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000216#ifdef BB_MOUNT
Erik Andersend75af992000-03-16 08:09:09 +0000217 {"mount", mount_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000218#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000219#ifdef BB_MT
Erik Andersend75af992000-03-16 08:09:09 +0000220 {"mt", mt_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000221#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +0000222#ifdef BB_CP_MV
223 {"mv", cp_mv_main, _BB_DIR_BIN},
224#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000225#ifdef BB_NSLOOKUP
Erik Andersend75af992000-03-16 08:09:09 +0000226 {"nslookup", nslookup_main, _BB_DIR_USR_BIN},
John Beppub332e772000-01-29 12:59:01 +0000227#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000228#ifdef BB_PING
Erik Andersend75af992000-03-16 08:09:09 +0000229 {"ping", ping_main, _BB_DIR_BIN},
Eric Andersen485b9551999-12-07 23:14:59 +0000230#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000231#ifdef BB_POWEROFF
Erik Andersend75af992000-03-16 08:09:09 +0000232 {"poweroff", poweroff_main, _BB_DIR_SBIN},
Eric Andersen2cb55071999-12-10 08:25:07 +0000233#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000234#ifdef BB_PRINTF
Erik Andersend75af992000-03-16 08:09:09 +0000235 {"printf", printf_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000236#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000237#ifdef BB_PS
Erik Andersend75af992000-03-16 08:09:09 +0000238 {"ps", ps_main, _BB_DIR_BIN},
Eric Andersenef8b6c71999-10-20 08:05:35 +0000239#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000240#ifdef BB_PWD
Erik Andersend75af992000-03-16 08:09:09 +0000241 {"pwd", pwd_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000242#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000243#ifdef BB_REBOOT
Erik Andersend75af992000-03-16 08:09:09 +0000244 {"reboot", reboot_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000245#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000246#ifdef BB_RM
Erik Andersend75af992000-03-16 08:09:09 +0000247 {"rm", rm_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000248#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000249#ifdef BB_RMDIR
Erik Andersend75af992000-03-16 08:09:09 +0000250 {"rmdir", rmdir_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000251#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000252#ifdef BB_RMMOD
Erik Andersend75af992000-03-16 08:09:09 +0000253 {"rmmod", rmmod_main, _BB_DIR_SBIN},
Erik Andersen3d7e3411999-12-16 23:04:20 +0000254#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000255#ifdef BB_SED
Erik Andersend75af992000-03-16 08:09:09 +0000256 {"sed", sed_main, _BB_DIR_BIN},
Erik Andersen3522eb12000-03-12 23:49:18 +0000257#endif
Erik Andersen4f3f7572000-04-28 00:18:56 +0000258#ifdef BB_SETKEYCODES
259 {"setkeycodes", setkeycodes_main, _BB_DIR_USR_BIN},
Erik Andersen3522eb12000-03-12 23:49:18 +0000260#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000261#ifdef BB_SFDISK
Erik Andersend75af992000-03-16 08:09:09 +0000262 {"sfdisk", sfdisk_main, _BB_DIR_SBIN},
Eric Andersene77ae3a1999-10-19 20:03:34 +0000263#endif
Erik Andersen4f3f7572000-04-28 00:18:56 +0000264#ifdef BB_SH
265 {"sh", shell_main, _BB_DIR_BIN},
266#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000267#ifdef BB_SLEEP
Erik Andersend75af992000-03-16 08:09:09 +0000268 {"sleep", sleep_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000269#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000270#ifdef BB_SORT
Erik Andersend75af992000-03-16 08:09:09 +0000271 {"sort", sort_main, _BB_DIR_BIN},
John Beppu019513a1999-12-22 17:57:31 +0000272#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000273#ifdef BB_SYNC
Erik Andersend75af992000-03-16 08:09:09 +0000274 {"sync", sync_main, _BB_DIR_BIN},
Eric Andersen3843e961999-11-25 07:30:46 +0000275#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000276#ifdef BB_SYSLOGD
Erik Andersend75af992000-03-16 08:09:09 +0000277 {"syslogd", syslogd_main, _BB_DIR_SBIN},
Eric Andersen3843e961999-11-25 07:30:46 +0000278#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000279#ifdef BB_SWAPONOFF
Erik Andersend75af992000-03-16 08:09:09 +0000280 {"swapon", swap_on_off_main, _BB_DIR_SBIN},
281#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000282#ifdef BB_SWAPONOFF
Erik Andersend75af992000-03-16 08:09:09 +0000283 {"swapoff", swap_on_off_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000284#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000285#ifdef BB_TAIL
Erik Andersend75af992000-03-16 08:09:09 +0000286 {"tail", tail_main, _BB_DIR_USR_BIN},
Eric Andersenabc0f4f1999-12-08 23:19:36 +0000287#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000288#ifdef BB_TAR
Erik Andersend75af992000-03-16 08:09:09 +0000289 {"tar", tar_main, _BB_DIR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000290#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000291#ifdef BB_TELNET
Erik Andersend75af992000-03-16 08:09:09 +0000292 {"telnet", telnet_main, _BB_DIR_USR_BIN},
293#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000294#ifdef BB_TEST
Erik Andersend75af992000-03-16 08:09:09 +0000295 {"test", test_main, _BB_DIR_USR_BIN},
Erik Andersenf7c49ef2000-02-22 17:17:45 +0000296#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000297#ifdef BB_TEE
Erik Andersend75af992000-03-16 08:09:09 +0000298 {"tee", tee_main, _BB_DIR_BIN},
John Beppu059f1521999-12-10 05:27:16 +0000299#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000300#ifdef BB_TOUCH
Erik Andersend75af992000-03-16 08:09:09 +0000301 {"touch", touch_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000302#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000303#ifdef BB_TR
Erik Andersend75af992000-03-16 08:09:09 +0000304 {"tr", tr_main, _BB_DIR_USR_BIN},
Erik Andersenfb002d02000-03-05 08:07:00 +0000305#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000306#ifdef BB_TRUE_FALSE
Erik Andersend75af992000-03-16 08:09:09 +0000307 {"true", true_main, _BB_DIR_BIN},
308#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000309#ifdef BB_TTY
Erik Andersend75af992000-03-16 08:09:09 +0000310 {"tty", tty_main, _BB_DIR_USR_BIN},
Erik Andersen05df2392000-01-13 04:43:48 +0000311#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000312#ifdef BB_UMOUNT
Erik Andersend75af992000-03-16 08:09:09 +0000313 {"umount", umount_main, _BB_DIR_BIN},
Erik Andersen66be5e72000-03-05 07:52:05 +0000314#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000315#ifdef BB_UNAME
Erik Andersend75af992000-03-16 08:09:09 +0000316 {"uname", uname_main, _BB_DIR_BIN},
Eric Andersen0460ff21999-10-25 23:32:44 +0000317#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000318#ifdef BB_UNIQ
Erik Andersena6c75222000-04-18 00:00:52 +0000319 {"uniq", uniq_main, _BB_DIR_USR_BIN},
John Beppuabb47722000-01-06 00:48:21 +0000320#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000321#ifdef BB_UPDATE
Erik Andersend75af992000-03-16 08:09:09 +0000322 {"update", update_main, _BB_DIR_SBIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000323#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +0000324#ifdef BB_UPTIME
325 {"uptime", uptime_main, _BB_DIR_USR_BIN},
326#endif
Erik Andersenb99ca132000-04-04 18:49:18 +0000327#ifdef BB_USLEEP
328 {"usleep", usleep_main, _BB_DIR_BIN},
329#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000330#ifdef BB_WC
Erik Andersend75af992000-03-16 08:09:09 +0000331 {"wc", wc_main, _BB_DIR_USR_BIN},
Erik Andersen31638212000-01-15 22:28:50 +0000332#endif
Erik Andersen330fd2b2000-05-19 05:35:19 +0000333#ifdef BB_WHICH
334 {"which", which_main, _BB_DIR_USR_BIN},
335#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000336#ifdef BB_WHOAMI
Erik Andersend75af992000-03-16 08:09:09 +0000337 {"whoami", whoami_main, _BB_DIR_USR_BIN},
Erik Andersen31638212000-01-15 22:28:50 +0000338#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000339#ifdef BB_YES
Erik Andersend75af992000-03-16 08:09:09 +0000340 {"yes", yes_main, _BB_DIR_USR_BIN},
Erik Andersen31638212000-01-15 22:28:50 +0000341#endif
Erik Andersen298854f2000-03-23 01:09:18 +0000342#ifdef BB_GUNZIP
Erik Andersend75af992000-03-16 08:09:09 +0000343 {"zcat", gunzip_main, _BB_DIR_BIN},
344#endif
Erik Andersen5e1189e2000-04-15 16:34:54 +0000345#ifdef BB_TEST
346 {"[", test_main, _BB_DIR_USR_BIN},
Eric Andersencc8ed391999-10-05 16:24:54 +0000347#endif
Erik Andersene49d5ec2000-02-08 19:58:47 +0000348 {0}
Eric Andersencc8ed391999-10-05 16:24:54 +0000349};
350
Erik Andersen05df2392000-01-13 04:43:48 +0000351
352
Eric Andersencc8ed391999-10-05 16:24:54 +0000353int main(int argc, char **argv)
354{
Erik Andersend75af992000-03-16 08:09:09 +0000355 char *s;
356 char *name;
Erik Andersenbcd61772000-05-13 06:33:19 +0000357 const struct BB_applet *a = applets;
Eric Andersencc8ed391999-10-05 16:24:54 +0000358
Erik Andersend75af992000-03-16 08:09:09 +0000359 for (s = name = argv[0]; *s != '\0';) {
Erik Andersene49d5ec2000-02-08 19:58:47 +0000360 if (*s++ == '/')
361 name = s;
Eric Andersencc8ed391999-10-05 16:24:54 +0000362 }
Erik Andersene49d5ec2000-02-08 19:58:47 +0000363
Erik Andersen029011b2000-03-04 21:19:32 +0000364 *argv = name;
365
Erik Andersene49d5ec2000-02-08 19:58:47 +0000366 while (a->name != 0) {
367 if (strcmp(name, a->name) == 0) {
368 int status;
369
370 status = ((*(a->main)) (argc, argv));
371 if (status < 0) {
372 fprintf(stderr, "%s: %s\n", a->name, strerror(errno));
373 }
374 fprintf(stderr, "\n");
375 exit(status);
376 }
377 a++;
378 }
379 exit(busybox_main(argc, argv));
Eric Andersencc8ed391999-10-05 16:24:54 +0000380}
381
382
383int busybox_main(int argc, char **argv)
384{
Erik Andersene49d5ec2000-02-08 19:58:47 +0000385 int col = 0;
Eric Andersencc8ed391999-10-05 16:24:54 +0000386
Erik Andersene49d5ec2000-02-08 19:58:47 +0000387 argc--;
388 argv++;
Eric Andersencc8ed391999-10-05 16:24:54 +0000389
Erik Andersene49d5ec2000-02-08 19:58:47 +0000390 if (been_there_done_that == 1 || argc < 1) {
Erik Andersenbcd61772000-05-13 06:33:19 +0000391 const struct BB_applet *a = applets;
Erik Andersene49d5ec2000-02-08 19:58:47 +0000392
Erik Andersen330fd2b2000-05-19 05:35:19 +0000393 fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n"
394 "Usage: busybox [function] [arguments]...\n"
395 " or: [function] [arguments]...\n\n"
John Beppub4f86062000-04-13 03:36:01 +0000396 "\tBusyBox is a multi-call binary that combines many common Unix\n"
397 "\tutilities into a single executable. Most people will create a\n"
398 "\tlink to busybox for each function they wish to use, and BusyBox\n"
Erik Andersen330fd2b2000-05-19 05:35:19 +0000399 "\twill act like whatever it was invoked as.\n"
400 "\nCurrently defined functions:\n", BB_VER, BB_BT);
Erik Andersene49d5ec2000-02-08 19:58:47 +0000401
402 while (a->name != 0) {
403 col +=
404 fprintf(stderr, "%s%s", ((col == 0) ? "\t" : ", "),
405 (a++)->name);
406 if (col > 60 && a->name != 0) {
407 fprintf(stderr, ",\n");
408 col = 0;
409 }
410 }
411 fprintf(stderr, "\n\n");
412 exit(-1);
413 } else {
414 /* If we've already been here once, exit now */
415 been_there_done_that = 1;
416 return (main(argc, argv));
Eric Andersencc8ed391999-10-05 16:24:54 +0000417 }
Eric Andersencc8ed391999-10-05 16:24:54 +0000418}
Erik Andersen029011b2000-03-04 21:19:32 +0000419
420/*
421Local Variables:
422c-file-style: "linux"
423c-basic-offset: 4
424tab-width: 4
425End:
426*/