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