chiark / gitweb /
fileio: add parse_env_filev() that is like parse_env_file() but takes a va_list
authorLennart Poettering <lennart@poettering.net>
Mon, 26 Mar 2018 17:20:47 +0000 (19:20 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
src/basic/fileio.c
src/basic/fileio.h

index 0efda65aec69fe598d61851d96c6a75e1975a12f..8b744c11ea3669e197dcd1bf4d59a753c2df38ff 100644 (file)
@@ -676,22 +676,41 @@ static int parse_env_file_push(
         return 0;
 }
 
-int parse_env_file(
+int parse_env_filev(
                 FILE *f,
                 const char *fname,
-                const char *newline, ...) {
+                const char *newline,
+                va_list ap) {
 
-        va_list ap;
         int r, n_pushed = 0;
+        va_list aq;
 
         if (!newline)
                 newline = NEWLINE;
 
+        va_copy(aq, ap);
+        r = parse_env_file_internal(f, fname, newline, parse_env_file_push, &aq, &n_pushed);
+        va_end(aq);
+        if (r < 0)
+                return r;
+
+        return n_pushed;
+}
+
+int parse_env_file(
+                FILE *f,
+                const char *fname,
+                const char *newline,
+                ...) {
+
+        va_list ap;
+        int r;
+
         va_start(ap, newline);
-        r = parse_env_file_internal(f, fname, newline, parse_env_file_push, &ap, &n_pushed);
+        r = parse_env_filev(f, fname, newline, ap);
         va_end(ap);
 
-        return r < 0 ? r : n_pushed;
+        return r;
 }
 
 #if 0 /// UNNEEDED by elogind
index e34bd388bc9841d6c6cb90e6dd24219e0a0437ba..ee17f4091007eaac4f7f841909533d7342426bf8 100644 (file)
@@ -45,6 +45,7 @@ int read_full_stream(FILE *f, char **contents, size_t *size);
 
 int verify_file(const char *fn, const char *blob, bool accept_extra_nl);
 
+int parse_env_filev(FILE *f, const char *fname, const char *separator, va_list ap);
 int parse_env_file(FILE *f, const char *fname, const char *separator, ...) _sentinel_;
 #if 0 /// UNNEEDED by elogind
 int load_env_file(FILE *f, const char *fname, const char *separator, char ***l);