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