#include "webfused/config/factory.h" #include "webfused/config/config_intern.h" #include "webfused/config/config.h" #include "webfused/log/log.h" #include #include #include #if ((LIBCONFIG_VER_MAJOR != 1) || (LIBCONFIG_VER_MINOR < 5)) #error "linconfig 1.5 or higher needed" #endif #define WFD_CONFIG_VERSION_MAJOR 1 #define WFD_CONFIG_VERSION_MINOR 0 static bool wfd_config_check_version( config_t * config) { int version_major; int rc = config_lookup_int(config, "version.major", &version_major); if (CONFIG_TRUE != rc) { WFD_ERROR("failed to load config: missing version.major"); return false; } if (WFD_CONFIG_VERSION_MAJOR != version_major) { WFD_ERROR("failed to load config: " "incompatible versions: expected %d, but war %d", WFD_CONFIG_VERSION_MAJOR, version_major); return false; } int version_minor; rc = config_lookup_int(config, "version.minor", &version_minor); if (CONFIG_TRUE != rc) { WFD_ERROR("failed to load config: missing version.minor"); return false; } if (WFD_CONFIG_VERSION_MINOR < version_minor) { WFD_WARN("newer config detected: some features might be disabled"); } else if (WFD_CONFIG_VERSION_MINOR > version_minor) { WFD_INFO("old config detected: some features might use default values"); } return true; } static struct wfd_config * wfd_config_load(config_t * config) { struct wfd_config * result = wfd_config_create(); bool success = wfd_config_check_version(config); if (!success) { wfd_config_dispose(result); result = NULL; } return result; } struct wfd_config * wfd_config_load_file( char const * filename) { struct wfd_config * result = NULL; config_t config; config_init(&config); int rc = config_read_file(&config, filename); if (CONFIG_TRUE == rc) { result = wfd_config_load(&config); config_destroy(&config); } return result; } struct wfd_config * wfd_config_load_string( char const * contents) { struct wfd_config * result = NULL; config_t config; config_init(&config); int rc = config_read_string(&config, contents); if (CONFIG_TRUE == rc) { result = wfd_config_load(&config); config_destroy(&config); } return result; }