chiark / gitweb /
fileio: move fsync() logic into write_string_stream_ts()
authorLennart Poettering <lennart@poettering.net>
Fri, 22 Sep 2017 18:59:39 +0000 (20:59 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 22 Sep 2017 18:59:39 +0000 (20:59 +0200)
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().

src/basic/fileio.c

index 65d63a0ffa008787599fd78f7dc3be0acfb0864b..d5751a3b59376568d557b685f3ed22e3107c91e3 100644 (file)
@@ -72,7 +72,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(
@@ -95,16 +98,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;
 }
 
@@ -163,12 +168,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: