diff options
author | Sven Eden <yamakuzure@gmx.net> | 2017-01-04 06:40:46 +0100 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-03-14 10:18:48 +0100 |
commit | 1b99ea27bc3ffa1fc6f7cfe89563d891a9aed4c5 (patch) | |
tree | e38d5381c0db745ee15cde4de4d0215394f60b15 /src/login/logind-user.c | |
parent | 696711d7a3f13c31b5d9daf3e992a28010ac335a (diff) |
Prep v225: Applying various fixes and changes to src/login that got lost during git am transfer.
Diffstat (limited to 'src/login/logind-user.c')
-rw-r--r-- | src/login/logind-user.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 71bff9672..987244e27 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -118,11 +118,11 @@ int user_save(User *u) { r = mkdir_safe_label("/run/systemd/users", 0755, 0, 0); if (r < 0) - goto finish; + goto fail; r = fopen_temporary(u->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fchmod(fileno(f), 0644); @@ -243,19 +243,24 @@ int user_save(User *u) { fputc('\n', f); } - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, u->state_file) < 0) { + if (rename(temp_path, u->state_file) < 0) { r = -errno; - unlink(u->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save user data %s: %m", u->state_file); + return 0; - return r; +fail: + (void) unlink(u->state_file); + + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save user data %s: %m", u->state_file); } int user_load(User *u) { |