From 1e7ea26dfe8f8776b382c4814534fab9816a1b19 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 19 Feb 2021 06:39:47 +0100 Subject: [PATCH] config: add Config::getIncludeDirs() --- include/villas/config.hpp | 4 ++++ lib/config.cpp | 25 ++++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/include/villas/config.hpp b/include/villas/config.hpp index c504616bf..d7590df2a 100644 --- a/include/villas/config.hpp +++ b/include/villas/config.hpp @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -76,6 +77,9 @@ protected: /** Run a callback function for each string in the config */ json_t * walkStrings(json_t *in, str_walk_fcn_t cb); + /** Get the include dirs */ + std::list getIncludeDirs() const; + public: json_t *root; diff --git a/lib/config.cpp b/lib/config.cpp index 946d7cd12..af42e7614 100644 --- a/lib/config.cpp +++ b/lib/config.cpp @@ -142,6 +142,18 @@ json_t * Config::decode(FILE *f) return root; } +std::list Config::getIncludeDirs() +{ + auto uri = fs::read_symlink(fs::path("/proc/self/fd") / std::to_string(fileno(f))); + if (isLocalFile(uri)) { + return { + uri.parent_path() + }; + } + else + return { }; +} + #ifdef WITH_CONFIG json_t * Config::libconfigDecode(FILE *f) { @@ -153,13 +165,16 @@ json_t * Config::libconfigDecode(FILE *f) config_set_auto_convert(&cfg, 1); /* Setup libconfig include path. */ - auto uri = fs::read_symlink(fs::path("/proc/self/fd") / std::to_string(fileno(f))); - if (isLocalFile(uri)) { - const auto &inclDir = uri.parent_path(); + auto inclDirs = getIncludeDirs(); + if (inclDirs.size() > 0) { + logger->info("Setting include dir to: {}", inclDirs[0]); - logger->info("Setting include dir to: {}", inclDir); + config_set_include_dir(&cfg, inclDirs[0].c_str()); - config_set_include_dir(&cfg, inclDir.c_str()); + if (inclDirs.size() > 1) { + logger->warn("Ignoring all but the first include directories for libconfig"); + logger->warn(" libconfig does not support more than a single include dir!"); + } } /* Rewind before re-reading */