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