From e5699a1b52b4a89d43752b05eab0e3e45471c384 Mon Sep 17 00:00:00 2001 From: Markus Schaber Date: Fri, 30 Sep 2016 21:16:56 +0200 Subject: [PATCH] Make the pEp Engine keysync branch compile on Windows again. Warning: The changes are not yet tested. Especially the ones in platform_unix.*. --- pEpEngine.vcxproj | 10 ++++++++-- pEpEngine.vcxproj.filters | 12 ++++++++++++ src/platform_unix.c | 8 +++++--- src/platform_unix.h | 8 +++++--- src/platform_windows.cpp | 14 +++++++------- src/platform_windows.h | 16 ++++++++++++---- src/sync_impl.c | 4 +++- 7 files changed, 52 insertions(+), 20 deletions(-) diff --git a/pEpEngine.vcxproj b/pEpEngine.vcxproj index d8241b29..a2d6f5b9 100644 --- a/pEpEngine.vcxproj +++ b/pEpEngine.vcxproj @@ -65,7 +65,7 @@ Windows true - $(TargetDir)\pEpEngineASN1.lib;%(AdditionalDependencies) + $(TargetDir)\pEpEngineASN1.lib;Rpcrt4.lib;%(AdditionalDependencies) @@ -84,13 +84,15 @@ false C:\Users\vb\share\asn1c;%(AdditionalIncludeDirectories) Default + true + Guard Windows true true true - $(TargetDir)\pEpEngineASN1.lib;%(AdditionalDependencies) + $(TargetDir)\pEpEngineASN1.lib;Rpcrt4.lib;%(AdditionalDependencies) @@ -98,6 +100,7 @@ + @@ -121,12 +124,14 @@ + + @@ -153,6 +158,7 @@ + diff --git a/pEpEngine.vcxproj.filters b/pEpEngine.vcxproj.filters index 747bc007..b807d983 100644 --- a/pEpEngine.vcxproj.filters +++ b/pEpEngine.vcxproj.filters @@ -96,6 +96,12 @@ Quelldateien + + Quelldateien + + + Quelldateien + @@ -188,6 +194,12 @@ Headerdateien + + Headerdateien + + + Headerdateien + diff --git a/src/platform_unix.c b/src/platform_unix.c index 156bda9c..4d50c431 100644 --- a/src/platform_unix.c +++ b/src/platform_unix.c @@ -98,7 +98,8 @@ const char *android_system_db(void) return buffer; } -void uuid_generate_random(uuid__t out) +// TODO: Check and possibly fix this function if necessary +void uuid_generate_random(pEpUUID out) { uuid_t *uuid; uuid_rc_t rc_create; @@ -107,7 +108,7 @@ void uuid_generate_random(uuid__t out) uuid_make(uuid, UUID_MAKE_V1) != UUID_RC_OK || uuid_export(uuid, UUID_FMT_BIN, out, NULL) != UUID_RC_OK) { - memset(out, 0, sizeof(uuid__t)); + memset(out, 0, sizeof(pEpUUID)); } if (rc_create == UUID_RC_OK) @@ -116,7 +117,8 @@ void uuid_generate_random(uuid__t out) } } -void uuid_unparse_upper(uuid__t uu, uuid_string_t out) +// TODO: Check and possibly fix this function if necessary +void uuid_unparse_upper(pEpUUID uu, uuid_string_t out) { uuid_t *uuid; uuid_rc_t rc_create; diff --git a/src/platform_unix.h b/src/platform_unix.h index e3f6a2cb..2eb45113 100644 --- a/src/platform_unix.h +++ b/src/platform_unix.h @@ -71,9 +71,11 @@ typedef char uuid_string_t[37]; #define UUID uuid_t #ifdef ANDROID -typedef char uuid__t[16]; -void uuid_generate_random(uuid__t out); -void uuid_unparse_upper(uuid__t uu, uuid_string_t out); +typedef char pEpUUID[16]; +void uuid_generate_random(pEpUUID out); +void uuid_unparse_upper(pEpUUID uu, uuid_string_t out); +#else +typedef uuid_t pEpUUID; #endif #ifdef __cplusplus diff --git a/src/platform_windows.cpp b/src/platform_windows.cpp index 59b2904d..61aa2169 100644 --- a/src/platform_windows.cpp +++ b/src/platform_windows.cpp @@ -267,32 +267,32 @@ int mkstemp(char *templ) return _open(pathname, _O_RDWR | _O_CREAT | _O_EXCL, _S_IREAD | _S_IWRITE); } -void uuid_generate_random(uuid_t out) +void uuid_generate_random(pEpUUID out) { RPC_STATUS rpc_status = UuidCreate(out); assert(rpc_status == RPC_S_OK); } -int uuid_parse(char *in, uuid_t uu) +int uuid_parse(char *in, pEpUUID uu) { unsigned char *_in = (unsigned char *) in; - RPC_STATUS rpc_status = UuidFromString(_in, &uu); + RPC_STATUS rpc_status = UuidFromStringA(_in, uu); assert(rpc_status == RPC_S_OK); if (rpc_status == RPC_S_INVALID_STRING_UUID) return -1; return 0; } -void uuid_unparse_upper(uuid_t uu, uuid_string_t out) +void uuid_unparse_upper(pEpUUID uu, uuid_string_t out) { - unsigned char *_out = out; + unsigned char *_out = (unsigned char*)out; RPC_CSTR str; - RPC_STATUS rpc_status = UuidToString(uu, &str); + RPC_STATUS rpc_status = UuidToStringA(uu, &str); assert(rpc_status == RPC_S_OK); if (rpc_status == RPC_S_OK) { memcpy(out, str, 36); out[36] = 0; - RpcStringFree(str); + RpcStringFreeA(&str); } else { // if (rpc_status == RPC_S_OUT_OF_MEMORY) memset(out, 0, 37); diff --git a/src/platform_windows.h b/src/platform_windows.h index 54a6ab31..3ae3486d 100644 --- a/src/platform_windows.h +++ b/src/platform_windows.h @@ -4,6 +4,14 @@ #pragma warning(disable : 4996) +// We need to make sure winsock2 is included before windows.h, or we will get redefinitions of symbols +// as windows.h includes winsock1.h, so we will have duplicate symbols if windows.h is included first. +// It seems some of our code includes sync.h before including winsock.h, leading to the failure. +// Including winsock2.h here fixes the problem for now... +#ifdef WIN32 +#include +#endif // WIN32 + #include #include #include @@ -62,13 +70,13 @@ const char *gpg_conf(void); long random(void); // on Windoze, uuid_t needs pointer semantics -typedef UUID *uuid_t; +typedef UUID pEpUUID[1]; #define _UUID_STRING_T typedef char uuid_string_t[37]; -void uuid_generate_random(uuid_t out); -int uuid_parse(char *in, uuid_t uu); -void uuid_unparse_upper(uuid_t uu, uuid_string_t out); +void uuid_generate_random(pEpUUID out); +int uuid_parse(char *in, pEpUUID uu); +void uuid_unparse_upper(pEpUUID uu, uuid_string_t out); #ifndef inline #define inline __inline diff --git a/src/sync_impl.c b/src/sync_impl.c index 24cfde00..f65f3dfe 100644 --- a/src/sync_impl.c +++ b/src/sync_impl.c @@ -104,7 +104,9 @@ error: return status; } -DYNAMIC_API void free_sync_msg(sync_msg_t *sync_msg) +// TODO: DYNAMIC_API was here, but broke the windows build. +// We need to check whether it belongs here or it's a bug. +/* DYNAMIC_API */ void free_sync_msg(sync_msg_t *sync_msg) { assert(sync_msg); if (!(sync_msg))