X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbasic%2Ffileio.c;h=55dda26a6c0c93b4e792e4c8d8160f8110b2251a;hb=70f7776c6e8c549e13adf858c57fe339583c7cec;hp=4ad2acf3bd7d9f5a404c1b04f89fe378f4a0d6f5;hpb=8d0461b82d5084290e9bfb71ab4aa848df196b50;p=elogind.git diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 4ad2acf3b..55dda26a6 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -767,6 +767,34 @@ int load_env_file_pairs(FILE *f, const char *fname, const char *newline, char ** return 0; } +static int merge_env_file_push( + const char *filename, unsigned line, + const char *key, char *value, + void *userdata, + int *n_pushed) { + + char ***env = userdata; + char *expanded_value; + + assert(env); + + expanded_value = replace_env(value, *env, REPLACE_ENV_USE_ENVIRONMENT); + if (!expanded_value) + return -ENOMEM; + + free_and_replace(value, expanded_value); + + return load_env_file_push(filename, line, key, value, env, n_pushed); +} + +int merge_env_file( + char ***env, + FILE *f, + const char *fname) { + + return parse_env_file_internal(f, fname, NEWLINE, merge_env_file_push, env, NULL); +} + static void write_env_var(FILE *f, const char *v) { const char *p;