chiark / gitweb /
fileio: add 'enforce_newline' argument to write_string_stream()
[elogind.git] / src / shared / fileio.c
index ff6b1a7ed776db2c6b53a41b09fec1ed43466396..82b40aa7daf93532dfb5d5d8f43b087d9ee66218 100644 (file)
 #include "ctype.h"
 #include "fileio.h"
 
-int write_string_stream(FILE *f, const char *line) {
+int write_string_stream(FILE *f, const char *line, bool enforce_newline) {
         assert(f);
         assert(line);
 
         errno = 0;
 
         fputs(line, f);
-        if (!endswith(line, "\n"))
+        if (enforce_newline && !endswith(line, "\n"))
                 fputc('\n', f);
 
         fflush(f);
@@ -55,7 +55,7 @@ int write_string_file(const char *fn, const char *line) {
         if (!f)
                 return -errno;
 
-        return write_string_stream(f, line);
+        return write_string_stream(f, line, true);
 }
 
 int write_string_file_no_create(const char *fn, const char *line) {
@@ -77,7 +77,7 @@ int write_string_file_no_create(const char *fn, const char *line) {
                 return -errno;
         }
 
-        return write_string_stream(f, line);
+        return write_string_stream(f, line, true);
 }
 
 int write_string_file_atomic(const char *fn, const char *line) {
@@ -94,7 +94,7 @@ int write_string_file_atomic(const char *fn, const char *line) {
 
         fchmod_umask(fileno(f), 0644);
 
-        r = write_string_stream(f, line);
+        r = write_string_stream(f, line, true);
         if (r >= 0) {
                 if (rename(p, fn) < 0)
                         r = -errno;
@@ -134,6 +134,17 @@ int read_one_line_file(const char *fn, char **line) {
         return 0;
 }
 
+int verify_one_line_file(const char *fn, const char *line) {
+        _cleanup_free_ char *value = NULL;
+        int r;
+
+        r = read_one_line_file(fn, &value);
+        if (r < 0)
+                return r;
+
+        return streq(value, line);
+}
+
 int read_full_stream(FILE *f, char **contents, size_t *size) {
         size_t n, l;
         _cleanup_free_ char *buf = NULL;