diff --git a/src/MuiLanguage.c b/src/MuiLanguage.c index 944b8827f..e2a22cac7 100644 --- a/src/MuiLanguage.c +++ b/src/MuiLanguage.c @@ -445,15 +445,19 @@ int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax) // // LoadLngStringW2MB() // -static WCHAR s_tmpStringBuffer[512]; - -ptrdiff_t LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax) +int LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax) { - const int nLen = LoadStringW(Globals.hLngResContainer, uID, s_tmpStringBuffer, COUNTOF(s_tmpStringBuffer)); - if (nLen == 0) { - LoadStringW(Globals.hInstance, uID, s_tmpStringBuffer, COUNTOF(s_tmpStringBuffer)); + int len = 0; + WCHAR * const pBuffer = (WCHAR *)AllocMem(sizeof(WCHAR) * nBufferMax, HEAP_ZERO_MEMORY); + if (pBuffer) { + const int nLen = LoadStringW(Globals.hLngResContainer, uID, pBuffer, nBufferMax); + if (nLen == 0) { + LoadStringW(Globals.hInstance, uID, pBuffer, nBufferMax); + } + len = WideCharToMultiByte(Encoding_SciCP, 0, pBuffer, -1, lpBuffer, nBufferMax, NULL, NULL); + FreeMem(pBuffer); } - return WideCharToMultiByteEx(CP_UTF8, 0, s_tmpStringBuffer, -1, lpBuffer, nBufferMax, NULL, NULL); + return len; } //============================================================================= @@ -473,7 +477,7 @@ int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax) // int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...) { - WCHAR* pBuffer = AllocMem(sizeof(WCHAR) * nOutput, HEAP_ZERO_MEMORY); + WCHAR* const pBuffer = AllocMem(sizeof(WCHAR) * nOutput, HEAP_ZERO_MEMORY); if (pBuffer) { if (LoadLngStringW(uIdFormat, pBuffer, nOutput)) { StringCchVPrintfW(lpOutput, nOutput, pBuffer, (LPVOID)((PUINT_PTR)& uIdFormat + 1)); @@ -490,7 +494,7 @@ int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...) // int FormatLngStringA(LPSTR lpOutput, int nOutput, UINT uIdFormat, ...) { - CHAR* pBuffer = AllocMem(sizeof(CHAR) * nOutput, HEAP_ZERO_MEMORY); + CHAR* const pBuffer = AllocMem(sizeof(CHAR) * nOutput, HEAP_ZERO_MEMORY); if (pBuffer) { if (LoadLngStringA(uIdFormat, pBuffer, nOutput)) { StringCchVPrintfA(lpOutput, nOutput, pBuffer, (LPVOID)((PUINT_PTR)& uIdFormat + 1)); diff --git a/src/MuiLanguage.h b/src/MuiLanguage.h index c57f5219f..7d8e8b8d1 100644 --- a/src/MuiLanguage.h +++ b/src/MuiLanguage.h @@ -55,7 +55,7 @@ int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax); int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax); int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...); int FormatLngStringA(LPSTR lpOutput, int nOutput, UINT uIdFormat, ...); -ptrdiff_t LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax); +int LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax); #define GetLngString(id,pb,cb) LoadLngStringW((id),(pb),(cb)) #define GetLngStringA(id,pb,cb) LoadLngStringA((id),(pb),(cb)) diff --git a/src/Notepad3.c b/src/Notepad3.c index 9efec6e32..622145ba3 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6939,18 +6939,15 @@ void HandleDWellStartEnd(const DocPos position, const UINT uid) break; } - WCHAR wchCalltipAdd[SMALL_BUFFER] = { L'\0' }; + CHAR chCalltipAdd[LARGE_BUFFER] = { L'\0' }; if (StrStrIA(chText, "file:") == chText) { - GetLngString(IDS_MUI_URL_OPEN_FILE, wchCalltipAdd, COUNTOF(wchCalltipAdd)); + GetLngStringW2MB(IDS_MUI_URL_OPEN_FILE, chCalltipAdd, COUNTOF(chCalltipAdd)); } else { - GetLngString(IDS_MUI_URL_OPEN_BROWSER, wchCalltipAdd, COUNTOF(wchCalltipAdd)); + GetLngStringW2MB(IDS_MUI_URL_OPEN_BROWSER, chCalltipAdd, COUNTOF(chCalltipAdd)); } - CHAR chAdd[LARGE_BUFFER] = { L'\0' }; - WideCharToMultiByte(Encoding_SciCP, 0, wchCalltipAdd, -1, chAdd, (int)COUNTOF(chAdd), NULL, NULL); - char chCallTip[HUGE_BUFFER] = { '\0' }; StringCchCatA(chCallTip, COUNTOF(chCallTip), chText); - StringCchCatA(chCallTip, COUNTOF(chCallTip), chAdd); + StringCchCatA(chCallTip, COUNTOF(chCallTip), chCalltipAdd); //SciCall_CallTipSetPosition(true); SciCall_CallTipShow(position, chCallTip); SciCall_CallTipSetHlt(0, (int)length);