set exit code in checkconfig (fixes #297)

This commit is contained in:
john30
2019-10-27 10:15:27 +01:00
parent 3a4bd476e6
commit d6e59c8422
2 changed files with 22 additions and 8 deletions
+20 -7
View File
@@ -662,7 +662,7 @@ void closePidFile() {
/**
* Helper method performing shutdown.
*/
void shutdown() {
void shutdown(bool error = false) {
// stop main loop and all dependent components
if (s_mainLoop) {
delete s_mainLoop;
@@ -691,7 +691,7 @@ void shutdown() {
logNotice(lf_main, "ebusd stopped");
closeLogFile();
exit(EXIT_SUCCESS);
exit(error ? EXIT_FAILURE : EXIT_SUCCESS);
}
/**
@@ -929,7 +929,7 @@ void readMessage(Message* message) {
}
}
void executeInstructions(MessageMap* messages, bool verbose) {
result_t executeInstructions(MessageMap* messages, bool verbose) {
string errorDescription;
result_t result = messages->resolveConditions(verbose, &errorDescription);
if (result != RESULT_OK) {
@@ -946,6 +946,7 @@ void executeInstructions(MessageMap* messages, bool verbose) {
}
logNotice(lf_main, "found messages: %d (%d conditional on %d conditions, %d poll, %d update)", messages->size(),
messages->sizeConditional(), messages->sizeConditions(), messages->sizePoll(), messages->sizePassive());
return result;
}
result_t loadDefinitionsFromConfigPath(FileReader* reader, const string& filename, bool verbose,
@@ -993,7 +994,7 @@ result_t loadConfigFiles(MessageMap* messages, bool verbose, bool denyRecursive)
getResultCode(result), errorDescription.c_str());
}
messages->unlock();
return RESULT_OK;
return opt.checkConfig ? result : RESULT_OK;
}
result_t loadScanConfigFile(MessageMap* messages, symbol_t address, bool verbose, string* relativeFile) {
@@ -1256,7 +1257,7 @@ int main(int argc, char* argv[]) {
logNotice(lf_main, PACKAGE_STRING "." REVISION " performing configuration check...");
result_t result = loadConfigFiles(s_messageMap, true, opt.scanConfig && arg_index < argc);
executeInstructions(s_messageMap, true);
result_t overallResult = executeInstructions(s_messageMap, true);
MasterSymbolString master;
SlaveSymbolString slave;
while (result == RESULT_OK && opt.scanConfig && arg_index < argc) {
@@ -1268,21 +1269,33 @@ int main(int argc, char* argv[]) {
Message* message = s_messageMap->getScanMessage(address);
if (!message) {
logError(lf_main, "invalid scan address %2.2x", address);
if (overallResult == RESULT_OK) {
overallResult = RESULT_ERR_INVALID_ADDR;
}
} else {
message->storeLastData(master, slave);
string file;
result_t res = loadScanConfigFile(s_messageMap, address, true, &file);
executeInstructions(s_messageMap, true);
result_t instrRes = executeInstructions(s_messageMap, true);
if (res == RESULT_OK) {
logInfo(lf_main, "scan config %2.2x: file %s loaded", address, file.c_str());
} else if (overallResult == RESULT_OK) {
overallResult = res;
}
if (overallResult == RESULT_OK && instrRes != RESULT_OK) {
overallResult = instrRes;
}
}
}
if (result != RESULT_OK) {
overallResult = result;
}
if (result == RESULT_OK && opt.dumpConfig) {
logNotice(lf_main, "configuration dump:");
s_messageMap->dump(true, &cout);
}
shutdown();
shutdown(overallResult != RESULT_OK);
return 0;
}
Executable → Regular
+2 -1
View File
@@ -120,8 +120,9 @@ result_t loadScanConfigFile(MessageMap* messages, symbol_t address, bool verbose
* Helper method for executing all loaded and resolvable instructions.
* @param messages the @a MessageMap instance.
* @param verbose whether to verbosely log all problems.
* @return the result code.
*/
void executeInstructions(MessageMap* messages, bool verbose = false);
result_t executeInstructions(MessageMap* messages, bool verbose = false);
/**
* Helper method for loading definitions from a relative file from the config path/URL.