]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
env-file: introduce parse_env_file_fd()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 13 Dec 2022 08:24:19 +0000 (17:24 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Dec 2022 11:18:58 +0000 (20:18 +0900)
src/basic/env-file.c
src/basic/env-file.h

index af82ddfb630366a4c898101f99d36c1fba617185..5a4b21ee6aafb707ace41c6ec1ce37544356f184 100644 (file)
@@ -376,6 +376,35 @@ int parse_env_file_sentinel(
         return r;
 }
 
+int parse_env_file_fd_sentinel(
+                int fd,
+                const char *fname, /* only used for logging */
+                ...) {
+
+        _cleanup_close_ int fd_ro = -EBADFD;
+        _cleanup_fclose_ FILE *f = NULL;
+        va_list ap;
+        int r;
+
+        assert(fd >= 0);
+
+        fd_ro = fd_reopen(fd, O_CLOEXEC | O_RDONLY);
+        if (fd_ro < 0)
+                return fd_ro;
+
+        f = fdopen(fd_ro, "re");
+        if (!f)
+                return -errno;
+
+        TAKE_FD(fd_ro);
+
+        va_start(ap, fname);
+        r = parse_env_filev(f, fname, ap);
+        va_end(ap);
+
+        return r;
+}
+
 static int load_env_file_push(
                 const char *filename, unsigned line,
                 const char *key, char *value,
index 8da451c74a5cbc175f97300414895dc4b262d1e2..2448d943cd4e38368bef63f0eba648ca234e8852 100644 (file)
@@ -9,6 +9,8 @@
 int parse_env_filev(FILE *f, const char *fname, va_list ap);
 int parse_env_file_sentinel(FILE *f, const char *fname, ...) _sentinel_;
 #define parse_env_file(f, fname, ...) parse_env_file_sentinel(f, fname, __VA_ARGS__, NULL)
+int parse_env_file_fd_sentinel(int fd, const char *fname, ...) _sentinel_;
+#define parse_env_file_fd(fd, fname, ...) parse_env_file_fd_sentinel(fd, fname, __VA_ARGS__, NULL)
 int load_env_file(FILE *f, const char *fname, char ***ret);
 int load_env_file_pairs(FILE *f, const char *fname, char ***ret);