]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: make write_string_stream() accept flags parameter
authorLennart Poettering <lennart@poettering.net>
Fri, 22 Sep 2017 18:55:34 +0000 (20:55 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 22 Sep 2017 18:55:34 +0000 (20:55 +0200)
Let's make write_string_stream() and write_string_file() more alike, and
pass the same flag set so that we can remove a number of boolean
parameters.

src/basic/fileio.c
src/basic/fileio.h
src/sleep/sleep.c
src/test/test-clock.c
src/test/test-fileio.c

index be6a5af40ceb3874db2eef85822b629c8ee393a9..e95036d19b5b5daa0d1cc0c72b809fb9b9c4009e 100644 (file)
 
 #define READ_FULL_BYTES_MAX (4U*1024U*1024U)
 
-int write_string_stream_ts(FILE *f, const char *line, bool enforce_newline, struct timespec *ts) {
+int write_string_stream_ts(
+                FILE *f,
+                const char *line,
+                WriteStringFileFlags flags,
+                struct timespec *ts) {
 
         assert(f);
         assert(line);
 
         fputs(line, f);
-        if (enforce_newline && !endswith(line, "\n"))
+        if (!(flags & WRITE_STRING_FILE_AVOID_NEWLINE) && !endswith(line, "\n"))
                 fputc('\n', f);
 
         if (ts) {
@@ -74,8 +78,7 @@ int write_string_stream_ts(FILE *f, const char *line, bool enforce_newline, stru
 static int write_string_file_atomic(
                 const char *fn,
                 const char *line,
-                bool enforce_newline,
-                bool do_fsync,
+                WriteStringFileFlags flags,
                 struct timespec *ts) {
 
         _cleanup_fclose_ FILE *f = NULL;
@@ -91,8 +94,8 @@ static int write_string_file_atomic(
 
         (void) fchmod_umask(fileno(f), 0644);
 
-        r = write_string_stream_ts(f, line, enforce_newline, ts);
-        if (r >= 0 && do_fsync)
+        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)
@@ -105,7 +108,12 @@ static int write_string_file_atomic(
         return r;
 }
 
-int write_string_file_ts(const char *fn, const char *line, WriteStringFileFlags flags, struct timespec *ts) {
+int write_string_file_ts(
+                const char *fn,
+                const char *line,
+                WriteStringFileFlags flags,
+                struct timespec *ts) {
+
         _cleanup_fclose_ FILE *f = NULL;
         int q, r;
 
@@ -118,10 +126,7 @@ 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, ts);
+                r = write_string_file_atomic(fn, line, flags, ts);
                 if (r < 0)
                         goto fail;
 
@@ -154,7 +159,7 @@ int write_string_file_ts(const char *fn, const char *line, WriteStringFileFlags
                 }
         }
 
-        r = write_string_stream_ts(f, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE), ts);
+        r = write_string_stream_ts(f, line, flags, ts);
         if (r < 0)
                 goto fail;
 
index b4238746d6fb24dcc8176a8ecd86bb5dad742d4f..c4a42eb8e954cb7adec49aa78a752868ecf9ddbe 100644 (file)
@@ -36,9 +36,9 @@ typedef enum {
         WRITE_STRING_FILE_SYNC = 1<<4,
 } WriteStringFileFlags;
 
-int write_string_stream_ts(FILE *f, const char *line, bool enforce_newline, struct timespec *ts);
-static inline int write_string_stream(FILE *f, const char *line, bool enforce_newline) {
-        return write_string_stream_ts(f, line, enforce_newline, NULL);
+int write_string_stream_ts(FILE *f, const char *line, WriteStringFileFlags flags, struct timespec *ts);
+static inline int write_string_stream(FILE *f, const char *line, WriteStringFileFlags flags) {
+        return write_string_stream_ts(f, line, flags, NULL);
 }
 int write_string_file_ts(const char *fn, const char *line, WriteStringFileFlags flags, struct timespec *ts);
 static inline int write_string_file(const char *fn, const char *line, WriteStringFileFlags flags) {
index 4c171a2fe5da8d585803f6b5c4adafefa25e394b..4d774c90b3eaa51c080422243f8cb4c3aa6f819b 100644 (file)
@@ -66,7 +66,7 @@ static int write_state(FILE **f, char **states) {
         STRV_FOREACH(state, states) {
                 int k;
 
-                k = write_string_stream(*f, *state, true);
+                k = write_string_stream(*f, *state, 0);
                 if (k == 0)
                         return 0;
                 log_debug_errno(k, "Failed to write '%s' to /sys/power/state: %m",
index 7d97328416b433ffa49382883c3d5d94e6bae4cc..f246ae838552c911a2463ccaf8ffcc8d579e59fe 100644 (file)
@@ -66,7 +66,7 @@ static void test_clock_is_localtime(void) {
                 log_info("%s", scenarios[i].contents);
                 rewind(f);
                 ftruncate(fd, 0);
-                assert_se(write_string_stream(f, scenarios[i].contents, false) == 0);
+                assert_se(write_string_stream(f, scenarios[i].contents, WRITE_STRING_FILE_AVOID_NEWLINE) == 0);
                 assert_se(clock_is_localtime(adjtime) == scenarios[i].expected_result);
         }
 
index b1d688c89e3a1d966980d6e677ad421045365a15..31bf84f6e692558e8c19a4d52cfb0131bd651119 100644 (file)
@@ -233,7 +233,7 @@ static void test_merge_env_file(void) {
                                 "zzz=${one:+replacement}\n"
                                 "zzzz=${foobar:-${nothing}}\n"
                                 "zzzzz=${nothing:+${nothing}}\n"
-                                , false);
+                                , WRITE_STRING_FILE_AVOID_NEWLINE);
         assert(r >= 0);
 
         r = merge_env_file(&a, NULL, t);
@@ -302,7 +302,7 @@ static void test_merge_env_file_invalid(void) {
                                 ";comment2=comment2\n"
                                 "#\n"
                                 "\n\n"                  /* empty line */
-                                , false);
+                                , WRITE_STRING_FILE_AVOID_NEWLINE);
         assert(r >= 0);
 
         r = merge_env_file(&a, NULL, t);
@@ -414,12 +414,12 @@ static void test_write_string_stream(void) {
 
         f = fdopen(fd, "r");
         assert_se(f);
-        assert_se(write_string_stream(f, "boohoo", true) < 0);
+        assert_se(write_string_stream(f, "boohoo", 0) < 0);
 
         f = freopen(fn, "r+", f);
         assert_se(f);
 
-        assert_se(write_string_stream(f, "boohoo", true) == 0);
+        assert_se(write_string_stream(f, "boohoo", 0) == 0);
         rewind(f);
 
         assert_se(fgets(buf, sizeof(buf), f));
@@ -428,7 +428,7 @@ static void test_write_string_stream(void) {
         f = freopen(fn, "w+", f);
         assert_se(f);
 
-        assert_se(write_string_stream(f, "boohoo", false) == 0);
+        assert_se(write_string_stream(f, "boohoo", WRITE_STRING_FILE_AVOID_NEWLINE) == 0);
         rewind(f);
 
         assert_se(fgets(buf, sizeof(buf), f));