X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fchroot.c;h=ba3e5f86434ca5dbdfc98c3180ec68ff135d47a6;hb=741f40b58edf3644c6bc8e6863ee9ad681b21562;hp=34116a60eb9d2eac4d2dd0399f72f9e0c42f3688;hpb=1d1d95051a288b6bf64498aac9fb20047f384b7d;p=oweals%2Fbusybox.git diff --git a/coreutils/chroot.c b/coreutils/chroot.c index 34116a60e..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,50 +21,47 @@ * */ -#include "internal.h" #include #include +#include #include - - -static const char chroot_usage[] = "chroot NEWROOT [COMMAND...]\n" -#ifndef BB_FEATURE_TRIVIAL_HELP - "\nRun COMMAND with root directory set to NEWROOT.\n" -#endif - ; - - +#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("/"))) { - fprintf(stderr, "chroot: cannot change root directory to %s: %s\n", - *argv, strerror(errno)); - exit(FALSE); + perror_msg_and_die("cannot change root directory to %s", *argv); } argc--; argv++; if (argc >= 1) { - fprintf(stderr, "command: %s\n", *argv); + prog = *argv; execvp(*argv, argv); } else { - char *prog; - +#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 } - fprintf(stderr, "chroot: cannot execute %s: %s\n", - *argv, strerror(errno)); - exit(FALSE); + perror_msg_and_die("cannot execute %s", prog); + }