From fbf995a5c19fd2e051ad587aae1dbe04f9e562ba Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 18 Aug 2017 10:18:57 +0200 Subject: [PATCH] + fixing crash: no good idea to make char array (char*) external to other compilation unit (might be a 64-bit pointer problem or (higher probability) an order of initialization problem) found another (better) solution for that --- src/Edit.c | 12 +++--------- src/Helpers.c | 6 +++--- src/Helpers.h | 12 ++++++++++-- src/Notepad3.c | 9 ++++++--- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 454a0c074..2882689f7 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -68,8 +68,6 @@ extern int iSrcEncoding; extern int iWeakSrcEncoding; extern BOOL bAccelWordNavigation; -extern char* chExtendedWhiteSpaceChars; - int g_DOSEncoding; @@ -268,11 +266,7 @@ HWND EditCreate(HWND hwndParent) SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_END + (0 << 16)),SCI_LINEENDWRAP); SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_HOME + (SCMOD_SHIFT << 16)),SCI_VCHOMEWRAPEXTEND); SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_END + (SCMOD_SHIFT << 16)),SCI_LINEENDWRAPEXTEND); - - if (bAccelWordNavigation) - SendMessage(hwnd, SCI_SETWHITESPACECHARS, 0, (LPARAM)chExtendedWhiteSpaceChars); - else - SendMessage(hwnd, SCI_SETCHARSDEFAULT, 0, 0); + SendMessage(hwnd, SCI_SETCHARSDEFAULT, 0, 0); // Init default values for printing EditPrintInit(); @@ -2855,9 +2849,9 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend) UINT mbcp = (UINT)SendMessage(hwnd, SCI_GETCODEPAGE, 0, 0); if (lstrlen(pwszPrefix)) - WideCharToMultiByte(mbcp,0,pwszPrefix,-1,mszPrefix1,COUNTOF(mszPrefix1),NULL,NULL); + WCHAR2MBCS(mbcp, pwszPrefix, mszPrefix1, COUNTOF(mszPrefix1)); if (lstrlen(pwszAppend)) - WideCharToMultiByte(mbcp,0,pwszAppend,-1,mszAppend1,COUNTOF(mszAppend1),NULL,NULL); + WCHAR2MBCS(mbcp, pwszAppend, mszAppend1, COUNTOF(mszAppend1)); if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) { diff --git a/src/Helpers.c b/src/Helpers.c index 1f2eb0836..624d4bcc8 100644 --- a/src/Helpers.c +++ b/src/Helpers.c @@ -1608,21 +1608,21 @@ UINT GetDlgItemTextA2W(UINT uCP,HWND hDlg,int nIDDlgItem,LPSTR lpString,int nMax WCHAR wsz[1024] = L""; UINT uRet = GetDlgItemTextW(hDlg,nIDDlgItem,wsz,COUNTOF(wsz)); ZeroMemory(lpString,nMaxCount); - WCharToMBCS(uCP,wsz,lpString,nMaxCount-2); + WCHAR2MBCS(uCP,wsz,lpString,nMaxCount-2); return uRet; } UINT SetDlgItemTextA2W(UINT uCP,HWND hDlg,int nIDDlgItem,LPSTR lpString) { WCHAR wsz[1024] = L""; - MBCSToWChar(uCP,lpString,wsz,COUNTOF(wsz)); + MBCS2WCHAR(uCP,lpString,wsz,COUNTOF(wsz)); return SetDlgItemTextW(hDlg,nIDDlgItem,wsz); } LRESULT ComboBox_AddStringA2W(UINT uCP,HWND hwnd,LPCSTR lpString) { WCHAR wsz[1024] = L""; - MBCSToWChar(uCP,lpString,wsz,COUNTOF(wsz)); + MBCS2WCHAR(uCP,lpString,wsz,COUNTOF(wsz)); return SendMessageW(hwnd,CB_ADDSTRING,0,(LPARAM)wsz); } diff --git a/src/Helpers.h b/src/Helpers.h index 6b752cb37..691f60035 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -14,7 +14,14 @@ *******************************************************************************/ +#define SMALL_BUFFER 128 +#define MIDSZ_BUFFER 256 +#define LARGE_BUFFER 512 +#define HUGE_BUFFER 1024 + + #define UNUSED(expr) (void)(expr) +#define SIZEOF(ar) sizeof(ar) #define COUNTOF(ar) ARRAYSIZE(ar) //#define COUNTOF(ar) (sizeof(ar)/sizeof(ar[0])) #define CSTRLEN(s) (COUNTOF(s)-1) @@ -142,8 +149,9 @@ int FormatNumberStr(LPWSTR); BOOL SetDlgItemIntEx(HWND,int,UINT); -#define MBCSToWChar(c,a,w,i) MultiByteToWideChar(c,0,a,-1,w,i) -#define WCharToMBCS(c,w,a,i) WideCharToMultiByte(c,0,w,-1,a,i,NULL,NULL) +#define MBCS2WCHAR(c,a,w,i) MultiByteToWideChar((c),0,(a),-1,(w),(i)) +#define WCHAR2MBCS(c,w,a,i) WideCharToMultiByte((c),0,(w),-1,(a),(i),NULL,NULL) + UINT GetDlgItemTextA2W(UINT,HWND,int,LPSTR,int); UINT SetDlgItemTextA2W(UINT,HWND,int,LPSTR); diff --git a/src/Notepad3.c b/src/Notepad3.c index ba10b376b..e0984119c 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -110,7 +110,7 @@ WCHAR tchToolbarBitmap[MAX_PATH] = { L'\0' }; WCHAR tchToolbarBitmapHot[MAX_PATH] = { L'\0' }; WCHAR tchToolbarBitmapDisabled[MAX_PATH] = { L'\0' }; -char chExtendedWhiteSpaceChars[256] = { '\0' }; +char chExtendedWhiteSpaceChars[MIDSZ_BUFFER] = { '\0' }; int iPathNameFormat; BOOL fWordWrap; @@ -702,6 +702,9 @@ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int n SciCall_SetFontQuality(FontQuality[iSciFontQuality]); } + if (bAccelWordNavigation) + PostMessage(hwndEdit,SCI_SETWHITESPACECHARS,0,(LPARAM)chExtendedWhiteSpaceChars); + hAccMain = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_MAINWND)); hAccFindReplace = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCFINDREPLACE)); @@ -5906,11 +5909,11 @@ void LoadSettings() dwFileCheckInverval = IniSectionGetInt(pIniSection,L"FileCheckInverval",2000); dwAutoReloadTimeout = IniSectionGetInt(pIniSection,L"AutoReloadTimeout",2000); - WCHAR buffer[256]; + WCHAR buffer[MIDSZ_BUFFER]; const WCHAR defextwsc[] = L".,;:|/-+$%&<>(){}[]=?#'*"; IniSectionGetString(pIniSection, L"ExtendedWhiteSpaceChars", defextwsc, buffer, COUNTOF(buffer)); if (!lstrlen(buffer)) lstrcpyn(buffer, defextwsc, COUNTOF(buffer)); - WideCharToMultiByte(CP_ACP, 0, buffer, -1, chExtendedWhiteSpaceChars, COUNTOF(chExtendedWhiteSpaceChars), NULL, NULL); + WCHAR2MBCS(CP_ACP,buffer,chExtendedWhiteSpaceChars,COUNTOF(chExtendedWhiteSpaceChars)); LoadIniSection(L"Toolbar Images",pIniSection,cchIniSection);