diff --git a/channels/rdpsnd/client/CMakeLists.txt b/channels/rdpsnd/client/CMakeLists.txt index 6bc8a307f..2fa44f662 100644 --- a/channels/rdpsnd/client/CMakeLists.txt +++ b/channels/rdpsnd/client/CMakeLists.txt @@ -24,7 +24,7 @@ set(${MODULE_PREFIX}_SRCS rdpsnd_main.c rdpsnd_main.h) -add_library(${MODULE_NAME} ${RDPSND_SRCS}) +add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") if(WITH_MONOLITHIC_BUILD) @@ -46,3 +46,4 @@ endif() if(WITH_MACAUDIO) add_subdirectory(MacAudio) endif() + diff --git a/channels/rdpsnd/server/CMakeLists.txt b/channels/rdpsnd/server/CMakeLists.txt index bbdd507b2..351d49a97 100644 --- a/channels/rdpsnd/server/CMakeLists.txt +++ b/channels/rdpsnd/server/CMakeLists.txt @@ -29,3 +29,4 @@ else() endif() set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${MODULE_NAME}/Server") + diff --git a/winpr/include/winpr/crt.h b/winpr/include/winpr/crt.h index 045f1b7d3..ab0aa692a 100644 --- a/winpr/include/winpr/crt.h +++ b/winpr/include/winpr/crt.h @@ -50,6 +50,11 @@ WINPR_API size_t _aligned_msize(void* memblock, size_t alignment, size_t offset) WINPR_API void _aligned_free(void* memblock); +/* Buffer Manipulation */ + +WINPR_API errno_t memmove_s(void* dest, size_t numberOfElements, const void* src, size_t count); +WINPR_API errno_t wmemmove_s(WCHAR* dest, size_t numberOfElements, const WCHAR* src, size_t count); + #endif #endif /* WINPR_CRT_H */ diff --git a/winpr/include/winpr/wtypes.h b/winpr/include/winpr/wtypes.h index 57c2f6f82..0fb299928 100644 --- a/winpr/include/winpr/wtypes.h +++ b/winpr/include/winpr/wtypes.h @@ -71,6 +71,9 @@ typedef short SHORT; #define CALLBACK typedef void* HANDLE, *LPHANDLE; +typedef HANDLE HINSTANCE; +typedef HANDLE HMODULE; + typedef DWORD HCALL; typedef int INT, *LPINT; typedef signed char INT8; diff --git a/winpr/libwinpr/crt/CMakeLists.txt b/winpr/libwinpr/crt/CMakeLists.txt index 53b01927f..0bf62f777 100644 --- a/winpr/libwinpr/crt/CMakeLists.txt +++ b/winpr/libwinpr/crt/CMakeLists.txt @@ -20,6 +20,7 @@ set(MODULE_PREFIX "WINPR_CRT") set(${MODULE_PREFIX}_SRCS alignment.c + buffer.c memory.c string.c) diff --git a/winpr/libwinpr/crt/buffer.c b/winpr/libwinpr/crt/buffer.c new file mode 100644 index 000000000..491d1634d --- /dev/null +++ b/winpr/libwinpr/crt/buffer.c @@ -0,0 +1,52 @@ +/** + * WinPR: Windows Portable Runtime + * Buffer Manipulation + * + * Copyright 2012 Marc-Andre Moreau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +/* Buffer Manipulation: http://msdn.microsoft.com/en-us/library/b3893xdy/ */ + +#ifndef _WIN32 + +#include + +errno_t memmove_s(void* dest, size_t numberOfElements, const void* src, size_t count) +{ + if (count > numberOfElements) + return -1; + + memmove(dest, src, count); + + return 0; +} + +errno_t wmemmove_s(WCHAR* dest, size_t numberOfElements, const WCHAR* src, size_t count) +{ + if (count * 2 > numberOfElements) + return -1; + + memmove(dest, src, count * 2); + + return 0; +} + +#endif diff --git a/winpr/libwinpr/interlocked/CMakeLists.txt b/winpr/libwinpr/interlocked/CMakeLists.txt index ca95e91df..0ec9055a0 100644 --- a/winpr/libwinpr/interlocked/CMakeLists.txt +++ b/winpr/libwinpr/interlocked/CMakeLists.txt @@ -36,7 +36,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SO if(WITH_MONOLITHIC_BUILD) else() - target_link_libraries(${MODULE_NAME} winpr-crt) + target_link_libraries(${MODULE_NAME} winpr-crt winpr-handle winpr-synch) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() diff --git a/winpr/libwinpr/interlocked/interlocked.c b/winpr/libwinpr/interlocked/interlocked.c index e1a754b2d..5f1d96bd7 100644 --- a/winpr/libwinpr/interlocked/interlocked.c +++ b/winpr/libwinpr/interlocked/interlocked.c @@ -21,6 +21,9 @@ #include "config.h" #endif +#include +#include + #include /** @@ -248,7 +251,7 @@ LONG InterlockedCompareExchange(LONG volatile *Destination, LONG Exchange, LONG #endif /* _WIN32 */ -#if (_WIN32_WINNT < 0x0502) +#if (_WIN32 && (_WIN32_WINNT < 0x0502)) static volatile HANDLE mutex = NULL; @@ -262,7 +265,7 @@ int static_mutex_lock(volatile HANDLE* static_mutex) CloseHandle(handle); } - return WaitForSingleObject(*static_mutex, INFINITE) == WAIT_FAILED; + return (WaitForSingleObject(*static_mutex, INFINITE) == WAIT_FAILED); } /* Not available in XP */ diff --git a/winpr/libwinpr/io/test/.gitignore b/winpr/libwinpr/io/test/.gitignore index db7983b28..60021fda1 100644 --- a/winpr/libwinpr/io/test/.gitignore +++ b/winpr/libwinpr/io/test/.gitignore @@ -1,3 +1,3 @@ -TestIO -TestIO.c +TestIo +TestIo.c diff --git a/winpr/libwinpr/library/CMakeLists.txt b/winpr/libwinpr/library/CMakeLists.txt index c8cbcad5c..33acc7c3f 100644 --- a/winpr/libwinpr/library/CMakeLists.txt +++ b/winpr/libwinpr/library/CMakeLists.txt @@ -34,8 +34,13 @@ endif() set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") if(WITH_MONOLITHIC_BUILD) - + set(WINPR_LIBS ${WINPR_LIBS} ${${MODULE_PREFIX}_LIBS} PARENT_SCOPE) else() + if(NOT WIN32) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} dl) + endif() + + target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() diff --git a/winpr/libwinpr/library/test/TestLibraryA/CMakeLists.txt b/winpr/libwinpr/library/test/TestLibraryA/CMakeLists.txt index 06156482c..fc32e6ca9 100644 --- a/winpr/libwinpr/library/test/TestLibraryA/CMakeLists.txt +++ b/winpr/libwinpr/library/test/TestLibraryA/CMakeLists.txt @@ -19,4 +19,6 @@ set(MODULE_NAME "TestLibraryA") add_library(${MODULE_NAME} TestLibraryA.c) +set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") + set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/Test/Extra") diff --git a/winpr/libwinpr/library/test/TestLibraryAddDllDirectory.c b/winpr/libwinpr/library/test/TestLibraryAddDllDirectory.c index 7f3b941e4..0c1c7c4f1 100644 --- a/winpr/libwinpr/library/test/TestLibraryAddDllDirectory.c +++ b/winpr/libwinpr/library/test/TestLibraryAddDllDirectory.c @@ -2,7 +2,9 @@ #include #include #include +#include #include +#include int TestLibraryAddDllDirectory(int argc, char* argv[]) { diff --git a/winpr/libwinpr/library/test/TestLibraryB/CMakeLists.txt b/winpr/libwinpr/library/test/TestLibraryB/CMakeLists.txt index 16bb12e7b..f5688cd60 100644 --- a/winpr/libwinpr/library/test/TestLibraryB/CMakeLists.txt +++ b/winpr/libwinpr/library/test/TestLibraryB/CMakeLists.txt @@ -19,4 +19,6 @@ set(MODULE_NAME "TestLibraryB") add_library(${MODULE_NAME} TestLibraryB.c) +set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") + set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/Test/Extra") diff --git a/winpr/libwinpr/library/test/TestLibraryFreeLibrary.c b/winpr/libwinpr/library/test/TestLibraryFreeLibrary.c index f148995cc..db6b303ae 100644 --- a/winpr/libwinpr/library/test/TestLibraryFreeLibrary.c +++ b/winpr/libwinpr/library/test/TestLibraryFreeLibrary.c @@ -4,6 +4,7 @@ #include #include #include +#include int TestLibraryFreeLibrary(int argc, char* argv[]) { diff --git a/winpr/libwinpr/library/test/TestLibraryGetProcAddress.c b/winpr/libwinpr/library/test/TestLibraryGetProcAddress.c index 5811f181e..8ab2b2982 100644 --- a/winpr/libwinpr/library/test/TestLibraryGetProcAddress.c +++ b/winpr/libwinpr/library/test/TestLibraryGetProcAddress.c @@ -1,10 +1,10 @@ #include #include -#include #include #include #include +#include int TestLibraryGetProcAddress(int argc, char* argv[]) { @@ -22,10 +22,9 @@ int TestLibraryGetProcAddress(int argc, char* argv[]) MultiByteToWideChar(CP_UTF8, 0, str, length, (LPWSTR) BasePath, length * sizeof(WCHAR)); BasePath[length] = 0; #else - BasePath = _strdup(path); + BasePath = _strdup(str); #endif - _tprintf(_T("Base Path: %s\n"), BasePath); PathAllocCombine(BasePath, _T("TestLibraryA\\TestLibraryA.dll"), 0, &LibraryPath); diff --git a/winpr/libwinpr/library/test/TestLibraryLoadLibrary.c b/winpr/libwinpr/library/test/TestLibraryLoadLibrary.c index 5eb3e2f85..d127c0d8a 100644 --- a/winpr/libwinpr/library/test/TestLibraryLoadLibrary.c +++ b/winpr/libwinpr/library/test/TestLibraryLoadLibrary.c @@ -4,6 +4,7 @@ #include #include #include +#include int TestLibraryLoadLibrary(int argc, char* argv[]) { diff --git a/winpr/libwinpr/library/test/TestLibraryRemoveDllDirectory.c b/winpr/libwinpr/library/test/TestLibraryRemoveDllDirectory.c index 47ecf8cba..bf7795633 100644 --- a/winpr/libwinpr/library/test/TestLibraryRemoveDllDirectory.c +++ b/winpr/libwinpr/library/test/TestLibraryRemoveDllDirectory.c @@ -2,7 +2,9 @@ #include #include #include +#include #include +#include int TestLibraryRemoveDllDirectory(int argc, char* argv[]) { diff --git a/winpr/libwinpr/library/test/TestLibrarySetDefaultDllDirectories.c b/winpr/libwinpr/library/test/TestLibrarySetDefaultDllDirectories.c index f7935ea73..86cd92d82 100644 --- a/winpr/libwinpr/library/test/TestLibrarySetDefaultDllDirectories.c +++ b/winpr/libwinpr/library/test/TestLibrarySetDefaultDllDirectories.c @@ -2,7 +2,9 @@ #include #include #include +#include #include +#include int TestLibrarySetDefaultDllDirectories(int argc, char* argv[]) { diff --git a/winpr/libwinpr/path/CMakeLists.txt b/winpr/libwinpr/path/CMakeLists.txt index 00080ee0a..d45318a57 100644 --- a/winpr/libwinpr/path/CMakeLists.txt +++ b/winpr/libwinpr/path/CMakeLists.txt @@ -32,7 +32,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SO if(WITH_MONOLITHIC_BUILD) else() - target_link_libraries(${MODULE_NAME} winpr-heap) + target_link_libraries(${MODULE_NAME} winpr-crt winpr-heap) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() diff --git a/winpr/libwinpr/path/path.c b/winpr/libwinpr/path/path.c index 41c547a95..6e2e34ec1 100644 --- a/winpr/libwinpr/path/path.c +++ b/winpr/libwinpr/path/path.c @@ -181,6 +181,7 @@ HRESULT PathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt) HRESULT PathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt) { +#ifdef _WIN32 LPTCH pDot; BOOL bExtDot; LPTCH pBackslash; @@ -215,7 +216,7 @@ HRESULT PathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt) return S_OK; } - +#endif return S_FALSE; } @@ -268,6 +269,7 @@ HRESULT PathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore) HRESULT PathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore) { +#ifdef _WIN32 BOOL pathBackslash; BOOL moreBackslash; size_t pszMoreLength; @@ -309,6 +311,7 @@ HRESULT PathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore) return S_OK; } } +#endif return S_FALSE; } @@ -435,6 +438,7 @@ HRESULT PathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags, HRESULT PathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags, PWSTR* ppszPathOut) { +#ifdef _WIN32 PWSTR pszPathOut; BOOL backslashIn; BOOL backslashMore; @@ -489,6 +493,7 @@ HRESULT PathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlag return S_OK; } +#endif return S_OK; } @@ -583,7 +588,33 @@ HRESULT PathCchStripToRootW(PWSTR pszPath, size_t cchPath) HRESULT PathCchStripPrefixA(PSTR pszPath, size_t cchPath) { - return 0; + BOOL hasPrefix; + BOOL deviceNamespace; + + if (!pszPath) + return S_FALSE; + + if (cchPath < 4) + return S_FALSE; + + hasPrefix = ((pszPath[0] == '\\') && (pszPath[1] == '\\') && + (pszPath[2] == '?') && (pszPath[3] == '\\')) ? TRUE : FALSE; + + if (hasPrefix) + { + if (cchPath < 7) + return S_FALSE; + + deviceNamespace = ((pszPath[5] == ':') && (pszPath[6] == '\\')) ? TRUE : FALSE; + + if (deviceNamespace) + { + memmove_s(pszPath, cchPath, &pszPath[4], cchPath - 4); + return S_OK; + } + } + + return S_FALSE; } HRESULT PathCchStripPrefixW(PWSTR pszPath, size_t cchPath) diff --git a/winpr/libwinpr/path/test/TestPathIsUNCEx.c b/winpr/libwinpr/path/test/TestPathIsUNCEx.c index 3cea93432..40edfc86c 100644 --- a/winpr/libwinpr/path/test/TestPathIsUNCEx.c +++ b/winpr/libwinpr/path/test/TestPathIsUNCEx.c @@ -19,7 +19,7 @@ int TestPathIsUNCEx(int argc, char* argv[]) _tcscpy(Path, testPathUNC); - status = PathIsUNCEx(Path, &Server); + status = PathIsUNCEx(Path, (LPTSTR*) &Server); if (!status) { diff --git a/winpr/libwinpr/thread/CMakeLists.txt b/winpr/libwinpr/thread/CMakeLists.txt index d53f523ea..8c729f340 100644 --- a/winpr/libwinpr/thread/CMakeLists.txt +++ b/winpr/libwinpr/thread/CMakeLists.txt @@ -46,9 +46,7 @@ endif() if(WITH_MONOLITHIC_BUILD) set(WINPR_LIBS ${WINPR_LIBS} ${${MODULE_PREFIX}_LIBS} PARENT_SCOPE) else() - if(NOT WIN32) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr-handle) - endif() + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr-handle) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR})