From 8bbef2865455754425a84b86680a89bff8aa7691 Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周六, 19 10月 2019 08:50:45 +0800 Subject: [PATCH] issue #64 , issue #56 (part) --- src/library/base/StringUtils.cpp | 39 ++++++++++++++++++++++++++++----------- 1 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/library/base/StringUtils.cpp b/src/library/base/StringUtils.cpp index 3e34432..cf9da96 100644 --- a/src/library/base/StringUtils.cpp +++ b/src/library/base/StringUtils.cpp @@ -2,17 +2,18 @@ * StringUtils.cpp * * Created on: Apr 8, 2014 - * + * */ #include <cctype> //toupper -#include "StringUtils.h" #include <iostream> #include <string> #include <sstream> #include <cstring> #include <algorithm> #include <stdexcept> +#include <regex> +#include "StringUtils.h" #ifdef _WIN32 #include <time.h> //mktime under windows @@ -21,7 +22,7 @@ namespace license { using namespace std; -string trim_copy(const string& string_to_trim) { +string trim_copy(const string &string_to_trim) { std::string::const_iterator it = string_to_trim.begin(); while (it != string_to_trim.end() && isspace(*it)) it++; @@ -33,13 +34,13 @@ return std::string(it, rit.base()); } -string toupper_copy(const string& lowercase) { +string toupper_copy(const string &lowercase) { string cp(lowercase); - std::transform(cp.begin(), cp.end(), cp.begin(), (int (*)(int))toupper); + std::transform(cp.begin(), cp.end(), cp.begin(), (int (*)(int)) toupper); return cp; } -time_t seconds_from_epoch(const char* timeString) { +time_t seconds_from_epoch(const char *timeString) { int year, month, day; tm tm; if (strlen(timeString) == 8) { @@ -48,14 +49,16 @@ throw invalid_argument("Date not recognized"); } } else if (strlen(timeString) == 10) { - const int nfield = sscanf(timeString, "%4d-%2d-%2d", &year, &month, &day); + const int nfield = sscanf(timeString, "%4d-%2d-%2d", &year, &month, + &day); if (nfield != 3) { - const int nfield = sscanf(timeString, "%4d/%2d/%2d", &year, &month, &day); + const int nfield = sscanf(timeString, "%4d/%2d/%2d", &year, &month, + &day); if (nfield != 3) { throw invalid_argument("Date not recognized"); } } - } else{ + } else { throw invalid_argument("Date not recognized"); } tm.tm_isdst = -1; @@ -70,8 +73,8 @@ return mktime(&tm); } - -const vector<string> split_string(const string& licensePositions,char splitchar) { +const vector<string> split_string(const string &licensePositions, + char splitchar) { std::stringstream streamToSplit(licensePositions); std::string segment; std::vector<string> seglist; @@ -82,4 +85,18 @@ return seglist; } +const static regex iniSection("\\[.*?\\]"); +const static regex b64( + "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"); + +FILE_FORMAT identify_format(const string &license) { + FILE_FORMAT result = UNKNOWN; + if (regex_match(license, b64)) { + result = BASE64; + } else if (regex_search(license, iniSection)) { + result = INI; + } + return result; +} + } /* namespace license */ -- Gitblit v1.9.1