winpr/library: fix win32 test and some cleanup

On Windows we seem to have to load the TestLibrary[AB] test libraries
from in same folder the test executable runs.

Also removed the empty RemoveDllDirectory, SetDefaultDllDirectories,
AddDllDirectory tests and the redundant FreeLibrary test.

TestLibrary now works and succeeds on Win32.

sadasd
This commit is contained in:
Norbert Federa 2016-05-26 12:19:36 +02:00
parent 17c125d986
commit d2b2a921f1
9 changed files with 31 additions and 128 deletions

View File

@ -5,11 +5,7 @@ set(MODULE_PREFIX "TEST_LIBRARY")
set(${MODULE_PREFIX}_DRIVER ${MODULE_NAME}.c)
set(${MODULE_PREFIX}_TESTS
TestLibraryAddDllDirectory.c
TestLibraryRemoveDllDirectory.c
TestLibrarySetDefaultDllDirectories.c
TestLibraryLoadLibrary.c
TestLibraryFreeLibrary.c
TestLibraryGetProcAddress.c
TestLibraryGetModuleFileName.c)

View File

@ -1,12 +1,7 @@
#include <winpr/spec.h>
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/file.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
WINPR_API int FunctionA(int a, int b);
WINPR_API int FunctionB(int a, int b);
DECLSPEC_EXPORT int FunctionA(int a, int b);
DECLSPEC_EXPORT int FunctionB(int a, int b);
int FunctionA(int a, int b)
{

View File

@ -1,12 +0,0 @@
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/file.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
#include <winpr/library.h>
int TestLibraryAddDllDirectory(int argc, char* argv[])
{
return 0;
}

View File

@ -1,12 +1,7 @@
#include <winpr/spec.h>
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/file.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
WINPR_API int FunctionA(int a, int b);
WINPR_API int FunctionB(int a, int b);
DECLSPEC_EXPORT int FunctionA(int a, int b);
DECLSPEC_EXPORT int FunctionB(int a, int b);
int FunctionA(int a, int b)
{

View File

@ -1,66 +0,0 @@
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/path.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
#include <winpr/library.h>
int TestLibraryFreeLibrary(int argc, char* argv[])
{
char* str;
int length;
LPTSTR BasePath;
HINSTANCE library;
LPCTSTR SharedLibraryExtension;
TCHAR LibraryPath[PATHCCH_MAX_CCH];
str = argv[1];
#ifdef UNICODE
length = MultiByteToWideChar(CP_UTF8, 0, str, strlen(str), NULL, 0);
BasePath = (WCHAR*) malloc((length + 1) * sizeof(WCHAR));
if (!BasePath)
{
_tprintf(_T("Memory allocation failed\n"));
return -1;
}
MultiByteToWideChar(CP_UTF8, 0, str, length, (LPWSTR) BasePath, length * sizeof(WCHAR));
BasePath[length] = 0;
#else
BasePath = _strdup(str);
if (!BasePath)
{
printf("Memory allocation failed");
return -1;
}
length = strlen(BasePath);
#endif
CopyMemory(LibraryPath, BasePath, length * sizeof(TCHAR));
LibraryPath[length] = 0;
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* subdirectory */
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* file name without extension */
SharedLibraryExtension = PathGetSharedLibraryExtension(PATH_SHARED_LIB_EXT_WITH_DOT);
NativePathCchAddExtension(LibraryPath, PATHCCH_MAX_CCH, SharedLibraryExtension); /* add shared library extension */
_tprintf(_T("Loading Library: %s\n"), LibraryPath);
library = LoadLibrary(LibraryPath);
if (!library)
{
_tprintf(_T("LoadLibrary failure\n"));
return -1;
}
if (!FreeLibrary(library))
{
_tprintf(_T("FreeLibrary failure\n"));
return -1;
}
return 0;
}

View File

@ -10,16 +10,18 @@ typedef int (*TEST_AB_FN)(int a, int b);
int TestLibraryGetProcAddress(int argc, char* argv[])
{
char* str;
int length;
int a, b, c;
LPTSTR BasePath;
HINSTANCE library;
TEST_AB_FN pFunctionA;
TEST_AB_FN pFunctionB;
LPCTSTR SharedLibraryExtension;
TCHAR LibraryPath[PATHCCH_MAX_CCH];
#ifndef _WIN32
char* str;
int length;
LPTSTR BasePath;
str = argv[1];
#ifdef UNICODE
@ -46,6 +48,14 @@ int TestLibraryGetProcAddress(int argc, char* argv[])
LibraryPath[length] = 0;
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* subdirectory */
#else /* _WIN32 */
/* On Windows the test libraries are in same folder as the test executable */
GetModuleFileName(NULL, LibraryPath, PATHCCH_MAX_CCH);
PathRemoveFileSpec(LibraryPath);
#endif
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* file name without extension */
SharedLibraryExtension = PathGetSharedLibraryExtension(PATH_SHARED_LIB_EXT_WITH_DOT);

View File

@ -8,13 +8,14 @@
int TestLibraryLoadLibrary(int argc, char* argv[])
{
char* str;
int length;
LPTSTR BasePath;
HINSTANCE library;
LPCTSTR SharedLibraryExtension;
TCHAR LibraryPath[PATHCCH_MAX_CCH];
#ifndef _WIN32
char* str;
int length;
LPTSTR BasePath;
str = argv[1];
#ifdef UNICODE
@ -42,6 +43,14 @@ int TestLibraryLoadLibrary(int argc, char* argv[])
LibraryPath[length] = 0;
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* subdirectory */
#else /* _WIN32 */
/* On Windows the test libraries are in same folder as the test executable */
GetModuleFileName(NULL, LibraryPath, PATHCCH_MAX_CCH);
PathRemoveFileSpec(LibraryPath);
#endif
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* file name without extension */
SharedLibraryExtension = PathGetSharedLibraryExtension(PATH_SHARED_LIB_EXT_WITH_DOT);

View File

@ -1,12 +0,0 @@
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/file.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
#include <winpr/library.h>
int TestLibraryRemoveDllDirectory(int argc, char* argv[])
{
return 0;
}

View File

@ -1,12 +0,0 @@
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/file.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
#include <winpr/library.h>
int TestLibrarySetDefaultDllDirectories(int argc, char* argv[])
{
return 0;
}