aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog6
-rw-r--r--Config.h1
-rw-r--r--applets.h3
-rw-r--r--applets/usage.c10
-rw-r--r--include/applets.h3
-rw-r--r--pivot_root.c39
-rw-r--r--usage.c10
-rw-r--r--util-linux/pivot_root.c39
8 files changed, 111 insertions, 0 deletions
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 <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:
+*/
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 <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:
+*/