diff --git a/src/cmake/modules/CUnit/src/main.c.in b/src/cmake/modules/CUnit/src/main.c.in index f1f0a06..2be3165 100644 --- a/src/cmake/modules/CUnit/src/main.c.in +++ b/src/cmake/modules/CUnit/src/main.c.in @@ -10,11 +10,19 @@ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause */ #include +#include #include +#ifndef _WIN32 +#include +#else +#define EX_USAGE (64) +#define EX_SOFTWARE (70) +#endif /* _WIN32 */ + #include #include -#include +#include "CUnit/Test.h" static struct { bool print_help; @@ -36,7 +44,7 @@ static struct { "*" }; -int patmatch(const char *pat, const char *str) +static int patmatch(const char *pat, const char *str) { while (*pat) { if (*pat == '?') { @@ -91,14 +99,19 @@ static void help(const char *name) printf(" -r FILENAME results file for automated run\n"); printf(" -s PATTERN run only tests in suites matching pattern\n"); printf(" -t PATTERN run only test matching pattern\n"); + printf("\n"); + printf("Exit codes:\n"); + printf(" %-2d Successful termination\n", EXIT_SUCCESS); + printf(" %-2d One or more failing test cases\n", EXIT_FAILURE); + printf(" %-2d Command line usage error\n", EX_USAGE); + printf(" %-2d Internal software error\n", EX_SOFTWARE); } -static CU_ErrorCode parse_options(int argc, char *argv[]) +static int parse_options(int argc, char *argv[]) { - CU_ErrorCode err = CUE_SUCCESS; + int err = 0; - - for (int i = 1; err == CUE_SUCCESS && i < argc; i++) { + for (int i = 1; err == 0 && i < argc; i++) { switch ((argv[i][0] == '-') ? argv[i][1] : 0) { case 'a': opts.automated = true; @@ -131,8 +144,7 @@ static CU_ErrorCode parse_options(int argc, char *argv[]) } /* FALLS THROUGH */ default: - err = (CU_ErrorCode)256; - CU_set_error(err); /* Will print as "Undefined Errpr" */ + err = 1; break; } } @@ -140,7 +152,7 @@ static CU_ErrorCode parse_options(int argc, char *argv[]) return err; } -void +static void add_suite( const char *suite, CU_InitializeFunc pInitFunc, @@ -158,7 +170,7 @@ add_suite( #define ADD_SUITE(suite, init, clean) \ add_suite(#suite, init, clean) -void +static void add_test( const char *suite, const char *test, @@ -181,19 +193,17 @@ add_test( int main(int argc, char *argv[]) { - CU_ErrorCode err; + int ret = EXIT_SUCCESS; - if ((err = parse_options(argc, argv)) != CUE_SUCCESS) { + if (parse_options(argc, argv) != 0) { usage(argv[0]); - return (int)err; + return EX_USAGE; } else if (opts.print_help) { help(argv[0]); - return CUE_SUCCESS; - } - - if ((err = CU_initialize_registry()) != CUE_SUCCESS) { - fprintf(stderr, "CU_initialize_registry: %s\n", CU_get_error_msg()); - return (int)err; + return ret; + } else if (CU_initialize_registry() != CUE_SUCCESS) { + fprintf(stderr, "CU_initialize_registry: %s\n", CU_get_error_msg()); + return EX_SOFTWARE; } /* CMake will expand the macro below to register all suites and tests. */ @@ -220,13 +230,14 @@ int main(int argc, char *argv[]) CU_basic_run_tests(); } - err = CU_get_error(); - if (err == CUE_SUCCESS) { - err = (CU_ErrorCode)(CU_get_number_of_failures() == 0 ? 0 : 256); + if (CU_get_error() != CUE_SUCCESS) { + ret = EX_SOFTWARE; + } else if (CU_get_number_of_failures() != 0) { + ret = EXIT_FAILURE; } CU_cleanup_registry(); - return (int)err; + return ret; }