X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fswitch-root.c;h=813641ad44da59b7c0969c89adc192a40623aceb;hb=95eb099fa8a90212ed2aef82bad360f147bc19c2;hp=c5b635d17d8efe537f5fba319163380bde84ae18;hpb=56f64d95763a799ba4475daf44d8e9f72a1bd474;p=elogind.git diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c index c5b635d17..813641ad4 100644 --- a/src/shared/switch-root.c +++ b/src/shared/switch-root.c @@ -51,15 +51,13 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, if (path_equal(new_root, "/")) return 0; - temporary_old_root = strappenda(new_root, oldroot); + temporary_old_root = strjoina(new_root, oldroot); mkdir_p_label(temporary_old_root, 0755); old_root_remove = in_initrd(); - if (stat(new_root, &new_root_stat) < 0) { - log_error_errno(errno, "Failed to stat directory %s: %m", new_root); - return -errno; - } + if (stat(new_root, &new_root_stat) < 0) + return log_error_errno(errno, "Failed to stat directory %s: %m", new_root); /* Work-around for kernel design: the kernel refuses switching * root if any file systems are mounted MS_SHARED. Hence @@ -74,7 +72,6 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, struct stat sb; snprintf(new_mount, sizeof(new_mount), "%s%s", new_root, i); - char_array_0(new_mount); mkdir_p_label(new_mount, 0755); @@ -109,10 +106,8 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, * switch_root() nevertheless. */ (void) base_filesystem_create(new_root); - if (chdir(new_root) < 0) { - log_error_errno(errno, "Failed to change directory to %s: %m", new_root); - return -errno; - } + if (chdir(new_root) < 0) + return log_error_errno(errno, "Failed to change directory to %s: %m", new_root); if (old_root_remove) { old_root_fd = open("/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY|O_DIRECTORY); @@ -132,20 +127,14 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, oldroot, errno == ENOENT ? "ignoring" : "leaving it around"); - } else if (mount(new_root, "/", NULL, MS_MOVE, NULL) < 0) { - log_error_errno(errno, "Failed to mount moving %s to /: %m", new_root); - return -errno; - } + } else if (mount(new_root, "/", NULL, MS_MOVE, NULL) < 0) + return log_error_errno(errno, "Failed to mount moving %s to /: %m", new_root); - if (chroot(".") < 0) { - log_error_errno(errno, "Failed to change root: %m"); - return -errno; - } + if (chroot(".") < 0) + return log_error_errno(errno, "Failed to change root: %m"); - if (chdir("/") < 0) { - log_error_errno(errno, "Failed to change directory: %m"); - return -errno; - } + if (chdir("/") < 0) + return log_error_errno(errno, "Failed to change directory: %m"); if (old_root_fd >= 0) { struct stat rb;