From 83cda889c140d68d7f040cbbb01f00d44cd6b3ef Mon Sep 17 00:00:00 2001 From: Attaullah Ansari Date: Wed, 22 Feb 2023 02:47:46 +0530 Subject: [PATCH] COMMON: Issue warning instead of error dialogs for bad configuration file, return a bool value indicating success or failure of loading. --- common/config-manager.cpp | 36 ++++++++++++++++++++++++------------ common/config-manager.h | 6 +++--- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/common/config-manager.cpp b/common/config-manager.cpp index d530fd8dd86..6f4af2f00c8 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -78,15 +78,16 @@ void ConfigManager::copyFrom(ConfigManager &source) { } -void ConfigManager::loadDefaultConfigFile(const String &fallbackFilename) { +bool ConfigManager::loadDefaultConfigFile(const String &fallbackFilename) { // Open the default config file assert(g_system); SeekableReadStream *stream = g_system->createConfigReadStream(); _filename.clear(); // clear the filename to indicate that we are using the default config file + bool loadResult = false; // ... load it, if available ... if (stream) { - loadFromStream(*stream); + loadResult = loadFromStream(*stream); // ... and close it again. delete stream; @@ -97,10 +98,12 @@ void ConfigManager::loadDefaultConfigFile(const String &fallbackFilename) { debug("Default configuration file missing, creating a new one"); flushToDisk(); + loadResult = true; } + return loadResult; } -void ConfigManager::loadConfigFile(const String &filename, const String &fallbackFilename) { +bool ConfigManager::loadConfigFile(const String &filename, const String &fallbackFilename) { _filename = filename; FSNode node(filename); @@ -110,8 +113,9 @@ void ConfigManager::loadConfigFile(const String &filename, const String &fallbac debug("Creating configuration file: %s", filename.c_str()); } else { debug("Using configuration file: %s", _filename.c_str()); - loadFromStream(cfg_file); + return loadFromStream(cfg_file); } + return true; } bool ConfigManager::loadFallbackConfigFile(const String &filename) { @@ -166,7 +170,7 @@ void ConfigManager::addDomain(const String &domainName, const ConfigManager::Dom } -void ConfigManager::loadFromStream(SeekableReadStream &stream) { +bool ConfigManager::loadFromStream(SeekableReadStream &stream) { String domainName; String comment; Domain domain; @@ -213,10 +217,13 @@ void ConfigManager::loadFromStream(SeekableReadStream &stream) { while (*p && (isAlnum(*p) || *p == '-' || *p == '_')) p++; - if (*p == '\0') - error("Config file buggy: missing ] in line %d", lineno); - else if (*p != ']') - error("Config file buggy: Invalid character '%c' occurred in section name in line %d", *p, lineno); + if (*p == '\0') { + warning("Config file buggy: missing ] in line %d", lineno); + return false; + } else if (*p != ']') { + warning("Config file buggy: Invalid character '%c' occurred in section name in line %d", *p, lineno); + return false; + } domainName = String(line.c_str() + 1, p); @@ -237,13 +244,16 @@ void ConfigManager::loadFromStream(SeekableReadStream &stream) { // If no domain has been set, this config file is invalid! if (domainName.empty()) { - error("Config file buggy: Key/value pair found outside a domain in line %d", lineno); + warning("Config file buggy: Key/value pair found outside a domain in line %d", lineno); + return false; } // Split string at '=' into 'key' and 'value'. First, find the "=" delimeter. const char *p = strchr(t, '='); - if (!p) - error("Config file buggy: Junk found in line %d: '%s'", lineno, t); + if (!p) { + warning("Config file buggy: Junk found in line %d: '%s'", lineno, t); + return false; + } // Extract the key/value pair String key(t, p); @@ -263,6 +273,8 @@ void ConfigManager::loadFromStream(SeekableReadStream &stream) { } addDomain(domainName, domain); // Add the last domain found + + return true; } void ConfigManager::flushToDisk() { diff --git a/common/config-manager.h b/common/config-manager.h index bc510e71bc5..04e7cad678e 100644 --- a/common/config-manager.h +++ b/common/config-manager.h @@ -125,8 +125,8 @@ public: static char const *const kCloudDomain; #endif - void loadDefaultConfigFile(const String &fallbackFilename); /*!< Load the default configuration file. */ - void loadConfigFile(const String &filename, const String &fallbackFilename); /*!< Load a specific configuration file. */ + bool loadDefaultConfigFile(const String &fallbackFilename); /*!< Load the default configuration file. */ + bool loadConfigFile(const String &filename, const String &fallbackFilename); /*!< Load a specific configuration file. */ /** * Retrieve the config domain with the given name. @@ -223,7 +223,7 @@ private: ConfigManager(); bool loadFallbackConfigFile(const String &filename); - void loadFromStream(SeekableReadStream &stream); + bool loadFromStream(SeekableReadStream &stream); void addDomain(const String &domainName, const Domain &domain); void writeDomain(WriteStream &stream, const String &name, const Domain &domain); void renameDomain(const String &oldName, const String &newName, DomainMap &map);