X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fconf-parser.c;h=027c49ce3bdee71f3f3fb77d4cd2d789ed654b15;hb=0c124f8b2c93d2c7d6eefca3bdc59b28250fc077;hp=439cfc58fc146e6d4f397b4e98ef25fbf2276f98;hpb=b2fadec6048adb3596f2633cb7fe7a49f5937a18;p=elogind.git diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 439cfc58f..027c49ce3 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -27,6 +27,7 @@ #include #include "conf-parser.h" +#include "conf-files.h" #include "util.h" #include "macro.h" #include "strv.h" @@ -430,6 +431,37 @@ int config_parse(const char *unit, return 0; } +/* Parse each config file in the specified directories. */ +int config_parse_many(const char *conf_file, + const char *conf_file_dirs, + const char *sections, + ConfigItemLookup lookup, + const void *table, + bool relaxed, + void *userdata) { + _cleanup_strv_free_ char **files = NULL; + char **fn; + int r; + + r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); + if (r < 0) + return r; + + if (conf_file) { + r = config_parse(NULL, conf_file, NULL, sections, lookup, table, relaxed, false, true, userdata); + if (r < 0) + return r; + } + + STRV_FOREACH(fn, files) { + r = config_parse(NULL, *fn, NULL, sections, lookup, table, relaxed, false, true, userdata); + if (r < 0) + return r; + } + + return 0; +} + #define DEFINE_PARSER(type, vartype, conv_func) \ int config_parse_##type(const char *unit, \ const char *filename, \ @@ -710,6 +742,7 @@ int config_parse_strv(const char *unit, if (!utf8_is_valid(n)) { log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue); + free(n); continue; }