X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fremount-fs%2Fremount-fs.c;h=57b47021e4431526ec32c4b34c806d330f0d722a;hb=d27efd93841a2ac2127fd53321368cc3f975c564;hp=ef68e506e5097da4628acad62cb5af547a800042;hpb=9eb977db5b89b44f254ab40c1876a76b7d7ea2d0;p=elogind.git diff --git a/src/remount-fs/remount-fs.c b/src/remount-fs/remount-fs.c index ef68e506e..57b47021e 100644 --- a/src/remount-fs/remount-fs.c +++ b/src/remount-fs/remount-fs.c @@ -40,7 +40,7 @@ int main(int argc, char *argv[]) { int ret = EXIT_FAILURE; - FILE *f = NULL; + _cleanup_endmntent_ FILE *f = NULL; struct mntent* me; Hashmap *pids = NULL; @@ -57,16 +57,14 @@ int main(int argc, char *argv[]) { f = setmntent("/etc/fstab", "r"); if (!f) { - if (errno == ENOENT) { - ret = EXIT_SUCCESS; - goto finish; - } + if (errno == ENOENT) + return EXIT_SUCCESS; - log_error("Failed to open /etc/fstab: %m"); - goto finish; + log_error_errno(errno, "Failed to open /etc/fstab: %m"); + return EXIT_FAILURE; } - pids = hashmap_new(trivial_hash_func, trivial_compare_func); + pids = hashmap_new(NULL); if (!pids) { log_error("Failed to allocate set"); goto finish; @@ -79,16 +77,17 @@ int main(int argc, char *argv[]) { int k; char *s; - /* Remount the root fs and all API VFS */ + /* Remount the root fs, /usr and all API VFS */ if (!mount_point_is_api(me->mnt_dir) && - !path_equal(me->mnt_dir, "/")) + !path_equal(me->mnt_dir, "/") && + !path_equal(me->mnt_dir, "/usr")) continue; log_debug("Remounting %s", me->mnt_dir); pid = fork(); if (pid < 0) { - log_error("Failed to fork: %m"); + log_error_errno(errno, "Failed to fork: %m"); ret = EXIT_FAILURE; continue; } @@ -105,7 +104,7 @@ int main(int argc, char *argv[]) { execv("/bin/mount", (char **) arguments); - log_error("Failed to execute /bin/mount: %m"); + log_error_errno(errno, "Failed to execute /bin/mount: %m"); _exit(EXIT_FAILURE); } @@ -113,7 +112,7 @@ int main(int argc, char *argv[]) { s = strdup(me->mnt_dir); if (!s) { - log_error("Out of memory."); + log_oom(); ret = EXIT_FAILURE; continue; } @@ -121,30 +120,29 @@ int main(int argc, char *argv[]) { k = hashmap_put(pids, UINT_TO_PTR(pid), s); if (k < 0) { - log_error("Failed to add PID to set: %s", strerror(-k)); + log_error_errno(k, "Failed to add PID to set: %m"); ret = EXIT_FAILURE; continue; } } while (!hashmap_isempty(pids)) { - siginfo_t si; + siginfo_t si = {}; char *s; - zero(si); if (waitid(P_ALL, 0, &si, WEXITED) < 0) { if (errno == EINTR) continue; - log_error("waitid() failed: %m"); + log_error_errno(errno, "waitid() failed: %m"); ret = EXIT_FAILURE; break; } s = hashmap_remove(pids, UINT_TO_PTR(si.si_pid)); if (s) { - if (!is_clean_exit(si.si_code, si.si_status)) { + if (!is_clean_exit(si.si_code, si.si_status, NULL)) { if (si.si_code == CLD_EXITED) log_error("/bin/mount for %s exited with exit status %i.", s, si.si_status); else @@ -162,8 +160,5 @@ finish: if (pids) hashmap_free_free(pids); - if (f) - endmntent(f); - return ret; }