From d4429ffe976c2b29099dc1fdea822c50c94ff485 Mon Sep 17 00:00:00 2001
From: Maximilien Siavelis <maximilien.siavelis@simulease.com>
Date: 周六, 13 1月 2018 01:37:49 +0800
Subject: [PATCH] fix some issues

---
 src/library/LicenseReader.cpp                     |    5 +++--
 src/tools/license-generator/license-generator.cpp |   23 ++++++++++++-----------
 src/library/os/os.h                               |    2 +-
 src/tools/license-generator/license-generator.h   |    2 +-
 README.md                                         |    2 +-
 src/library/pc-identifiers.c                      |    2 +-
 6 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/README.md b/README.md
index e27f0ba..1993a96 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@
 make
 make install
 
-# on Windows with MSVC
+# on Windows with MSVC 2010
 
 cmake .. -G "Visual Studio 10 2010 Win64" -DCMAKE_INSTALL_PREFIX=../install
 cmake --build . --target install
diff --git a/src/library/LicenseReader.cpp b/src/library/LicenseReader.cpp
index e9abce6..37274f0 100644
--- a/src/library/LicenseReader.cpp
+++ b/src/library/LicenseReader.cpp
@@ -90,8 +90,9 @@
 			license->days_left = 999999;
 		} else {
 			strncpy(license->expiry_date, to_date.c_str(), 11);
-			double secs = difftime(time(NULL),
-					seconds_from_epoch(to_date.c_str()));
+			double secs = difftime(
+				seconds_from_epoch(to_date.c_str()),
+				time(NULL));
 			license->days_left = (int) secs / 60 * 60 * 24;
 		}
 	}
diff --git a/src/library/os/os.h b/src/library/os/os.h
index 13c52f9..bd19f9d 100644
--- a/src/library/os/os.h
+++ b/src/library/os/os.h
@@ -31,7 +31,7 @@
 typedef struct {
 	int id;
 	char description[1024];
-	unsigned char mac_address[6];
+	unsigned char mac_address[8];
 	unsigned char ipv4_address[4];
 	IFACE_TYPE type;
 } OsAdapterInfo;
diff --git a/src/library/pc-identifiers.c b/src/library/pc-identifiers.c
index 10c51b2..7332f4f 100644
--- a/src/library/pc-identifiers.c
+++ b/src/library/pc-identifiers.c
@@ -153,7 +153,7 @@
 		return result_diskinfos;
 	}
 	diskInfos = (DiskInfo*) malloc(disk_num * sizeof(DiskInfo));
-	//memset(diskInfos,0,disk_num * sizeof(DiskInfo));
+	memset(diskInfos,0,disk_num * sizeof(DiskInfo));
 	result_diskinfos = getDiskInfos(diskInfos, &disk_num);
 	if (result_diskinfos != FUNC_RET_OK) {
 		free(diskInfos);
diff --git a/src/tools/license-generator/license-generator.cpp b/src/tools/license-generator/license-generator.cpp
index ce456cc..e929748 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;
@@ -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();
 }
 }
diff --git a/src/tools/license-generator/license-generator.h b/src/tools/license-generator/license-generator.h
index 643760f..91bccea 100644
--- a/src/tools/license-generator/license-generator.h
+++ b/src/tools/license-generator/license-generator.h
@@ -26,7 +26,7 @@
 	static vector<FullLicenseInfo> parseLicenseInfo(po::variables_map vm);
 	static void generateAndOutputLicenses(const po::variables_map& vm,
 			ostream& outputFile);
-	static string normalize_date(const char * s);
+	static string normalize_date(const std::string& s);
 public:
 	/**
 	 * Available options:

--
Gitblit v1.9.1