From 576bbc5eaff2908bab0cc018e1ae00e132c605f2 Mon Sep 17 00:00:00 2001 From: Matteo Varalta <matteo.varalta@txtgroup.com> Date: 周一, 29 4月 2019 21:18:30 +0800 Subject: [PATCH] Simple append multiple sections into license file --- src/tools/license-generator/license-generator.cpp | 27 ++++++++++++++------------- 1 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/tools/license-generator/license-generator.cpp b/src/tools/license-generator/license-generator.cpp index ce456cc..1feff73 100644 --- a/src/tools/license-generator/license-generator.cpp +++ b/src/tools/license-generator/license-generator.cpp @@ -7,6 +7,7 @@ #include <iostream> #include <string.h> #include <iostream> +#include <string.h> #include <boost/date_time.hpp> #include <boost/program_options.hpp> #include <boost/algorithm/string.hpp> @@ -76,7 +77,7 @@ if (vm.count("expire_date")) { const std::string dt_end = vm["expire_date"].as<string>(); try { - end_date = normalize_date(dt_end.c_str()); + end_date = normalize_date(dt_end); char curdate[20]; time_t curtime = time(NULL); strftime(curdate, 20, "%Y-%m-%d", localtime(&curtime)); @@ -90,7 +91,7 @@ if (vm.count("begin_date")) { const std::string begin_date_str = vm["begin_date"].as<string>(); try { - begin_date = normalize_date(begin_date_str.c_str()); + begin_date = normalize_date(begin_date_str); } catch (invalid_argument &e) { cerr << endl << "Begin date not recognized: " << begin_date_str << " Please enter a valid date in format YYYYMMDD" << endl; @@ -152,7 +153,7 @@ int LicenseGenerator::generateLicense(int argc, const char **argv) { po::options_description visibleOptions = configureProgramOptions(); - //positional options must be addedd to standard options + //positional options must be added to standard options po::options_description allOptions; allOptions.add(visibleOptions).add_options()("product", po::value<vector<string>>(), "product names"); @@ -173,7 +174,7 @@ if (vm.count("output")) { const std::string fname = vm["output"].as<string>(); - fstream ofstream(fname, std::ios::out | std::ios::trunc); + fstream ofstream(fname, std::ios::out | std::ios::app); if (!ofstream.is_open()) { cerr << "can't open file [" << fname << "] for output." << endl << " error: " << strerror( errno); @@ -190,22 +191,22 @@ const std::string formats[] = { "%4u-%2u-%2u", "%4u/%2u/%2u", "%4u%2u%2u" }; const size_t formats_n = 3; -string LicenseGenerator::normalize_date(const char * s) { +string LicenseGenerator::normalize_date(const std::string& sDate) { + if(sDate.size()<8) + throw invalid_argument("Date string too small for known formats"); unsigned int year, month, day; - int chread; bool found = false; for (size_t i = 0; i < formats_n && !found; ++i) { - chread = sscanf(s, formats[i].c_str(), &year, &month, &day); - if (chread == 3) { + const int chread = sscanf(sDate.c_str(),formats[i].c_str(),&year,&month,&day); + if(chread==3) { found = true; + break; } } - if (!found) { - throw invalid_argument("Date not recognized."); - } + if(!found) + throw invalid_argument("Date string did not match a known format"); ostringstream oss; - oss << year << "-" << setfill('0') << std::setw(2) << month << "-" << day; - //delete (facet); + oss << year << "-" << setfill('0') << std::setw(2) << month << "-" << setfill('0') << std::setw(2) << day; return oss.str(); } } -- Gitblit v1.9.1