]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: add read_stripped_line() as trivial read_line() + strstrip() combo
authorLennart Poettering <lennart@poettering.net>
Mon, 16 Oct 2023 15:55:07 +0000 (17:55 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 17 Oct 2023 12:36:54 +0000 (14:36 +0200)
src/basic/fileio.c
src/basic/fileio.h

index 527f53daee8726c1405aef5c4fa78a7d6def6b46..6129461e660903f53898804c2845f97ce60835cf 100644 (file)
@@ -1488,6 +1488,36 @@ int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret) {
         return (int) count;
 }
 
+int read_stripped_line(FILE *f, size_t limit, char **ret) {
+        _cleanup_free_ char *s = NULL;
+        int r;
+
+        assert(f);
+
+        r = read_line(f, limit, ret ? &s : NULL);
+        if (r < 0)
+                return r;
+
+        if (ret) {
+                const char *p;
+
+                p = strstrip(s);
+                if (p == s)
+                        *ret = TAKE_PTR(s);
+                else {
+                        char *copy;
+
+                        copy = strdup(p);
+                        if (!copy)
+                                return -ENOMEM;
+
+                        *ret = copy;
+                }
+        }
+
+        return r;
+}
+
 int safe_fgetc(FILE *f, char *ret) {
         int k;
 
index cd18bcc1177bbf56d257c90b79d3ac8a0b26acd4..e0e0a45b2b53dcee76ca8878f654202dfa800012 100644 (file)
@@ -166,6 +166,8 @@ static inline int read_nul_string(FILE *f, size_t limit, char **ret) {
         return read_line_full(f, limit, READ_LINE_ONLY_NUL, ret);
 }
 
+int read_stripped_line(FILE *f, size_t limit, char **ret);
+
 int safe_fgetc(FILE *f, char *ret);
 
 int warn_file_is_world_accessible(const char *filename, struct stat *st, const char *unit, unsigned line);