summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/patches/0045-platinum-win10-uwp-fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/patches/0045-platinum-win10-uwp-fixes.patch')
-rw-r--r--lib/libUPnP/patches/0045-platinum-win10-uwp-fixes.patch238
1 files changed, 238 insertions, 0 deletions
diff --git a/lib/libUPnP/patches/0045-platinum-win10-uwp-fixes.patch b/lib/libUPnP/patches/0045-platinum-win10-uwp-fixes.patch
new file mode 100644
index 0000000..2203432
--- /dev/null
+++ b/lib/libUPnP/patches/0045-platinum-win10-uwp-fixes.patch
@@ -0,0 +1,238 @@
+From 78d3d7f7abec5e0d76d7efa92b226b5236a7bbea Mon Sep 17 00:00:00 2001
+From: Dale Stammen <dalestam@microsoft.com>
+Date: Fri, 2 Jun 2017 16:34:58 +0300
+Subject: [PATCH] [win10] uwp fixes libUPnP
+
+---
+ lib/libUPnP/Neptune/Source/Core/NptConfig.h | 13 ++++++++++
+ lib/libUPnP/Neptune/Source/Core/NptUtils.cpp | 30 ++++++++++++++++++++++
+ lib/libUPnP/Neptune/Source/Core/NptUtils.h | 7 +++++
+ .../Source/System/StdC/NptStdcEnvironment.cpp | 2 +-
+ .../System/Win32/NptWin32DynamicLibraries.cpp | 4 +++
+ .../Source/System/Win32/NptWin32MessageQueue.cpp | 3 ++-
+ .../Source/System/Win32/NptWin32MessageQueue.h | 3 +++
+ .../Neptune/Source/System/Win32/NptWin32Queue.cpp | 6 ++---
+ .../Source/System/Win32/NptWin32SerialPort.cpp | 2 ++
+ 9 files changed, 65 insertions(+), 5 deletions(-)
+
+diff --git a/lib/libUPnP/Neptune/Source/Core/NptConfig.h b/lib/libUPnP/Neptune/Source/Core/NptConfig.h
+index d51f67f94e..130d5cc33b 100644
+--- a/lib/libUPnP/Neptune/Source/Core/NptConfig.h
++++ b/lib/libUPnP/Neptune/Source/Core/NptConfig.h
+@@ -60,6 +60,11 @@
+ #define NPT_CONFIG_HAVE_GETENV
+ #define NPT_CONFIG_HAVE_SETENV
+ #define NPT_CONFIG_HAVE_UNSETENV
++#if defined(TARGET_WINDOWS_STORE)
++#undef NPT_CONFIG_HAVE_GETENV
++#undef NPT_CONFIG_HAVE_SETENV
++#undef NPT_CONFIG_HAVE_UNSETENV
++#endif
+ #define NPT_CONFIG_HAVE_READDIR_R
+ #endif /* NPT_CONFIG_HAS_STD_C */
+
+@@ -240,12 +245,20 @@ typedef long NPT_PointerLong;
+ #define NPT_strncpy(d,s,c) strncpy_s(d,c+1,s,c)
+ #define NPT_strcpy(d,s) strcpy_s(d,strlen(s)+1,s)
+ #undef NPT_CONFIG_HAVE_GETENV
++#ifdef TARGET_WINDOWS_STORE
++#undef NPT_CONFIG_HAVE_GETENV
++#undef NPT_CONFIG_HAVE_DUPENV_S
++#undef NPT_CONFIG_HAVE_SETENV
++#undef NPT_CONFIG_HAVE_UNSETENV
++#undef NPT_CONFIG_HAVE_PUTENV_S
++#else
+ #define NPT_CONFIG_HAVE_DUPENV_S
+ #define dupenv_s _dupenv_s
+ #undef NPT_CONFIG_HAVE_SETENV
+ #undef NPT_CONFIG_HAVE_UNSETENV
+ #define NPT_CONFIG_HAVE_PUTENV_S
+ #define putenv_s _putenv_s
++#endif
+ #else
+ #undef NPT_CONFIG_HAVE_GMTIME_R
+ #undef NPT_CONFIG_HAVE_LOCALTIME_R
+diff --git a/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp b/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp
+index a68a1afeaf..d98710dc12 100644
+--- a/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp
++++ b/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp
+@@ -44,6 +44,12 @@
+ #include <limits.h>
+ #endif
+
++#ifdef TARGET_WINDOWS_STORE
++#ifndef WIN32_LEAN_AND_MEAN
++#define WIN32_LEAN_AND_MEAN 1
++#endif
++#include <windows.h>
++#endif
+ /*----------------------------------------------------------------------
+ | constants
+ +---------------------------------------------------------------------*/
+@@ -925,3 +931,27 @@ NPT_ParseMimeParameters(const char* encoded,
+ return NPT_SUCCESS;
+ }
+
++#ifdef TARGET_WINDOWS_STORE
++std::wstring win32ConvertUtf8ToW(const std::string &text)
++{
++ if (text.empty())
++ {
++ return L"";
++ }
++
++ int bufSize = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, text.c_str(), -1, NULL, 0);
++ if (bufSize == 0)
++ return L"";
++ wchar_t *converted = new wchar_t[bufSize];
++ if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, text.c_str(), -1, converted, bufSize) != bufSize)
++ {
++ delete[] converted;
++ return L"";
++ }
++
++ std::wstring Wret(converted);
++ delete[] converted;
++
++ return Wret;
++}
++#endif
+diff --git a/lib/libUPnP/Neptune/Source/Core/NptUtils.h b/lib/libUPnP/Neptune/Source/Core/NptUtils.h
+index 3a06d497f4..89b2e29812 100644
+--- a/lib/libUPnP/Neptune/Source/Core/NptUtils.h
++++ b/lib/libUPnP/Neptune/Source/Core/NptUtils.h
+@@ -54,6 +54,9 @@
+ #include <stdarg.h>
+ #endif
+
++#if defined(TARGET_WINDOWS_STORE)
++#include <string>
++#endif
+ /*----------------------------------------------------------------------
+ | macros
+ +---------------------------------------------------------------------*/
+@@ -225,4 +228,8 @@ extern void NPT_SetMemory(void* dest, int c, NPT_Size size);
+ extern int NPT_MemoryEqual(const void* s1, const void* s2, unsigned long n);
+ #endif
+
++#if defined(TARGET_WINDOWS_STORE)
++std::wstring win32ConvertUtf8ToW(const std::string &text);
++#endif
++
+ #endif // _NPT_UTILS_H_
+diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
+index c9f9939d2b..f700b2212b 100644
+--- a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
++++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
+@@ -22,7 +22,7 @@
+ NPT_Result
+ NPT_Environment::Get(const char* name, NPT_String& value)
+ {
+- char* env;
++ char* env = nullptr;
+
+ /* default value */
+ value.SetLength(0);
+diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp
+index caaf6d1903..371aaf5ab9 100644
+--- a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp
++++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp
+@@ -97,7 +97,11 @@ NPT_DynamicLibrary::Load(const char* name, NPT_Flags flags, NPT_DynamicLibrary*&
+
+ // load the lib
+ NPT_LOG_FINE_2("loading library %s, flags=%x", name, flags);
++#ifdef TARGET_WINDOWS_STORE
++ HMODULE handle = LoadPackagedLibrary(NPT_WIN32_A2W(name), NULL);
++#else
+ HMODULE handle = LoadLibraryW(NPT_WIN32_A2W(name));
++#endif
+ if (handle == NULL) {
+ NPT_LOG_FINE("library not found");
+ return NPT_FAILURE;
+diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp
+index f415b851d5..d5ad0b953c 100644
+--- a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp
++++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp
+@@ -11,7 +11,7 @@
+ | includes
+ +---------------------------------------------------------------------*/
+ #include "NptWin32MessageQueue.h"
+-
++#ifndef TARGET_WINDOWS_STORE
+ /*----------------------------------------------------------------------
+ | platform adaptation
+ +---------------------------------------------------------------------*/
+@@ -181,3 +181,4 @@ NPT_Win32WindowMessageQueue::HandleMessage(NPT_Message* message,
+ return result;
+ }
+
++#endif // ! TARGET_WINDOWS_STORE
+diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h
+index a5f846b016..1d84800586 100644
+--- a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h
++++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h
+@@ -10,6 +10,7 @@
+ #ifndef _NPT_WIN32_MESSAGE_QUEUE_
+ #define _NPT_WIN32_MESSAGE_QUEUE_
+
++#ifndef TARGET_WINDOWS_STORE
+ /*----------------------------------------------------------------------
+ | includes
+ +---------------------------------------------------------------------*/
+@@ -45,5 +46,7 @@ private:
+ HINSTANCE m_hInstance;
+ };
+
++#endif // ! TARGET_WINDOWS_STORE
++
+ #endif // _NPT_WIN32_MESSAGE_QUEUE_
+
+--- a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Queue.cpp
++++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Queue.cpp
+@@ -24,7 +24,7 @@
+ #include "NptDebug.h"
+ #include "NptLogging.h"
+
+-#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP
++#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || defined(TARGET_WINDOWS_STORE)
+ // for XBox, Windows 7 Desktop or earlier
+ #include "NptWin32Threads.h"
+ #elif WINAPI_FAMILY == WINAPI_FAMILY_APP
+@@ -55,7 +55,7 @@ private:
+ // members
+ NPT_Cardinal m_MaxItems;
+
+-#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP
++#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || defined(TARGET_WINDOWS_STORE)
+ // for XBox, Windows 7 Desktop or earlier
+ NPT_Win32CriticalSection m_Mutex;
+ NPT_Win32Event* m_CanPushCondition;
+@@ -76,7 +76,7 @@ private:
+ NPT_Win32Queue::NPT_Win32Queue(NPT_Cardinal max_items) :
+ m_MaxItems(max_items)
+ {
+-#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP
++#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || defined(TARGET_WINDOWS_STORE)
+ // for XBox, Windows 7 Desktop or earlier
+ m_CanPushCondition = new NPT_Win32Event(true, true);
+ m_CanPopCondition = new NPT_Win32Event(true, false);
+diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp
+index 9428648bd7..4dfc23a603 100644
+--- a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp
++++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp
+@@ -17,6 +17,7 @@
+ #include "NptStrings.h"
+ #include "NptLogging.h"
+
++#ifndef TARGET_WINDOWS_STORE
+ /*----------------------------------------------------------------------
+ | NPT_Win32HandletWrapper
+ +---------------------------------------------------------------------*/
+@@ -338,3 +339,4 @@ NPT_SerialPort::NPT_SerialPort(const char* name)
+ {
+ m_Delegate = new NPT_Win32SerialPort(name);
+ }
++#endif // ! TARGET_WINDOWS_STORE
+--
+2.13.2.windows.1
+