]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: support writing atomic files with timestamp
authorLennart Poettering <lennart@poettering.net>
Fri, 22 Sep 2017 18:45:06 +0000 (20:45 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 22 Sep 2017 18:45:06 +0000 (20:45 +0200)
Let's make sure "ts" is taken into account when writing atomic files,
too.

src/basic/fileio.c

index 6220d1c11dabbfce020c16cfad68f962005c8f72..be6a5af40ceb3874db2eef85822b629c8ee393a9 100644 (file)
@@ -71,7 +71,13 @@ int write_string_stream_ts(FILE *f, const char *line, bool enforce_newline, stru
         return fflush_and_check(f);
 }
 
-static int write_string_file_atomic(const char *fn, const char *line, bool enforce_newline, bool do_fsync) {
+static int write_string_file_atomic(
+                const char *fn,
+                const char *line,
+                bool enforce_newline,
+                bool do_fsync,
+                struct timespec *ts) {
+
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
         int r;
@@ -85,10 +91,9 @@ static int write_string_file_atomic(const char *fn, const char *line, bool enfor
 
         (void) fchmod_umask(fileno(f), 0644);
 
-        r = write_string_stream(f, line, enforce_newline);
+        r = write_string_stream_ts(f, line, enforce_newline, ts);
         if (r >= 0 && do_fsync)
                 r = fflush_sync_and_check(f);
-
         if (r >= 0) {
                 if (rename(p, fn) < 0)
                         r = -errno;
@@ -113,8 +118,10 @@ int write_string_file_ts(const char *fn, const char *line, WriteStringFileFlags
         if (flags & WRITE_STRING_FILE_ATOMIC) {
                 assert(flags & WRITE_STRING_FILE_CREATE);
 
-                r = write_string_file_atomic(fn, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE),
-                                                       flags & WRITE_STRING_FILE_SYNC);
+                r = write_string_file_atomic(fn,
+                                             line,
+                                             !(flags & WRITE_STRING_FILE_AVOID_NEWLINE),
+                                             flags & WRITE_STRING_FILE_SYNC, ts);
                 if (r < 0)
                         goto fail;