Alex Villacís Lasso : user32: Fix EM_SETLIMITTEXT with zeroed args.

Alexandre Julliard julliard at winehq.org
Thu Oct 18 07:59:40 CDT 2007


Module: wine
Branch: master
Commit: 48fd106ea17bc37aed9f7d2166d329824ed2dfb3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=48fd106ea17bc37aed9f7d2166d329824ed2dfb3

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Tue Oct 16 15:25:51 2007 -0500

user32: Fix EM_SETLIMITTEXT with zeroed args.

---

 dlls/user32/edit.c |   37 +++++++++++--------------------------
 1 files changed, 11 insertions(+), 26 deletions(-)

diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index b11bf10..6ea843e 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -65,9 +65,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(edit);
 WINE_DECLARE_DEBUG_CHANNEL(combo);
 WINE_DECLARE_DEBUG_CHANNEL(relay);
 
-#define BUFLIMIT_MULTI		65534	/* maximum buffer size (not including '\0')
-					   FIXME: BTW, new specs say 65535 (do you dare ???) */
-#define BUFLIMIT_SINGLE		32766	/* maximum buffer size (not including '\0') */
+#define BUFLIMIT_INITIAL    30000   /* initial buffer size */
 #define GROWLENGTH		32	/* buffers granularity in bytes: must be power of 2 */
 #define ROUND_TO_GROW(size)	(((size) + (GROWLENGTH - 1)) & ~(GROWLENGTH - 1))
 #define HSCROLL_FRACTION	3	/* scroll window by 1/3 width */
@@ -247,7 +245,7 @@ static LRESULT	EDIT_EM_Scroll(EDITSTATE *es, INT action);
 static void	EDIT_EM_ScrollCaret(EDITSTATE *es);
 static void	EDIT_EM_SetHandle(EDITSTATE *es, HLOCAL hloc);
 static void	EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc);
-static void	EDIT_EM_SetLimitText(EDITSTATE *es, INT limit);
+static void	EDIT_EM_SetLimitText(EDITSTATE *es, UINT limit);
 static void	EDIT_EM_SetMargins(EDITSTATE *es, INT action, WORD left, WORD right, BOOL repaint);
 static void	EDIT_EM_SetPasswordChar(EDITSTATE *es, WCHAR c);
 static void	EDIT_EM_SetSel(EDITSTATE *es, UINT start, UINT end, BOOL after_wrap);
@@ -650,7 +648,7 @@ static LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg,
 
 	case EM_LIMITTEXT16:
 	case EM_SETLIMITTEXT:
-		EDIT_EM_SetLimitText(es, (INT)wParam);
+		EDIT_EM_SetLimitText(es, wParam);
 		break;
 
 	case EM_CANUNDO16:
@@ -3203,7 +3201,7 @@ static void EDIT_EM_ReplaceSel(EDITSTATE *es, BOOL can_undo, LPCWSTR lpsz_replac
 
 	/* Issue the EN_MAXTEXT notification and continue with replacing text
 	 * such that buffer limit is honored. */
-	if ((honor_limit) && (es->buffer_limit > 0) && (size > es->buffer_limit)) {
+	if ((honor_limit) && (size > es->buffer_limit)) {
 		EDIT_NOTIFY_PARENT(es, EN_MAXTEXT);
 		strl = es->buffer_limit - (tl - (e-s));
 	}
@@ -3649,27 +3647,14 @@ static void EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc)
  *
  *	EM_SETLIMITTEXT
  *
- *	FIXME: in WinNT maxsize is 0x7FFFFFFF / 0xFFFFFFFF
- *	However, the windows version is not complied to yet in all of edit.c
+ *	NOTE: this version currently implements WinNT limits
  *
- *  Additionally as the wrapper for RichEdit controls we need larger buffers
- *  at present -1 will represent nolimit
  */
-static void EDIT_EM_SetLimitText(EDITSTATE *es, INT limit)
+static void EDIT_EM_SetLimitText(EDITSTATE *es, UINT limit)
 {
-    if (limit == 0xFFFFFFFF)
-        es->buffer_limit = -1;
-    else if (es->style & ES_MULTILINE) {
-		if (limit)
-			es->buffer_limit = min(limit, BUFLIMIT_MULTI);
-		else
-			es->buffer_limit = BUFLIMIT_MULTI;
-	} else {
-		if (limit)
-			es->buffer_limit = min(limit, BUFLIMIT_SINGLE);
-		else
-			es->buffer_limit = BUFLIMIT_SINGLE;
-	}
+    if (!limit) limit = ~0u;
+    if (!(es->style & ES_MULTILINE)) limit = min(limit, 0x7ffffffe);
+    es->buffer_limit = limit;
 }
 
 
@@ -4792,7 +4777,7 @@ static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs, BOOL unicode)
                 es->style &= ~ES_UPPERCASE;
         }
 	if (es->style & ES_MULTILINE) {
-		es->buffer_limit = BUFLIMIT_MULTI;
+		es->buffer_limit = BUFLIMIT_INITIAL;
 		if (es->style & WS_VSCROLL)
 			es->style |= ES_AUTOVSCROLL;
 		if (es->style & WS_HSCROLL)
@@ -4806,7 +4791,7 @@ static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs, BOOL unicode)
 			es->style &= ~ES_AUTOHSCROLL;
 		}
 	} else {
-		es->buffer_limit = BUFLIMIT_SINGLE;
+		es->buffer_limit = BUFLIMIT_INITIAL;
 		if ((es->style & ES_RIGHT) && (es->style & ES_CENTER))
 			es->style &= ~ES_CENTER;
 		es->style &= ~WS_HSCROLL;




More information about the wine-cvs mailing list