X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=chroot.c;h=e721e1ffa397dc74b7fa1b1e474293c1cfb151a4;hb=361ee514c636b371a50554ab73a3bfd54a49804d;hp=3622c26dc7461360dafbed65bb18a193608883e9;hpb=029011b9eeaf491d00fda1d072c4c6094df96c3a;p=oweals%2Fbusybox.git diff --git a/chroot.c b/chroot.c index 3622c26dc..e721e1ffa 100644 --- a/chroot.c +++ b/chroot.c @@ -3,7 +3,7 @@ * Mini chroot implementation for busybox * * - * Copyright (C) 1999 by Lineo, inc. + * Copyright (C) 1999,2000,2001 by Lineo, inc. * Written by Erik Andersen , * * This program is free software; you can redistribute it and/or modify @@ -22,48 +22,44 @@ * */ -#include "internal.h" +#include "busybox.h" #include #include +#include #include - -static const char chroot_usage[] = "chroot NEWROOT [COMMAND...]\n\n" - - "Run COMMAND with root directory set to NEWROOT.\n"; - - - 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; - +#ifndef BB_SH prog = getenv("SHELL"); if (!prog) prog = "/bin/sh"; execlp(prog, prog, NULL); +#else + shell_main(argc, argv); + return EXIT_SUCCESS; +#endif } - fprintf(stderr, "chroot: cannot execute %s: %s\n", - *argv, strerror(errno)); - exit(FALSE); + perror_msg_and_die("cannot execute %s", prog); + }