X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-manager.c;h=8a0ed5ea2b4f38966cd07562eaa8c6bf4636a40a;hb=c2d6bd61ee77b59566116afe6e20513d19945ed4;hp=223cb2a75aa5e7de77f8afaecc3c3dc51b0b3d1d;hpb=bf1594f54ea4b49eee95a16796ec11c55314b2a4;p=elogind.git diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 223cb2a75..8a0ed5ea2 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -440,7 +440,7 @@ int manager_save(Manager *m) { r = fopen_temporary(m->state_file, &f, &temp_path); if (r < 0) - goto finish; + return r; fchmod(fileno(f), 0644); @@ -448,18 +448,21 @@ int manager_save(Manager *m) { "# This is private data. Do not parse.\n" "OPER_STATE=%s\n", operstate_str); - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, m->state_file) < 0) { + if (rename(temp_path, m->state_file) < 0) { r = -errno; - unlink(m->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error("Failed to save network state to %s: %s", m->state_file, strerror(-r)); + return 0; +fail: + log_error("Failed to save network state to %s: %s", m->state_file, strerror(-r)); + unlink(m->state_file); + unlink(temp_path); return r; }