Qian Hong : imm32: Fixed IMCC implementation.
Alexandre Julliard
julliard at winehq.org
Fri Aug 16 14:23:47 CDT 2013
Module: wine
Branch: master
Commit: 134935e714db87a0dcd7318d0efd4127d7321d25
URL: http://source.winehq.org/git/wine.git/?a=commit;h=134935e714db87a0dcd7318d0efd4127d7321d25
Author: Qian Hong <qhong at codeweavers.com>
Date: Mon Aug 12 22:10:26 2013 +0800
imm32: Fixed IMCC implementation.
---
dlls/imm32/imm.c | 52 ++++++---------------------------------------
dlls/imm32/tests/imm32.c | 22 +++++++++---------
2 files changed, 18 insertions(+), 56 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 5aee6ea..bc7caba 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -37,12 +37,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(imm);
-typedef struct tagIMCCInternal
-{
- DWORD dwLock;
- DWORD dwSize;
-} IMCCInternal;
-
#define MAKE_FUNCPTR(f) typeof(f) * p##f
typedef struct _tagImmHkl{
struct list entry;
@@ -2625,15 +2619,7 @@ DWORD WINAPI ImmGetIMCLockCount(HIMC hIMC)
*/
HIMCC WINAPI ImmCreateIMCC(DWORD size)
{
- IMCCInternal *internal;
- int real_size = size + sizeof(IMCCInternal);
-
- internal = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, real_size);
- if (internal == NULL)
- return NULL;
-
- internal->dwSize = size;
- return internal;
+ return GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE, size);
}
/***********************************************************************
@@ -2641,8 +2627,7 @@ HIMCC WINAPI ImmCreateIMCC(DWORD size)
*/
HIMCC WINAPI ImmDestroyIMCC(HIMCC block)
{
- HeapFree(GetProcessHeap(),0,block);
- return NULL;
+ return GlobalFree(block);
}
/***********************************************************************
@@ -2650,11 +2635,7 @@ HIMCC WINAPI ImmDestroyIMCC(HIMCC block)
*/
LPVOID WINAPI ImmLockIMCC(HIMCC imcc)
{
- IMCCInternal *internal;
- internal = imcc;
-
- internal->dwLock ++;
- return internal + 1;
+ return GlobalLock(imcc);
}
/***********************************************************************
@@ -2662,12 +2643,7 @@ LPVOID WINAPI ImmLockIMCC(HIMCC imcc)
*/
BOOL WINAPI ImmUnlockIMCC(HIMCC imcc)
{
- IMCCInternal *internal;
- internal = imcc;
-
- if (internal->dwLock)
- internal->dwLock --;
- return (internal->dwLock!=0);
+ return GlobalUnlock(imcc);
}
/***********************************************************************
@@ -2675,10 +2651,7 @@ BOOL WINAPI ImmUnlockIMCC(HIMCC imcc)
*/
DWORD WINAPI ImmGetIMCCLockCount(HIMCC imcc)
{
- IMCCInternal *internal;
- internal = imcc;
-
- return internal->dwLock;
+ return GlobalFlags(imcc) & GMEM_LOCKCOUNT;
}
/***********************************************************************
@@ -2686,15 +2659,7 @@ DWORD WINAPI ImmGetIMCCLockCount(HIMCC imcc)
*/
HIMCC WINAPI ImmReSizeIMCC(HIMCC imcc, DWORD size)
{
- IMCCInternal *internal,*newone;
- int real_size = size + sizeof(IMCCInternal);
-
- internal = imcc;
-
- newone = HeapReAlloc(GetProcessHeap(), 0, internal, real_size);
- newone->dwSize = size;
-
- return newone;
+ return GlobalReAlloc(imcc, size, GMEM_ZEROINIT | GMEM_MOVEABLE);
}
/***********************************************************************
@@ -2702,10 +2667,7 @@ HIMCC WINAPI ImmReSizeIMCC(HIMCC imcc, DWORD size)
*/
DWORD WINAPI ImmGetIMCCSize(HIMCC imcc)
{
- IMCCInternal *internal;
- internal = imcc;
-
- return internal->dwSize;
+ return GlobalSize(imcc);
}
/***********************************************************************
diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c
index 308b3d3..0a511e6 100644
--- a/dlls/imm32/tests/imm32.c
+++ b/dlls/imm32/tests/imm32.c
@@ -734,25 +734,25 @@ static void test_ImmGetIMCCLockCount(void)
ok(count == 0, "expect 0, returned %d\n", count);
p = ImmLockIMCC(imcc);
- todo_wine ok(GlobalHandle(p) == imcc, "expect %p, returned %p\n", imcc, GlobalHandle(p));
+ ok(GlobalHandle(p) == imcc, "expect %p, returned %p\n", imcc, GlobalHandle(p));
for (i = 0; i < GMEM_LOCKCOUNT * 2; i++)
{
ImmLockIMCC(imcc);
count = ImmGetIMCCLockCount(imcc);
g_count = GlobalFlags(imcc) & GMEM_LOCKCOUNT;
- todo_wine ok(count == g_count, "count %d, g_count %d\n", count, g_count);
+ ok(count == g_count, "count %d, g_count %d\n", count, g_count);
}
count = ImmGetIMCCLockCount(imcc);
- todo_wine ok(count == GMEM_LOCKCOUNT, "expect GMEM_LOCKCOUNT, returned %d\n", count);
+ ok(count == GMEM_LOCKCOUNT, "expect GMEM_LOCKCOUNT, returned %d\n", count);
for (i = 0; i < GMEM_LOCKCOUNT - 1; i++)
GlobalUnlock(imcc);
count = ImmGetIMCCLockCount(imcc);
- todo_wine ok(count == 1, "expect 1, returned %d\n", count);
+ ok(count == 1, "expect 1, returned %d\n", count);
GlobalUnlock(imcc);
count = ImmGetIMCCLockCount(imcc);
- todo_wine ok(count == 0, "expect 0, returned %d\n", count);
+ ok(count == 0, "expect 0, returned %d\n", count);
ImmDestroyIMCC(imcc);
}
@@ -775,18 +775,18 @@ static void test_ImmDestroyIMCC(void)
p = ImmDestroyIMCC(imcc);
ok(p == NULL, "Destroy a locked IMCC should success!\n");
p = ImmLockIMCC(imcc);
- todo_wine ok(p == NULL, "Lock a destroyed IMCC should fail!\n");
+ ok(p == NULL, "Lock a destroyed IMCC should fail!\n");
ret = ImmUnlockIMCC(imcc);
- todo_wine ok(ret == FALSE, "Unlock a destroyed IMCC should return FALSE!\n");
+ ok(ret == FALSE, "Unlock a destroyed IMCC should return FALSE!\n");
count = ImmGetIMCCLockCount(imcc);
- todo_wine ok(count == 0, "Get lock count of a destroyed IMCC should return 0!\n");
+ ok(count == 0, "Get lock count of a destroyed IMCC should return 0!\n");
size = ImmGetIMCCSize(imcc);
- todo_wine ok(size == 0, "Get size of a destroyed IMCC should return 0!\n");
+ ok(size == 0, "Get size of a destroyed IMCC should return 0!\n");
SetLastError(0xdeadbeef);
p = ImmDestroyIMCC(imcc);
- todo_wine ok(p != NULL, "returned NULL\n");
+ ok(p != NULL, "returned NULL\n");
ret = GetLastError();
- todo_wine ok(ret == ERROR_INVALID_HANDLE, "wrong last error %08x!\n", ret);
+ ok(ret == ERROR_INVALID_HANDLE, "wrong last error %08x!\n", ret);
}
static void test_ImmMessages(void)
More information about the wine-cvs
mailing list