summaryrefslogtreecommitdiff
path: root/src/basic/fileio.c
diff options
context:
space:
mode:
authorChris Lesiak <chris.lesiak@licor.com>2018-04-24 09:50:42 -0500
committerSven Eden <yamakuzure@gmx.net>2018-06-28 09:24:07 +0200
commitdc69ce6d0c762bf1984e2070cba42b279d32943c (patch)
tree838fb1d2e583d9943ca45cd7c2dc69c8b0d3734c /src/basic/fileio.c
parent9850448bd016ea3301c2a226c2299876e31b2924 (diff)
fileio.c: fix incorrect mtime
A regression was introduced that caused the mtime of /etc/.updated and /var/.updated to be the current time when systemd-update-done ran instead of being copied from /usr. This was nearly fixed, but due to fflush being called after mtime was carefully set, it was overwritten with the current time. Regression introduced in 872c40396384f9fa89b01baf4e739d28ed590299 A fix was just missed in 39c38d773fbe2b4f76ff29ecd3344640efb9a86c Fixes #8806 (cherry picked from commit be83711c7eb6a09e0d0c529c427cebcae87c0c1f)
Diffstat (limited to 'src/basic/fileio.c')
-rw-r--r--src/basic/fileio.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 484355652..247309fe8 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -63,6 +63,7 @@ int write_string_stream_ts(
struct timespec *ts) {
bool needs_nl;
+ int r;
assert(f);
assert(line);
@@ -87,6 +88,13 @@ int write_string_stream_ts(
if (fputc('\n', f) == EOF)
return -errno;
+ if (flags & WRITE_STRING_FILE_SYNC)
+ r = fflush_sync_and_check(f);
+ else
+ r = fflush_and_check(f);
+ if (r < 0)
+ return r;
+
if (ts) {
struct timespec twice[2] = {*ts, *ts};
@@ -94,10 +102,7 @@ int write_string_stream_ts(
return -errno;
}
- if (flags & WRITE_STRING_FILE_SYNC)
- return fflush_sync_and_check(f);
- else
- return fflush_and_check(f);
+ return 0;
}
static int write_string_file_atomic(