set exit code in checkconfig (fixes #297)
This commit is contained in:
+20
-7
@@ -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
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user