From: Chris Lesiak Date: Tue, 24 Apr 2018 14:50:42 +0000 (-0500) Subject: fileio.c: fix incorrect mtime X-Git-Tag: v239~359^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=be83711c7eb6a09e0d0c529c427cebcae87c0c1f;p=thirdparty%2Fsystemd.git 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 --- diff --git a/src/basic/fileio.c b/src/basic/fileio.c index ca984aaa143..5cab4c1024c 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -50,6 +50,7 @@ int write_string_stream_ts( struct timespec *ts) { bool needs_nl; + int r; assert(f); assert(line); @@ -74,6 +75,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}; @@ -81,10 +89,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(