diff --git a/src/main.cpp b/src/main.cpp index 6b5493b..540842b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,6 +16,7 @@ #include #include +#include "sqlite.hpp" #include "parse_options.hpp" using std::cout; @@ -23,9 +24,13 @@ using std::cerr; using std::endl; using std::string; -int main(int argc, char *argv[]) +int main(const int argc, const char *argv[]) { options opts = parse_options(argc, argv); + if (opts.status_code != 0) + { + return opts.status_code; + } return 0; } diff --git a/src/parse_options.cpp b/src/parse_options.cpp index f189475..2825d92 100644 --- a/src/parse_options.cpp +++ b/src/parse_options.cpp @@ -26,7 +26,13 @@ using std::cout; using std::cerr; using std::endl; -using std::exit; + +options::options() +{} + +options::options(const uint8_t &status) + : status_code(status) +{} const system_clock::time_point string_to_timepoint(const string &strtime) { @@ -38,7 +44,7 @@ const system_clock::time_point string_to_timepoint(const string &strtime) return system_clock::from_time_t(time); } -const options parse_options(int argc, char *argv[]) +const options parse_options(const int argc, const char *argv[]) { string tags; string format; @@ -68,7 +74,7 @@ const options parse_options(int argc, char *argv[]) { cout << "Usage: " << argv[0] << " [-t tags] URL\n"; cout << op; - exit(0); + return options(0); } if (option_version->is_set()) @@ -79,7 +85,7 @@ const options parse_options(int argc, char *argv[]) ".\n" "This program comes with ABSOLUTELY NO WARRANTY. This is free software,\n" "and you are welcome to redistribute it under certain conditions.\n"; - exit(0); + return options(0); } if (!tags.empty()) @@ -108,7 +114,7 @@ const options parse_options(int argc, char *argv[]) else { cerr << "Error: Export format must be csv or asciidoc.\n"; - exit(1); + return options(1); } } @@ -129,14 +135,14 @@ const options parse_options(int argc, char *argv[]) { cerr << "Error: Time span must be in format: " "YYYY-MM-DD,YYYY-MM-DD\n"; - exit(1); + return options(1); } } } catch (const std::exception &e) { cerr << "Error: " << e.what() << endl; - exit(1); + return options(1); } return opts; diff --git a/src/parse_options.hpp b/src/parse_options.hpp index 18fd2ca..17ee07a 100644 --- a/src/parse_options.hpp +++ b/src/parse_options.hpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include using std::string; using std::vector; @@ -41,12 +41,16 @@ typedef struct options export_format format = {}; string file; array span; + uint8_t status_code = 0; + + options(); + explicit options(const uint8_t &status); } options; // Convert ISO 8601 time-string to time_point. const system_clock::time_point string_to_timepoint(const string &strtime); // Parse command-line options. -const options parse_options(int argc, char *argv[]); +const options parse_options(const int argc, const char *argv[]); #endif // REMWHAREAD_PARSE_OPTIONS_HPP