summaryrefslogtreecommitdiff
path: root/src/login/logind-user.c
diff options
context:
space:
mode:
authorSven Eden <yamakuzure@gmx.net>2017-01-04 06:40:46 +0100
committerSven Eden <yamakuzure@gmx.net>2017-03-14 10:18:48 +0100
commit1b99ea27bc3ffa1fc6f7cfe89563d891a9aed4c5 (patch)
treee38d5381c0db745ee15cde4de4d0215394f60b15 /src/login/logind-user.c
parent696711d7a3f13c31b5d9daf3e992a28010ac335a (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.c25
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) {