diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-02-13 20:04:30 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-02-13 20:04:30 +0000 |
commit | 6fd8c664c1bcb44429b81444be640ff08cac3702 (patch) | |
tree | a8faf540fe49e308e52e1694e00f280ac51b9192 | |
parent | 3af1f88725348b15a0aa467b5734d55210bedf7c (diff) | |
download | busybox-6fd8c664c1bcb44429b81444be640ff08cac3702.tar.gz |
Apply a patch from Evin Robertson -- new pivot_root applet.
-Erik
-rw-r--r-- | Changelog | 6 | ||||
-rw-r--r-- | Config.h | 1 | ||||
-rw-r--r-- | applets.h | 3 | ||||
-rw-r--r-- | applets/usage.c | 10 | ||||
-rw-r--r-- | include/applets.h | 3 | ||||
-rw-r--r-- | pivot_root.c | 39 | ||||
-rw-r--r-- | usage.c | 10 | ||||
-rw-r--r-- | util-linux/pivot_root.c | 39 |
8 files changed, 111 insertions, 0 deletions
@@ -1,3 +1,9 @@ +0.50 + * Evin Robertson -- new pivot_root applet + + + -Erik Andersen, not yet released + 0.49 * Matt Kraai -- new sort.c @@ -74,6 +74,7 @@ //#define BB_MT //#define BB_NSLOOKUP //#define BB_PING +//#define BB_PIVOT_ROOT #define BB_POWEROFF //#define BB_PRINTF #define BB_PS @@ -245,6 +245,9 @@ const struct BB_applet applets[] = { #ifdef BB_PING APPLET("ping", ping_main, _BB_DIR_BIN, ping_usage) #endif +#ifdef BB_PIVOT_ROOT + APPLET("pivot_root", pivot_root_main, _BB_DIR_SBIN, pivot_root_usage) +#endif #ifdef BB_POWEROFF APPLET("poweroff", poweroff_main, _BB_DIR_SBIN, poweroff_usage) #endif diff --git a/applets/usage.c b/applets/usage.c index 52c0a6915..13107c6e0 100644 --- a/applets/usage.c +++ b/applets/usage.c @@ -1012,6 +1012,16 @@ const char ping_usage[] = #endif #endif +#if defined BB_PIVOT_ROOT +const char pivot_root_usage[] = + "pivot_root new_root put_old" +#ifndef BB_FEATURE_TRIVIAL_HELP + "\n\nMove the current root file system to put_old and make new_root\n" + "the new root file system." +#endif + ; +#endif + #if defined BB_POWEROFF const char poweroff_usage[] = "poweroff" diff --git a/include/applets.h b/include/applets.h index 582b2fa38..4bd8b79e4 100644 --- a/include/applets.h +++ b/include/applets.h @@ -245,6 +245,9 @@ const struct BB_applet applets[] = { #ifdef BB_PING APPLET("ping", ping_main, _BB_DIR_BIN, ping_usage) #endif +#ifdef BB_PIVOT_ROOT + APPLET("pivot_root", pivot_root_main, _BB_DIR_SBIN, pivot_root_usage) +#endif #ifdef BB_POWEROFF APPLET("poweroff", poweroff_main, _BB_DIR_SBIN, poweroff_usage) #endif diff --git a/pivot_root.c b/pivot_root.c new file mode 100644 index 000000000..92fe4aeab --- /dev/null +++ b/pivot_root.c @@ -0,0 +1,39 @@ +/* vi: set sw=4 ts=4: */ +/* + * pivot_root.c - Change root file system. Based on util-linux 2.10s + * + * busyboxed by Evin Robertson + */ +#include "busybox.h" +#include <stdlib.h> +#include <stdio.h> +#include <sys/syscall.h> +#include <linux/unistd.h> + +#ifndef __NR_pivot_root +#error Sorry, but this kernel does not support the pivot_root syscall +#endif + +static _syscall2(int,pivot_root,const char *,new_root,const char *,put_old) + + +int pivot_root_main(int argc, char **argv) +{ + if (argc != 3) + usage(pivot_root_usage); + + if (pivot_root(argv[1],argv[2]) < 0) + perror_msg_and_die("pivot_root"); + + return EXIT_SUCCESS; + +} + + +/* +Local Variables: +c-file-style: "linux" +c-basic-offset: 4 +tab-width: 4 +End: +*/ @@ -1012,6 +1012,16 @@ const char ping_usage[] = #endif #endif +#if defined BB_PIVOT_ROOT +const char pivot_root_usage[] = + "pivot_root new_root put_old" +#ifndef BB_FEATURE_TRIVIAL_HELP + "\n\nMove the current root file system to put_old and make new_root\n" + "the new root file system." +#endif + ; +#endif + #if defined BB_POWEROFF const char poweroff_usage[] = "poweroff" diff --git a/util-linux/pivot_root.c b/util-linux/pivot_root.c new file mode 100644 index 000000000..92fe4aeab --- /dev/null +++ b/util-linux/pivot_root.c @@ -0,0 +1,39 @@ +/* vi: set sw=4 ts=4: */ +/* + * pivot_root.c - Change root file system. Based on util-linux 2.10s + * + * busyboxed by Evin Robertson + */ +#include "busybox.h" +#include <stdlib.h> +#include <stdio.h> +#include <sys/syscall.h> +#include <linux/unistd.h> + +#ifndef __NR_pivot_root +#error Sorry, but this kernel does not support the pivot_root syscall +#endif + +static _syscall2(int,pivot_root,const char *,new_root,const char *,put_old) + + +int pivot_root_main(int argc, char **argv) +{ + if (argc != 3) + usage(pivot_root_usage); + + if (pivot_root(argv[1],argv[2]) < 0) + perror_msg_and_die("pivot_root"); + + return EXIT_SUCCESS; + +} + + +/* +Local Variables: +c-file-style: "linux" +c-basic-offset: 4 +tab-width: 4 +End: +*/ |