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. * Helper method performing shutdown.
*/ */
void shutdown() { void shutdown(bool error = false) {
// stop main loop and all dependent components // stop main loop and all dependent components
if (s_mainLoop) { if (s_mainLoop) {
delete s_mainLoop; delete s_mainLoop;
@@ -691,7 +691,7 @@ void shutdown() {
logNotice(lf_main, "ebusd stopped"); logNotice(lf_main, "ebusd stopped");
closeLogFile(); 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; string errorDescription;
result_t result = messages->resolveConditions(verbose, &errorDescription); result_t result = messages->resolveConditions(verbose, &errorDescription);
if (result != RESULT_OK) { 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(), 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()); messages->sizeConditional(), messages->sizeConditions(), messages->sizePoll(), messages->sizePassive());
return result;
} }
result_t loadDefinitionsFromConfigPath(FileReader* reader, const string& filename, bool verbose, 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()); getResultCode(result), errorDescription.c_str());
} }
messages->unlock(); messages->unlock();
return RESULT_OK; return opt.checkConfig ? result : RESULT_OK;
} }
result_t loadScanConfigFile(MessageMap* messages, symbol_t address, bool verbose, string* relativeFile) { 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..."); logNotice(lf_main, PACKAGE_STRING "." REVISION " performing configuration check...");
result_t result = loadConfigFiles(s_messageMap, true, opt.scanConfig && arg_index < argc); 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; MasterSymbolString master;
SlaveSymbolString slave; SlaveSymbolString slave;
while (result == RESULT_OK && opt.scanConfig && arg_index < argc) { 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); Message* message = s_messageMap->getScanMessage(address);
if (!message) { if (!message) {
logError(lf_main, "invalid scan address %2.2x", address); logError(lf_main, "invalid scan address %2.2x", address);
if (overallResult == RESULT_OK) {
overallResult = RESULT_ERR_INVALID_ADDR;
}
} else { } else {
message->storeLastData(master, slave); message->storeLastData(master, slave);
string file; string file;
result_t res = loadScanConfigFile(s_messageMap, address, true, &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) { if (res == RESULT_OK) {
logInfo(lf_main, "scan config %2.2x: file %s loaded", address, file.c_str()); 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) { if (result == RESULT_OK && opt.dumpConfig) {
logNotice(lf_main, "configuration dump:"); logNotice(lf_main, "configuration dump:");
s_messageMap->dump(true, &cout); s_messageMap->dump(true, &cout);
} }
shutdown();
shutdown(overallResult != RESULT_OK);
return 0; 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. * Helper method for executing all loaded and resolvable instructions.
* @param messages the @a MessageMap instance. * @param messages the @a MessageMap instance.
* @param verbose whether to verbosely log all problems. * @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. * Helper method for loading definitions from a relative file from the config path/URL.