Example #1
0
int main(int argc, char *argv[])
{
	char *newroot, *init, **initargs;
	atexit(close_stdout);

	if (argv[1] && (!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")))
		usage(stdout);
	if (argv[1] && (!strcmp(argv[1], "--version") || !strcmp(argv[1], "-V"))) {
		printf(UTIL_LINUX_VERSION);
		return EXIT_SUCCESS;
	}
	if (argc < 3)
		usage(stderr);

	newroot = argv[1];
	init = argv[2];
	initargs = &argv[2];

	if (!*newroot || !*init)
		usage(stderr);

	if (switchroot(newroot))
		errx(EXIT_FAILURE, _("failed. Sorry."));

	if (access(init, X_OK))
		warn(_("cannot access %s"), init);

	execv(init, initargs);
	err(EXIT_FAILURE, _("failed to execute %s"), init);
}
Example #2
0
int main(int argc, char *argv[])
{
	char *newroot, *init, **initargs;

	if (argv[1] && (!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")))
		usage(stdout);
	if (argv[1] && (!strcmp(argv[1], "--version") || !strcmp(argv[1], "-V")))
		version();
	if (argc < 3)
		usage(stderr);

	newroot = argv[1];
	init = argv[2];
	initargs = &argv[2];

	if (!*newroot || !*init)
		usage(stderr);

	if (switchroot(newroot))
		errx(EXIT_FAILURE, "failed. Sorry.");

	if (access(init, X_OK))
		warn("cannot access %s", init);

	/* get session leader */
	setsid();

	/* set controlling terminal */
	if (ioctl (0, TIOCSCTTY, 1))
		warn("failed to TIOCSCTTY");

	execv(init, initargs);
	err(EXIT_FAILURE, "failed to execute %s", init);
}