fileio: move fsync() logic into write_string_stream_ts()

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().
This commit is contained in:
Lennart Poettering 2017-09-22 20:59:39 +02:00
parent b183713383
commit 9dd1b1e869

View file

@ -72,7 +72,10 @@ int write_string_stream_ts(
return -errno; 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( static int write_string_file_atomic(
@ -95,16 +98,18 @@ static int write_string_file_atomic(
(void) fchmod_umask(fileno(f), 0644); (void) fchmod_umask(fileno(f), 0644);
r = write_string_stream_ts(f, line, flags, ts); r = write_string_stream_ts(f, line, flags, ts);
if (r >= 0 && (flags & WRITE_STRING_FILE_SYNC)) if (r < 0)
r = fflush_sync_and_check(f); goto fail;
if (r >= 0) {
if (rename(p, fn) < 0) if (rename(p, fn) < 0) {
r = -errno; r = -errno;
goto fail;
} }
if (r < 0) return 0;
(void) unlink(p);
fail:
(void) unlink(p);
return r; return r;
} }
@ -163,12 +168,6 @@ int write_string_file_ts(
if (r < 0) if (r < 0)
goto fail; goto fail;
if (flags & WRITE_STRING_FILE_SYNC) {
r = fflush_sync_and_check(f);
if (r < 0)
return r;
}
return 0; return 0;
fail: fail: