edit: no not use LOCAL_*() functions

Dimitrie O. Paun dpaun at rogers.com
Mon May 16 11:04:33 CDT 2005


ChangeLog
    Dimi Paun <dimi at lattica.com>
    Avoid using LOCAL_*() functions, use Local*16() instead.


Index: dlls/user/edit.c
===================================================================
RCS file: /var/cvs/wine/dlls/user/edit.c,v
retrieving revision 1.25
diff -u -p -r1.25 edit.c
--- dlls/user/edit.c	4 May 2005 09:45:33 -0000	1.25
+++ dlls/user/edit.c	16 May 2005 15:55:49 -0000
@@ -57,7 +57,6 @@
 #include "wine/winuser16.h"
 #include "wine/unicode.h"
 #include "controls.h"
-#include "local.h"
 #include "user_private.h"
 #include "wine/debug.h"
 
@@ -426,19 +425,21 @@ static LRESULT WINAPI EditWndProc_common
 {
 	EDITSTATE *es = (EDITSTATE *)GetWindowLongW( hwnd, 0 );
 	LRESULT result = 0;
+	STACK16FRAME *stack16;
+	HANDLE16 oldDS;
 
         TRACE("hwnd=%p msg=%x (%s) wparam=%x lparam=%lx\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), wParam, lParam);
 	
 	if (!es && msg != WM_NCCREATE)
 		return DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
-	else if (msg == WM_NCCREATE)
-		return EDIT_WM_NCCreate(hwnd, (LPCREATESTRUCTW)lParam, unicode);
-	else if (msg == WM_DESTROY)
-		return EDIT_WM_Destroy(es);
 
+	if (es && (msg != WM_DESTROY)) EDIT_LockBuffer(es);
+
+	/* Make sure DS points to hInstance for 16-bit apps */	
+	stack16 = (STACK16FRAME*)MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+	oldDS = stack16->ds;
+	stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
 
-	if (es) EDIT_LockBuffer(es);
-	
 	switch (msg) {
 	case EM_GETSEL16:
 		wParam = 0;
@@ -764,6 +765,15 @@ static LRESULT WINAPI EditWndProc_common
          * are these in?  vaguely alphabetical?
          */
 
+	case WM_NCCREATE:
+		result = EDIT_WM_NCCreate(hwnd, (LPCREATESTRUCTW)lParam, unicode);
+		break;
+
+	case WM_DESTROY:
+		result = EDIT_WM_Destroy(es);
+		es = NULL;
+		break;
+
 	case WM_GETDLGCODE:
 		result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS;
 		
@@ -991,6 +1001,7 @@ static LRESULT WINAPI EditWndProc_common
 
         TRACE("hwnd=%p msg=%x (%s) -- 0x%08lx\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), result);
 
+	stack16->ds = oldDS;
 	return result;
 }
 
@@ -1569,7 +1580,7 @@ static LPWSTR EDIT_GetPasswordPointer_SL
  *
  *	EDIT_LockBuffer
  *
- *	This acts as a LOCAL_Lock(), but it locks only once.  This way
+ *	This acts as a LocalLock16(), but it locks only once.  This way
  *	you can call it whenever you like, without unlocking.
  *
  *	Initially the edit control allocates a HLOCAL32 buffer 
@@ -1583,7 +1594,6 @@ static LPWSTR EDIT_GetPasswordPointer_SL
  */
 static void EDIT_LockBuffer(EDITSTATE *es)
 {
-	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 	if (!es->text) {
 	    CHAR *textA = NULL;
 	    UINT countA = 0;
@@ -1600,7 +1610,7 @@ static void EDIT_LockBuffer(EDITSTATE *e
 		else if(es->hloc16)
 		{
 		    TRACE("Synchronizing with 16-bit ANSI buffer\n");
-		    textA = LOCAL_Lock(hInstance, es->hloc16);
+		    textA = MapSL(LocalLock16(es->hloc16));
 		    countA = strlen(textA) + 1;
 		    _16bit = TRUE;
 		}
@@ -1638,7 +1648,7 @@ static void EDIT_LockBuffer(EDITSTATE *e
 	    {
 		MultiByteToWideChar(CP_ACP, 0, textA, countA, es->text, es->buffer_size + 1);
 		if(_16bit)
-		    LOCAL_Unlock(hInstance, es->hloc16);
+		    LocalUnlock16(es->hloc16);
 		else
 		    LocalUnlock(es->hloc32A);
 	    }
@@ -2282,8 +2292,6 @@ static void EDIT_SetRectNP(EDITSTATE *es
  */
 static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force)
 {
-	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
-
 	/* Edit window might be already destroyed */
 	if(!IsWindow(es->hwndSelf))
 	{
@@ -2335,23 +2343,23 @@ static void EDIT_UnlockBuffer(EDITSTATE 
 		    UINT countA_new = WideCharToMultiByte(CP_ACP, 0, es->text, countW, NULL, 0, NULL, NULL);
 		    TRACE("Synchronizing with 16-bit ANSI buffer\n");
 		    TRACE("%d WCHARs translated to %d bytes\n", countW, countA_new);
-		    countA = LOCAL_Size(hInstance, es->hloc16);
+		    countA = LocalSize16(es->hloc16);
 		    if(countA_new > countA)
 		    {
 			HLOCAL16 hloc16_new;
 			UINT alloc_size = ROUND_TO_GROW(countA_new);
 			TRACE("Resizing 16-bit ANSI buffer from %d to %d bytes\n", countA, alloc_size);
-			hloc16_new = LOCAL_ReAlloc(hInstance, es->hloc16, alloc_size, LMEM_MOVEABLE | LMEM_ZEROINIT);
+			hloc16_new = LocalReAlloc16(es->hloc16, alloc_size, LMEM_MOVEABLE | LMEM_ZEROINIT);
 			if(hloc16_new)
 			{
 			    es->hloc16 = hloc16_new;
-			    countA = LOCAL_Size(hInstance, hloc16_new);
+			    countA = LocalSize16(hloc16_new);
 			    TRACE("Real new size %d bytes\n", countA);
 			}
 			else
 			    WARN("FAILED! Will synchronize partially\n");
 		    }
-		    textA = LOCAL_Lock(hInstance, es->hloc16);
+		    textA = MapSL(LocalLock16(es->hloc16));
 		    _16bit = TRUE;
 		}
 
@@ -2359,7 +2367,7 @@ static void EDIT_UnlockBuffer(EDITSTATE 
 		{
 		    WideCharToMultiByte(CP_ACP, 0, es->text, countW, textA, countA, NULL, NULL);
 		    if(_16bit)
-			LOCAL_Unlock(hInstance, es->hloc16);
+			LocalUnlock16(es->hloc16);
 		    else
 			LocalUnlock(es->hloc32A);
 		}
@@ -2592,7 +2600,6 @@ static HLOCAL EDIT_EM_GetHandle(EDITSTAT
  */
 static HLOCAL16 EDIT_EM_GetHandle16(EDITSTATE *es)
 {
-	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 	CHAR *textA;
 	UINT countA, alloc_size;
 
@@ -2602,9 +2609,10 @@ static HLOCAL16 EDIT_EM_GetHandle16(EDIT
 	if (es->hloc16)
 		return es->hloc16;
 
-	if (!LOCAL_HeapSize(hInstance)) {
-		if (!LocalInit16(hInstance, 0,
-				GlobalSize16(hInstance))) {
+	if (!LocalHeapSize16()) {
+		HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
+
+		if (!LocalInit16(hInstance, 0, GlobalSize16(hInstance))) {
 			ERR("could not initialize local heap\n");
 			return 0;
 		}
@@ -2615,22 +2623,22 @@ static HLOCAL16 EDIT_EM_GetHandle16(EDIT
 	alloc_size = ROUND_TO_GROW(countA);
 
 	TRACE("Allocating 16-bit ANSI alias buffer\n");
-	if (!(es->hloc16 = LOCAL_Alloc(hInstance, LMEM_MOVEABLE | LMEM_ZEROINIT, alloc_size))) {
+	if (!(es->hloc16 = LocalAlloc16(LMEM_MOVEABLE | LMEM_ZEROINIT, alloc_size))) {
 		ERR("could not allocate new 16 bit buffer\n");
 		return 0;
 	}
 
-	if (!(textA = (LPSTR)LOCAL_Lock(hInstance, es->hloc16))) {
+	if (!(textA = MapSL(LocalLock16( es->hloc16)))) {
 		ERR("could not lock new 16 bit buffer\n");
-		LOCAL_Free(hInstance, es->hloc16);
+		LocalFree16(es->hloc16);
 		es->hloc16 = 0;
 		return 0;
 	}
 
 	WideCharToMultiByte(CP_ACP, 0, es->text, -1, textA, countA, NULL, NULL);
-	LOCAL_Unlock(hInstance, es->hloc16);
+	LocalUnlock16(es->hloc16);
 
-	TRACE("Returning %04X, LocalSize() = %d\n", es->hloc16, LOCAL_Size(hInstance, es->hloc16));
+	TRACE("Returning %04X, LocalSize() = %d\n", es->hloc16, LocalSize16(es->hloc16));
 	return es->hloc16;
 }
 
@@ -3324,8 +3332,6 @@ static void EDIT_EM_ScrollCaret(EDITSTAT
  */
 static void EDIT_EM_SetHandle(EDITSTATE *es, HLOCAL hloc)
 {
-	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
-
 	if (!(es->style & ES_MULTILINE))
 		return;
 
@@ -3338,7 +3344,7 @@ static void EDIT_EM_SetHandle(EDITSTATE 
 
 	if(es->hloc16)
 	{
-	    LOCAL_Free(hInstance, es->hloc16);
+	    LocalFree16(es->hloc16);
 	    es->hloc16 = (HLOCAL16)NULL;
 	}
 
@@ -3404,7 +3410,6 @@ static void EDIT_EM_SetHandle(EDITSTATE 
  */
 static void EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc)
 {
-	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 	INT countW, countA;
 	HLOCAL hloc32W_new;
 	WCHAR *textW;
@@ -3426,8 +3431,8 @@ static void EDIT_EM_SetHandle16(EDITSTAT
 	    es->hloc32A = NULL;
 	}
 
-	countA = LOCAL_Size(hInstance, hloc);
-	textA = LOCAL_Lock(hInstance, hloc);
+	countA = LocalSize16(hloc);
+	textA = MapSL(LocalLock16(hloc));
 	countW = MultiByteToWideChar(CP_ACP, 0, textA, countA, NULL, 0);
 	if(!(hloc32W_new = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, countW * sizeof(WCHAR))))
 	{
@@ -3437,7 +3442,7 @@ static void EDIT_EM_SetHandle16(EDITSTAT
 	textW = LocalLock(hloc32W_new);
 	MultiByteToWideChar(CP_ACP, 0, textA, countA, textW, countW);
 	LocalUnlock(hloc32W_new);
-	LOCAL_Unlock(hInstance, hloc);
+	LocalUnlock16(hloc);
 
 	if(es->hloc32W)
 	    LocalFree(es->hloc32W);
@@ -4006,9 +4011,8 @@ static LRESULT EDIT_WM_Destroy(EDITSTATE
 		LocalFree(es->hloc32A);
 	}
 	if (es->hloc16) {
-		HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
-		while (LOCAL_Unlock(hInstance, es->hloc16)) ;
-		LOCAL_Free(hInstance, es->hloc16);
+		while (LocalUnlock16(es->hloc16)) ;
+		LocalFree16(es->hloc16);
 	}
 
 	pc = es->first_line_def;

-- 
Dimi.



More information about the wine-patches mailing list