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,
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);