diff options
author | Chris Lesiak <chris.lesiak@licor.com> | 2018-04-24 09:50:42 -0500 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-06-28 09:24:07 +0200 |
commit | dc69ce6d0c762bf1984e2070cba42b279d32943c (patch) | |
tree | 838fb1d2e583d9943ca45cd7c2dc69c8b0d3734c /src/basic/fileio.c | |
parent | 9850448bd016ea3301c2a226c2299876e31b2924 (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.c | 13 |
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( |