← Commit list

3ace9fa6d

Denis Vlasenko
Denis Vlasenko
2007-04-18
FAILED Duration: 16s

Subject

switch_root: error_msg -> perror_msg, reduce by 22 bytes while at it.

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

util-linux/switch_root.c+8 -7
@@ -75,14 +75,14 @@ int switch_root_main(int argc, char **argv)
opt_complementary = "-2";
getopt32(argc, argv, "c:", &console);
+ argv += optind;
// Change to new root directory and verify it's a different fs.
- newroot = argv[optind++];
+ newroot = *argv++;
- if (chdir(newroot) || lstat(".", &st1) || lstat("/", &st2) ||
- st1.st_dev == st2.st_dev)
- {
+ xchdir(newroot);
+ if (lstat(".", &st1) || lstat("/", &st2) || st1.st_dev == st2.st_dev) {
bb_error_msg_and_die("bad newroot %s", newroot);
}
rootdev = st2.st_dev;
@@ -105,8 +105,9 @@ int switch_root_main(int argc, char **argv)
// Overmount / with newdir and chroot into it. The chdir is needed to
// recalculate "." and ".." links.
- if (mount(".", "/", NULL, MS_MOVE, NULL) || chroot(".") || chdir("/"))
+ if (mount(".", "/", NULL, MS_MOVE, NULL) || chroot("."))
bb_error_msg_and_die("error moving root");
+ xchdir("/");
// If a new console specified, redirect stdin/stdout/stderr to that.
@@ -118,6 +119,6 @@ int switch_root_main(int argc, char **argv)
}
// Exec real init. (This is why we must be pid 1.)
- execv(argv[optind], argv+optind);
- bb_error_msg_and_die("bad init '%s'", argv[optind]);
+ execv(argv[0], argv);
+ bb_perror_msg_and_die("bad init %s", argv[0]);
}