From f76392f4762e51c0506c1fd1fd18c978f491debf Mon Sep 17 00:00:00 2001
From: open-license-manager <rillf@maildrop.cc>
Date: 周五, 12 9月 2014 03:06:54 +0800
Subject: [PATCH] windows compile

---
 src/library/base/base.h        |    7 +++
 src/library/base/logger.c      |    3 +
 build/modules/add_boost.cmake  |   12 +++--
 src/library/api/datatypes.h    |    8 ++-
 build/win/README.txt           |    0 
 src/library/os/os.h            |    6 ++
 src/library/os/win/os-win.c    |   28 +++++++++----
 CMakeLists.txt                 |   13 +++++-
 test/functional/volid_test.cpp |   12 +++---
 src/library/base/logger.h      |    3 +
 src/library/pc-identifiers.c   |   25 ++++++++----
 11 files changed, 79 insertions(+), 38 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fe14f24..01cdfd4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,10 +30,17 @@
 endif(CMAKE_BUILD_TYPE)
 
 if(WIN32)
+
 	SET(PLATFORM_LIBS "")
-	if(CMAKE_CL_64)
-		SET(CMAKE_EXE_LINKER_FLAGS "/machine:X64 /INCREMENTAL:NO" CACHE STRING "Linker flags")
-	endif(CMAKE_CL_64)
+	include(target_arch)
+	target_architecture( TARGET_ARCHITECTURE )
+	message(STATUS "architecture detected: ${TARGET_ARCHITECTURE}")
+	#force to patch an error in cmake
+	if(TARGET_ARCHITECTURE STREQUAL "x86_64")
+		SET(CMAKE_EXE_LINKER_FLAGS "/machine:X64" CACHE STRING "Linker flags" FORCE)
+		SET(CMAKE_MODULE_LINKER_FLAGS "/machine:X64" CACHE STRING "Module Linker flags" FORCE)
+		SET(CMAKE_SHARED_LINKER_FLAGS "/machine:X64" CACHE STRING "Shared Linker flags" FORCE)
+	endif()
 	SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib ) #${CMAKE_FIND_LIBRARY_SUFFIXES}
 	add_definitions("/D_CRT_SECURE_NO_WARNINGS")
 else(WIN32)
diff --git a/build/modules/add_boost.cmake b/build/modules/add_boost.cmake
index 6480699..d8dbd8e 100644
--- a/build/modules/add_boost.cmake
+++ b/build/modules/add_boost.cmake
@@ -158,7 +158,6 @@
 	endif()
 	execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${BOOST_ROOT}/Build)
 
-	
 	#ADD_BOOST_STATIC_RUNTIME is a parsed function parameter
 	if(ADD_BOOST_STATIC_RUNTIME)
 		set(RUNTIME_LINK "static")
@@ -259,10 +258,13 @@
 	  else(MSVC)
 			set(OUTPUT_FILE ${BOOST_ROOT}/stage/lib/libboost_${libName}-mt${BOOST_LIB_SUFFIX}.${LINUX_LIB_EXTENSION})
 	  endif(MSVC)
-	  if(NOT EXISTS "${OUTPUT_FILE}")
-		  message(STATUS "Building ${Component}")
-		  execute_process(COMMAND ${b2Args} --with-${Component} WORKING_DIRECTORY ${BOOST_ROOT})
-	  endif()
+	  #if(NOT EXISTS "${OUTPUT_FILE}")
+		  message(STATUS "Building ${Component}: ${b2Args}")
+		  execute_process(COMMAND ${b2Args} --with-${Component} WORKING_DIRECTORY ${BOOST_ROOT} RESULT_VARIABLE Result OUTPUT_VARIABLE Output ERROR_VARIABLE Error)
+		  if(NOT Result EQUAL 0)
+			message(ERROR "Failed running ${b2Args} --with-${Component}:\n${Output}\n${Error}\n")
+		  endif()
+	  #endif()
 	endforeach()
 	
 	
diff --git a/build/win/README.txt b/build/win/README.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/build/win/README.txt
diff --git a/src/library/api/datatypes.h b/src/library/api/datatypes.h
index b49a06e..4cd6126 100644
--- a/src/library/api/datatypes.h
+++ b/src/library/api/datatypes.h
@@ -11,9 +11,10 @@
 extern "C" {
 #endif
 
-#include <stdbool.h>
-
+//definition of size_t
+#include <stdlib.h>
 #ifdef __unix__
+#include <stdbool.h>
 #define DllExport
 #else
 #include <windows.h>
@@ -61,7 +62,8 @@
 
 typedef struct {
 	const char *licenseFileLocation;
-	const char *environmentVariableName;bool openFileNearModule;
+	const char *environmentVariableName;
+	bool openFileNearModule;
 } LicenseLocation;
 
 typedef struct {
diff --git a/src/library/base/base.h b/src/library/base/base.h
index d57835e..6c0ed67 100644
--- a/src/library/base/base.h
+++ b/src/library/base/base.h
@@ -7,7 +7,6 @@
 #endif
 
 #ifdef __unix__
-
 #include <limits.h>
 #define DllExport
 #ifndef MAX_PATH
@@ -17,8 +16,14 @@
 #else //windows
 #include <windows.h>
 #define DllExport  __declspec( dllexport )
+
+#ifndef __cplusplus
+typedef int bool;
+#define false 0
+#define true -1
 #endif
 
+#endif
 /* #define _DEBUG */
 /*
 #define cmax(a,b) \
diff --git a/src/library/base/logger.c b/src/library/base/logger.c
index 4ee8354..47510c2 100644
--- a/src/library/base/logger.c
+++ b/src/library/base/logger.c
@@ -4,8 +4,9 @@
 #include <string.h>
 #include <stdarg.h>
 #include <time.h>
-#include <unistd.h>
+
 #ifdef __unix__
+#include <unistd.h>
 #define MAX_PATH 255
 #else
 #include <windows.h>
diff --git a/src/library/base/logger.h b/src/library/base/logger.h
index 6cb70a3..a35afd6 100644
--- a/src/library/base/logger.h
+++ b/src/library/base/logger.h
@@ -2,6 +2,9 @@
 #define logger_INCLUDED
 
 #ifndef LOG_ENABLED
+#include <errno.h>
+#define clean_errno() (errno == 0 ? "None" : strerror(errno))
+
 #ifdef NDEBUG
 #define LOG_DEBUG(M, ...) _log("[INFO] %s (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__)
 #else
diff --git a/src/library/os/os.h b/src/library/os/os.h
index 5d0afc0..9947378 100644
--- a/src/library/os/os.h
+++ b/src/library/os/os.h
@@ -14,14 +14,18 @@
 
 #include "../base/base.h"
 #include <stddef.h>
+//definition of size_t
+#include <stdlib.h>
+#ifdef __unix__
 #include <stdbool.h>
+#endif
 
 typedef enum {
 	NONE, VMWARE
 } VIRTUALIZATION;
 
 typedef enum {
-	ETHERNET, WIRELESS
+	IFACE_TYPE_ETHERNET, IFACE_TYPE_WIRELESS
 } IFACE_TYPE;
 
 typedef struct {
diff --git a/src/library/os/win/os-win.c b/src/library/os/win/os-win.c
index 246c0c8..e7bb77a 100644
--- a/src/library/os/win/os-win.c
+++ b/src/library/os/win/os-win.c
@@ -1,22 +1,30 @@
 #include <Windows.h>
 #include <iphlpapi.h>
+//definition of size_t
+#include <stdlib.h>
 #include "../../base/logger.h"
 #include"../os.h"
 #pragma comment(lib, "IPHLPAPI.lib")
 
 FUNCTION_RETURN getOsSpecificIdentifier(unsigned char identifier[6]){
-
+	return FUNC_RET_NOT_AVAIL;
 }
 
 FUNCTION_RETURN getMachineName(unsigned char identifier[6]) {
+	FUNCTION_RETURN result = FUNC_RET_ERROR;
 	char buffer[MAX_COMPUTERNAME_LENGTH + 1];
 	int bufsize = MAX_COMPUTERNAME_LENGTH + 1;
 	BOOL cmpName = GetComputerName(
 		buffer, &bufsize);
-	strncpy(identifier, buffer, 6);
+	if (cmpName){
+		strncpy(identifier, buffer, 6);
+		result = FUNC_RET_OK;
+	}
+	return result;
 }
 
 FUNCTION_RETURN getCpuId(unsigned char identifier[6]) {
+	return FUNC_RET_NOT_AVAIL;
 }
 
 void os_initialize() {
@@ -30,6 +38,7 @@
 	int ndrives = 0;
 	DWORD FileFlags;
 	char volName[_MAX_FNAME], FileSysName[_MAX_FNAME];
+	char* szSingleDrive;
 	DWORD volSerial = 0;
 	BOOL success;
 	UINT driveType;
@@ -42,7 +51,7 @@
 	if (dwResult > 0 && dwResult <= MAX_PATH)
 	{
 		return_value = FUNC_RET_OK;
-		char* szSingleDrive = szLogicalDrives;
+		szSingleDrive = szLogicalDrives;
 		while (*szSingleDrive && ndrives < MAX_UNITS)
 		{
 
@@ -57,11 +66,11 @@
 					LOG_INFO("Volume Serial : 0x%x\n", volSerial);
 					LOG_DEBUG("Max file length : %d\n", FileMaxLen);
 					LOG_DEBUG("Filesystem      : %s\n", FileSysName);
-					if (diskInfos != NULL && * disk_info_size<ndrives){
-						strncpy(diskInfos[ndrives].device,volName,MAX_PATH);
-						strncpy(diskInfos[ndrives].label, FileSysName , MAX_PATH);
-						diskInfos[ndrives].id=ndrives;
-						diskInfos[ndrives].preferred = (strncmp(szSingleDrive,"C",1)!=0);
+					if (diskInfos != NULL && * disk_info_size < ndrives){
+						strncpy(diskInfos[ndrives].device, volName, MAX_PATH);
+						strncpy(diskInfos[ndrives].label, FileSysName, MAX_PATH);
+						diskInfos[ndrives].id = ndrives;
+						diskInfos[ndrives].preferred = (strncmp(szSingleDrive, "C", 1) != 0);
 
 					}
 					ndrives++;
@@ -132,7 +141,7 @@
 		return FUNC_RET_BUFFER_TOO_SMALL;
 	}
 
-	memset(adapterInfos, 0,*adapter_info_size);
+	memset(adapterInfos, 0, *adapter_info_size);
 	pAdapter = pAdapterInfo;
 	i = 0;
 	result = FUNC_RET_OK;
@@ -140,6 +149,7 @@
 		strncpy(adapterInfos[i].description, pAdapter->Description, min(sizeof(adapterInfos->description), MAX_ADAPTER_DESCRIPTION_LENGTH));
 		memcpy(adapterInfos[i].mac_address, pAdapter->Address, 8);
 		translate(pAdapter->IpAddressList.IpAddress.String, adapterInfos[i].ipv4_address);
+		adapterInfos[i].type = IFACE_TYPE_ETHERNET;
 		i++;
 		pAdapter = pAdapter->Next;
 		if (i == *adapter_info_size){
diff --git a/src/library/pc-identifiers.c b/src/library/pc-identifiers.c
index 509fab4..9cdb35e 100644
--- a/src/library/pc-identifiers.c
+++ b/src/library/pc-identifiers.c
@@ -9,17 +9,20 @@
 #include "pc-identifiers.h"
 #include <stdlib.h>
 #include <string.h>
-#include <stdbool.h>
 #include "base/base64.h"
+#include "base/base.h"
 #ifdef __linux__
+#include <stdbool.h>
 #include <valgrind/memcheck.h>
+#else
+#include <Windows.h>
 #endif
 
 static FUNCTION_RETURN generate_default_pc_id(PcIdentifier * identifiers,
 		unsigned int * num_identifiers) {
 	size_t adapter_num, disk_num;
 	FUNCTION_RETURN result_adapterInfos, result_diskinfos;
-	unsigned int required_id_size, i, j, k;
+	unsigned int required_id_size, defined_identifiers, i, j, k;
 	DiskInfo * diskInfos;
 	OsAdapterInfo *adapterInfos;
 
@@ -34,7 +37,7 @@
 	} else {
 		required_id_size = disk_num;
 	}
-	int defined_identifiers = *num_identifiers;
+	defined_identifiers = *num_identifiers;
 	*num_identifiers = required_id_size;
 	if (identifiers == NULL) {
 		return FUNC_RET_OK;
@@ -60,8 +63,9 @@
 }
 
 static FUNCTION_RETURN generate_ethernet_pc_id(PcIdentifier * identifiers,
-		unsigned int * num_identifiers, bool use_mac) {
+		unsigned int * num_identifiers, int use_mac) {
 	size_t adapters;
+	int defined_adapters;
 	FUNCTION_RETURN result_adapterInfos;
 	unsigned int i, j, k;
 	OsAdapterInfo *adapterInfos;
@@ -71,7 +75,7 @@
 		return result_adapterInfos;
 	}
 
-	int defined_adapters = *num_identifiers;
+	defined_adapters = *num_identifiers;
 	*num_identifiers = adapters;
 	if (identifiers == NULL) {
 		return FUNC_RET_OK;
@@ -104,6 +108,7 @@
 	size_t disk_num, available_disk_info=0;
 	FUNCTION_RETURN result_diskinfos;
 	unsigned int i, k, j;
+	int defined_identifiers;
 	char firstChar;
 	DiskInfo * diskInfos;
 
@@ -123,7 +128,7 @@
 		available_disk_info += firstChar == 0 ? 0 : 1;
 	}
 
-	int defined_identifiers = *num_identifiers;
+	defined_identifiers = *num_identifiers;
 	*num_identifiers = available_disk_info;
 	if (identifiers == NULL) {
 		free(diskInfos);
@@ -167,6 +172,7 @@
  * @param
  * @return
  */
+
 FUNCTION_RETURN generate_pc_id(PcIdentifier * identifiers,
 		unsigned int * array_size, IDENTIFICATION_STRATEGY strategy) {
 	FUNCTION_RETURN result;
@@ -178,10 +184,10 @@
 		result = generate_default_pc_id(identifiers, array_size);
 		break;
 	case ETHERNET:
-		result = generate_ethernet_pc_id(identifiers, array_size, true);
+		result = generate_ethernet_pc_id(identifiers, array_size, true );
 		break;
 	case IP_ADDRESS:
-		result = generate_ethernet_pc_id(identifiers, array_size, false);
+		result = generate_ethernet_pc_id(identifiers, array_size, false );
 		break;
 	case DISK_NUM:
 		result = generate_disk_pc_id(identifiers, array_size, false);
@@ -237,12 +243,13 @@
 		PcSignature pc_identifier_out) {
 //TODO base62 encoding, now uses base64
 	PcIdentifier concat_identifiers[2];
+	char* b64_data;
 	int b64_size = 0;
 	size_t concatIdentifiersSize = sizeof(PcIdentifier) * 2;
 //concat_identifiers = (PcIdentifier *) malloc(concatIdentifiersSize);
 	memcpy(&concat_identifiers[0], identifier1, sizeof(PcIdentifier));
 	memcpy(&concat_identifiers[1], identifier2, sizeof(PcIdentifier));
-	char* b64_data = base64(concat_identifiers, concatIdentifiersSize,
+	b64_data = base64(concat_identifiers, concatIdentifiersSize,
 			&b64_size);
 	if (b64_size > sizeof(PcSignature)) {
 		return FUNC_RET_BUFFER_TOO_SMALL;
diff --git a/test/functional/volid_test.cpp b/test/functional/volid_test.cpp
index aa0ba7d..b289af5 100644
--- a/test/functional/volid_test.cpp
+++ b/test/functional/volid_test.cpp
@@ -46,7 +46,7 @@
 	for (int i = 0; i < num_strategies; i++) {
 		FUNCTION_RETURN generate_ok = generate_user_pc_signature(identifier_out,
 				strategies[i]);
-		BOOST_ASSERT(generate_ok == FUNCTION_RETURN::FUNC_RET_OK);
+		BOOST_ASSERT(generate_ok == FUNC_RET_OK);
 		idfile << identifier_out << endl;
 	}
 	idfile.close();
@@ -55,10 +55,10 @@
 BOOST_AUTO_TEST_CASE(generated_identifiers_stability) {
 	const string idfileLocation(PROJECT_TEST_TEMP_DIR "/identifiers_file");
 	IDENTIFICATION_STRATEGY strategies[] =
-			{ IDENTIFICATION_STRATEGY::DEFAULT,
-					IDENTIFICATION_STRATEGY::DISK_LABEL,
-					IDENTIFICATION_STRATEGY::DISK_NUM,
-					IDENTIFICATION_STRATEGY::ETHERNET };
+			{ DEFAULT,
+					DISK_LABEL,
+					DISK_NUM,
+					ETHERNET };
 	const int num_strategies = sizeof(strategies) / sizeof(strategies[0]);
 	std::ifstream test_idfile_exist(idfileLocation);
 	if (!test_idfile_exist.good()) {
@@ -76,7 +76,7 @@
 		BOOST_ASSERT(generate_ok == FUNCTION_RETURN::FUNC_RET_OK);
 		if (reference_signatures[i] != generated_identifier) {
 			string message = string("pc signature compare fail: strategy:")
-					+ to_string(strategies[i]) + " generated: ["
+					+ to_string((long double) strategies[i]) + " generated: ["
 					+ generated_identifier + "] reference: ["
 					+ reference_signatures[i] + "]";
 			BOOST_FAIL(message);

--
Gitblit v1.9.1