From 6fd8c664c1bcb44429b81444be640ff08cac3702 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 13 Feb 2001 20:04:30 +0000 Subject: [PATCH] Apply a patch from Evin Robertson -- new pivot_root applet. -Erik --- Changelog | 6 ++++++ Config.h | 1 + applets.h | 3 +++ applets/usage.c | 10 ++++++++++ include/applets.h | 3 +++ pivot_root.c | 39 +++++++++++++++++++++++++++++++++++++++ usage.c | 10 ++++++++++ util-linux/pivot_root.c | 39 +++++++++++++++++++++++++++++++++++++++ 8 files changed, 111 insertions(+) create mode 100644 pivot_root.c create mode 100644 util-linux/pivot_root.c diff --git a/Changelog b/Changelog index c4be93af5..45babb7ea 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,9 @@ +0.50 + * Evin Robertson -- new pivot_root applet + + + -Erik Andersen, not yet released + 0.49 * Matt Kraai -- new sort.c diff --git a/Config.h b/Config.h index 65d57d20e..c9e675093 100644 --- a/Config.h +++ b/Config.h @@ -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 diff --git a/applets.h b/applets.h index 582b2fa38..4bd8b79e4 100644 --- a/applets.h +++ b/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/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 +#include +#include +#include + +#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: +*/ diff --git a/usage.c b/usage.c index 52c0a6915..13107c6e0 100644 --- a/usage.c +++ b/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/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 +#include +#include +#include + +#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: +*/