From 422db18f15925b8ad7983329ca08041049783071 Mon Sep 17 00:00:00 2001 From: Marcel Raad Date: Sat, 1 Oct 2016 17:55:37 +0200 Subject: [PATCH] win: fix Universal Windows Platform build This fixes a merge error in commit 7f3df80 caused by commit 332e8d6. Additionally, this changes Curl_verify_windows_version for Windows App builds to assume to always be running on the target Windows version. There seems to be no way to determine the Windows version from a UWP app. Neither GetVersion(Ex), nor VerifyVersionInfo, nor the Version Helper functions are supported. Bug: https://github.com/curl/curl/pull/820#issuecomment-250889878 Reported-by: Paul Joyce Closes https://github.com/curl/curl/pull/1048 --- lib/connect.c | 3 --- lib/system_win32.c | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/lib/connect.c b/lib/connect.c index 3225d70cf..e2b34eb6a 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -130,9 +130,6 @@ tcpkeepalive(struct Curl_easy *data, infof(data, "Failed to set SIO_KEEPALIVE_VALS on fd %d: %d\n", (int)sockfd, WSAGetLastError()); } -#elif defined(CURL_WINDOWS_APP) - (void)majorVersion; - detectOsState = DETECT_OS_VISTA_OR_LATER; #else #ifdef TCP_KEEPIDLE optval = curlx_sltosi(data->set.tcp_keepidle); diff --git a/lib/system_win32.c b/lib/system_win32.c index effc3f2bc..78737593a 100644 --- a/lib/system_win32.c +++ b/lib/system_win32.c @@ -83,7 +83,39 @@ bool Curl_verify_windows_version(const unsigned int majorVersion, { bool matched = FALSE; -#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \ +#if defined(CURL_WINDOWS_APP) + /* We have no way to determine the Windows version from Windows apps, + so let's assume we're running on the target Windows version. */ + const WORD fullVersion = MAKEWORD(minorVersion, majorVersion); + const WORD targetVersion = (WORD)_WIN32_WINNT; + + switch(condition) { + case VERSION_LESS_THAN: + matched = targetVersion < fullVersion; + break; + + case VERSION_LESS_THAN_EQUAL: + matched = targetVersion <= fullVersion; + break; + + case VERSION_EQUAL: + matched = targetVersion == fullVersion; + break; + + case VERSION_GREATER_THAN_EQUAL: + matched = targetVersion >= fullVersion; + break; + + case VERSION_GREATER_THAN: + matched = targetVersion > fullVersion; + break; + } + + if(matched && (platform == PLATFORM_WINDOWS)) { + /* we're always running on PLATFORM_WINNT */ + matched = FALSE; + } +#elif !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \ (_WIN32_WINNT < _WIN32_WINNT_WIN2K) OSVERSIONINFO osver;