view toys/other/pivot_root.c @ 1676:cbb1aca81eca draft

Make toy_exec() check if argc is in optargs and deal with it there so we don't need a separate xexec_optargs().
author Rob Landley <rob@landley.net>
date Sat, 07 Feb 2015 16:17:44 -0600
parents da72fa267b7b
children 57f2a26fa92c
line wrap: on
line source

/* pivot_root.c - edit system mount tree
 *
 * Copyright 2012 Rob Landley <rob@landley.net>

USE_PIVOT_ROOT(NEWTOY(pivot_root, "<2>2", TOYFLAG_USR|TOYFLAG_BIN))

config PIVOT_ROOT
  bool "pivot_root"
  default y
  help
    usage: pivot_root OLD NEW

    Swap OLD and NEW filesystems (as if by simultaneous mount --move), and
    move all processes with chdir or chroot under OLD into NEW (including
    kernel threads) so OLD may be unmounted.

    The directory NEW must exist under OLD. This doesn't work on initramfs,
    which can't be moved (about the same way PID 1 can't be killed; see
    switch_root instead).
*/

#define FOR_pivot_root
#include "toys.h"

#include <sys/syscall.h>
#include <unistd.h>

void pivot_root_main(void)
{
  if (syscall(__NR_pivot_root, toys.optargs[0], toys.optargs[1]))
    perror_exit("'%s' -> '%s'", toys.optargs[0], toys.optargs[1]);
}