Lift length-limit on text-edits in WB generic popup
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 2 May 2011 22:24:10 +0000 (00:24 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Wed, 4 May 2011 18:43:04 +0000 (20:43 +0200)
winboard/wsettings.c

index 86a9417..e3ddead 100644 (file)
@@ -326,8 +326,8 @@ GetOptionValues(HWND hDlg, ChessProgramState *cps, Option *optionList)
 // read out all controls, and if value is altered, remember it and send it to the engine\r
 {\r
     HANDLE hwndCombo;\r
 // read out all controls, and if value is altered, remember it and send it to the engine\r
 {\r
     HANDLE hwndCombo;\r
-    int i, k, new=0, changed=0;\r
-    char **choices, newText[MSG_SIZ], buf[MSG_SIZ];\r
+    int i, k, new=0, changed=0, len;\r
+    char **choices, newText[MSG_SIZ], buf[MSG_SIZ], *text;\r
     BOOL success;\r
 \r
     for(i=0; i<layout; i++) {\r
     BOOL success;\r
 \r
     for(i=0; i<layout; i++) {\r
@@ -346,11 +346,15 @@ GetOptionValues(HWND hDlg, ChessProgramState *cps, Option *optionList)
            case TextBox:\r
            case FileName:\r
            case PathName:\r
            case TextBox:\r
            case FileName:\r
            case PathName:\r
-               success = GetDlgItemText( hDlg, 2001+2*i, newText, MSG_SIZ - strlen(optionList[j].name) - 9 );\r
+               if(cps) len = MSG_SIZ - strlen(optionList[j].name) - 9, text = newText;\r
+               else    len = GetWindowTextLength(GetDlgItem(hDlg, 2001+2*i)) + 1, text = (char*) malloc(len);\r
+               success = GetDlgItemText( hDlg, 2001+2*i, text, len );\r
                if(!success) break;\r
                if(!cps) {\r
                if(!success) break;\r
                if(!cps) {\r
+                   char *p;\r
                    if(*(char**)optionList[j].target) free(*(char**)optionList[j].target);\r
                    if(*(char**)optionList[j].target) free(*(char**)optionList[j].target);\r
-                   *(char**)optionList[j].target = strdup(newText);\r
+                   *(char**)optionList[j].target = p = text;\r
+                   while(*p++ = *text++) if(p[-1] == '\r') p--; // crush CR\r
                    break;\r
                }\r
                changed = strcmp(optionList[j].textValue, newText) != 0;\r
                    break;\r
                }\r
                changed = strcmp(optionList[j].textValue, newText) != 0;\r