X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fchroot.c;h=ba3e5f86434ca5dbdfc98c3180ec68ff135d47a6;hb=741f40b58edf3644c6bc8e6863ee9ad681b21562;hp=9b1a5a82d82dbd434efafb8bb43fb69c110e69c8;hpb=bf181b9338152759fd56c8009e9a962a84808e7c;p=oweals%2Fbusybox.git diff --git a/coreutils/chroot.c b/coreutils/chroot.c index 9b1a5a82d..ba3e5f864 100644 --- a/coreutils/chroot.c +++ b/coreutils/chroot.c @@ -2,9 +2,8 @@ /* * Mini chroot implementation for busybox * - * - * Copyright (C) 1999,2000 by Lineo, inc. - * Written by Erik Andersen , + * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen + * Copyright (C) 1999,2000,2001 by Erik Andersen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,23 +21,24 @@ * */ -#include "internal.h" #include #include +#include #include +#include "busybox.h" int chroot_main(int argc, char **argv) { char *prog; if ((argc < 2) || (**(argv + 1) == '-')) { - usage(chroot_usage); + show_usage(); } argc--; argv++; if (chroot(*argv) || (chdir("/"))) { - fatalError("cannot change root directory to %s: %s\n", *argv, strerror(errno)); + perror_msg_and_die("cannot change root directory to %s", *argv); } argc--; @@ -47,12 +47,20 @@ int chroot_main(int argc, char **argv) prog = *argv; execvp(*argv, argv); } else { +#if defined shell_main && defined CONFIG_FEATURE_SH_STANDALONE_SHELL + char shell[] = "/bin/sh"; + char *shell_argv[2] = { shell, NULL }; + applet_name = shell; + shell_main(1, shell_argv); + return EXIT_SUCCESS; +#else prog = getenv("SHELL"); if (!prog) prog = "/bin/sh"; execlp(prog, prog, NULL); +#endif } - fatalError("cannot execute %s: %s\n", prog, strerror(errno)); + perror_msg_and_die("cannot execute %s", prog); }