msvcrt/tests: Link to malloc/free functions in cpp tests.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d7cc3d6583
)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
This commit is contained in:
parent
499448fb21
commit
53ee588abb
|
@ -44,12 +44,8 @@ typedef struct __type_info
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Function pointers. We need to use these to call these funcs as __thiscall */
|
/* Function pointers. We need to use these to call these funcs as __thiscall */
|
||||||
static HMODULE hMsvcrt;
|
static void* (__cdecl *poperator_new)(size_t);
|
||||||
|
|
||||||
static void* (__cdecl *poperator_new)(unsigned int);
|
|
||||||
static void (__cdecl *poperator_delete)(void*);
|
static void (__cdecl *poperator_delete)(void*);
|
||||||
static void* (__cdecl *pmalloc)(unsigned int);
|
|
||||||
static void (__cdecl *pfree)(void*);
|
|
||||||
|
|
||||||
/* exception */
|
/* exception */
|
||||||
static void (__thiscall *pexception_ctor)(exception*,LPCSTR*);
|
static void (__thiscall *pexception_ctor)(exception*,LPCSTR*);
|
||||||
|
@ -157,23 +153,12 @@ static void init_thiscall_thunk(void)
|
||||||
#endif /* __i386__ */
|
#endif /* __i386__ */
|
||||||
|
|
||||||
/* Some exports are only available in later versions */
|
/* Some exports are only available in later versions */
|
||||||
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y)
|
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hmsvcrt,y)
|
||||||
#define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0)
|
#define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0)
|
||||||
|
|
||||||
static BOOL InitFunctionPtrs(void)
|
static BOOL InitFunctionPtrs(void)
|
||||||
{
|
{
|
||||||
hMsvcrt = GetModuleHandleA("msvcrt.dll");
|
HMODULE hmsvcrt = GetModuleHandleA("msvcrt.dll");
|
||||||
if (!hMsvcrt)
|
|
||||||
hMsvcrt = GetModuleHandleA("msvcrtd.dll");
|
|
||||||
ok(hMsvcrt != 0, "GetModuleHandleA failed\n");
|
|
||||||
if (!hMsvcrt)
|
|
||||||
{
|
|
||||||
win_skip("Could not load msvcrt.dll\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
SET(pmalloc, "malloc");
|
|
||||||
SET(pfree, "free");
|
|
||||||
|
|
||||||
SET(pexception_vtable, "??_7exception@@6B@");
|
SET(pexception_vtable, "??_7exception@@6B@");
|
||||||
SET(pbad_typeid_vtable, "??_7bad_typeid@@6B@");
|
SET(pbad_typeid_vtable, "??_7bad_typeid@@6B@");
|
||||||
|
@ -338,9 +323,9 @@ static BOOL InitFunctionPtrs(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!poperator_new)
|
if (!poperator_new)
|
||||||
poperator_new = pmalloc;
|
poperator_new = malloc;
|
||||||
if (!poperator_delete)
|
if (!poperator_delete)
|
||||||
poperator_delete = pfree;
|
poperator_delete = free;
|
||||||
|
|
||||||
init_thiscall_thunk();
|
init_thiscall_thunk();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -818,14 +803,14 @@ static void test_type_info(void)
|
||||||
char* name;
|
char* name;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (!pmalloc || !pfree || !ptype_info_dtor || !ptype_info_raw_name ||
|
if (!ptype_info_dtor || !ptype_info_raw_name ||
|
||||||
!ptype_info_name || !ptype_info_before ||
|
!ptype_info_name || !ptype_info_before ||
|
||||||
!ptype_info_opequals_equals || !ptype_info_opnot_equals)
|
!ptype_info_opequals_equals || !ptype_info_opnot_equals)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Test calling the dtors */
|
/* Test calling the dtors */
|
||||||
call_func1(ptype_info_dtor, &t1); /* No effect, since name is NULL */
|
call_func1(ptype_info_dtor, &t1); /* No effect, since name is NULL */
|
||||||
t1.name = pmalloc(64);
|
t1.name = malloc(64);
|
||||||
strcpy(t1.name, "foo");
|
strcpy(t1.name, "foo");
|
||||||
call_func1(ptype_info_dtor, &t1); /* Frees t1.name using 'free' */
|
call_func1(ptype_info_dtor, &t1); /* Frees t1.name using 'free' */
|
||||||
|
|
||||||
|
@ -1112,11 +1097,11 @@ static void test_demangle_datatype(void)
|
||||||
|
|
||||||
for (i = 0; i < num_test; i++)
|
for (i = 0; i < num_test; i++)
|
||||||
{
|
{
|
||||||
name = p__unDName(0, demangle[i].mangled, 0, pmalloc, pfree, 0x2800);
|
name = p__unDName(0, demangle[i].mangled, 0, malloc, free, 0x2800);
|
||||||
todo_wine_if (!demangle[i].test_in_wine)
|
todo_wine_if (!demangle[i].test_in_wine)
|
||||||
ok(name != NULL && !strcmp(name,demangle[i].result), "Got name \"%s\" for %d\n", name, i);
|
ok(name != NULL && !strcmp(name,demangle[i].result), "Got name \"%s\" for %d\n", name, i);
|
||||||
if(name)
|
if(name)
|
||||||
pfree(name);
|
free(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1331,7 +1316,7 @@ static void test_demangle(void)
|
||||||
|
|
||||||
for (i = 0; i < num_test; i++)
|
for (i = 0; i < num_test; i++)
|
||||||
{
|
{
|
||||||
name = p__unDName(0, test[i].in, 0, pmalloc, pfree, test[i].flags);
|
name = p__unDName(0, test[i].in, 0, malloc, free, test[i].flags);
|
||||||
ok(name != NULL, "%u: unDName failed\n", i);
|
ok(name != NULL, "%u: unDName failed\n", i);
|
||||||
if (!name) continue;
|
if (!name) continue;
|
||||||
ok( !strcmp_space(test[i].out, name) ||
|
ok( !strcmp_space(test[i].out, name) ||
|
||||||
|
@ -1340,7 +1325,7 @@ static void test_demangle(void)
|
||||||
ok( !strcmp_space(test[i].out, name) ||
|
ok( !strcmp_space(test[i].out, name) ||
|
||||||
broken(test[i].broken && !strcmp_space(test[i].broken, name)),
|
broken(test[i].broken && !strcmp_space(test[i].broken, name)),
|
||||||
"%u: Expected \"%s\"\n", i, test[i].out );
|
"%u: Expected \"%s\"\n", i, test[i].out );
|
||||||
pfree(name);
|
free(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue