From: Francis Dupont Date: Fri, 16 Jan 2015 13:02:21 +0000 (+0100) Subject: [trac3616] applied patch and cleaned up X-Git-Tag: trac3723_base~33^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=657a68fafbf9bb594a87b44971c8b0b1cbd0736a;p=thirdparty%2Fkea.git [trac3616] applied patch and cleaned up --- diff --git a/src/bin/d2/d_controller.cc b/src/bin/d2/d_controller.cc index 71c188f014..9c20ce18d9 100644 --- a/src/bin/d2/d_controller.cc +++ b/src/bin/d2/d_controller.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -140,14 +140,16 @@ DControllerBase::parseArgs(int argc, char* argv[]) break; case 'v': - // Print just Kea version and exit - std::cout << getVersion(false) << std::endl; - exit(EXIT_SUCCESS); + // gather Kea version and throw so main() can catch and return + // rather than calling exit() here which disrupts gtest. + isc_throw(VersionMessage, getVersion(false)); + break; case 'V': - // Print extended Kea version and exit - std::cout << getVersion(true) << std::endl; - exit(EXIT_SUCCESS); + // gather Kea version and throw so main() can catch and return + // rather than calling exit() here which disrupts gtest. + isc_throw(VersionMessage, getVersion(true)); + break; case 'c': // config file name diff --git a/src/bin/d2/d_controller.h b/src/bin/d2/d_controller.h index c1e35c9e0d..a4d69860fe 100644 --- a/src/bin/d2/d_controller.h +++ b/src/bin/d2/d_controller.h @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -39,6 +39,18 @@ public: isc::Exception(file, line, what) { }; }; +/// @brief Exception used to convey version info upwards. +/// Since command line argument parsing is done as part of +/// DControllerBase::launch(), it uses this exception to propagate +/// version information up to main(), when command line argument +/// -v or -V is given. +class VersionMessage : public isc::Exception { +public: + VersionMessage(const char* file, size_t line, const char* what) : + isc::Exception(file, line, what) { }; +}; + + /// @brief Exception thrown when the application process fails. class ProcessInitError: public isc::Exception { public: @@ -366,7 +378,8 @@ protected: /// @param argc is the number of command line arguments supplied /// @param argv is the array of string (char *) command line arguments /// - /// @throw throws InvalidUsage when there are usage errors. + /// @throw InvalidUsage when there are usage errors. + /// @throw VersionMessage if the -v or -V arguments is given. void parseArgs(int argc, char* argv[]); /// @brief Instantiates the application process and then initializes it. diff --git a/src/bin/d2/main.cc b/src/bin/d2/main.cc index aea38eb729..53ae02eb9b 100644 --- a/src/bin/d2/main.cc +++ b/src/bin/d2/main.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2013, 2015 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -40,6 +40,8 @@ int main(int argc, char* argv[]) { try { // 'false' value disables test mode. controller->launch(argc, argv, false); + } catch (const VersionMessage& ex) { + std::cout << ex.what() << std::endl; } catch (const isc::Exception& ex) { std::cerr << "Service failed:" << ex.what() << std::endl; ret = EXIT_FAILURE;