busybox/util-linux/pivot_root.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * pivot_root.c - Change root file system.  Based on util-linux 2.10s
   4 *
   5 * busyboxed by Evin Robertson
   6 * pivot_root syscall stubbed by Erik Andersen, so it will compile
   7 *     regardless of the kernel being used.
   8 *
   9 * Licensed under GPLv2, see file LICENSE in this source tree.
  10 */
  11//config:config PIVOT_ROOT
  12//config:       bool "pivot_root (1.1 kb)"
  13//config:       default y
  14//config:       help
  15//config:       The pivot_root utility swaps the mount points for the root filesystem
  16//config:       with some other mounted filesystem. This allows you to do all sorts
  17//config:       of wild and crazy things with your Linux system and is far more
  18//config:       powerful than 'chroot'.
  19//config:
  20//config:       Note: This is for initrd in linux 2.4. Under initramfs (introduced
  21//config:       in linux 2.6) use switch_root instead.
  22
  23//applet:IF_PIVOT_ROOT(APPLET_NOFORK(pivot_root, pivot_root, BB_DIR_SBIN, BB_SUID_DROP, pivot_root))
  24
  25//kbuild:lib-$(CONFIG_PIVOT_ROOT) += pivot_root.o
  26
  27//usage:#define pivot_root_trivial_usage
  28//usage:       "NEW_ROOT PUT_OLD"
  29//usage:#define pivot_root_full_usage "\n\n"
  30//usage:       "Move the current root file system to PUT_OLD and make NEW_ROOT\n"
  31//usage:       "the new root file system"
  32
  33#include "libbb.h"
  34
  35extern int pivot_root(const char *new_root, const char *put_old);
  36
  37int pivot_root_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  38int pivot_root_main(int argc, char **argv)
  39{
  40        if (argc != 3)
  41                bb_show_usage();
  42
  43        /* NOFORK applet. Hardly matters wrt performance, but code is trivial */
  44
  45        if (pivot_root(argv[1], argv[2]) < 0) {
  46                /* prints "pivot_root: <strerror text>" */
  47                bb_perror_nomsg_and_die();
  48        }
  49
  50        return EXIT_SUCCESS;
  51}
  52