summaryrefslogtreecommitdiff
path: root/src/basic/fileio.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-09-22 20:59:39 +0200
committerSven Eden <yamakuzure@gmx.net>2017-09-22 20:59:39 +0200
commitf030d15c1e3b2279c7bcd71b817cdbcf56ca74de (patch)
treec83eb4eda9ea22acaac71d5740d1e7ed05d5a2e1 /src/basic/fileio.c
parent42d58088504bf7fef99f427bf863263c562ec4d3 (diff)
fileio: move fsync() logic into write_string_stream_ts()
That way, write_string_stream_ts() becomes more powerful, and we can remove duplicate code from write_string_file_atomic() and write_string_file_ts().
Diffstat (limited to 'src/basic/fileio.c')
-rw-r--r--src/basic/fileio.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 404d79d18..c2f0c7b7a 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -71,7 +71,10 @@ int write_string_stream_ts(
return -errno;
}
- return fflush_and_check(f);
+ if (flags & WRITE_STRING_FILE_SYNC)
+ return fflush_sync_and_check(f);
+ else
+ return fflush_and_check(f);
}
static int write_string_file_atomic(
@@ -94,16 +97,18 @@ static int write_string_file_atomic(
(void) fchmod_umask(fileno(f), 0644);
r = write_string_stream_ts(f, line, flags, ts);
- if (r >= 0 && (flags & WRITE_STRING_FILE_SYNC))
- r = fflush_sync_and_check(f);
- if (r >= 0) {
- if (rename(p, fn) < 0)
- r = -errno;
+ if (r < 0)
+ goto fail;
+
+ if (rename(p, fn) < 0) {
+ r = -errno;
+ goto fail;
}
- if (r < 0)
- (void) unlink(p);
+ return 0;
+fail:
+ (void) unlink(p);
return r;
}
@@ -162,12 +167,6 @@ int write_string_file_ts(
if (r < 0)
goto fail;
- if (flags & WRITE_STRING_FILE_SYNC) {
- r = fflush_sync_and_check(f);
- if (r < 0)
- return r;
- }
-
return 0;
fail: