From 06dbc9a22bf0f75e0b3727ec798abc361829b3cc Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 16 Aug 2002 09:06:55 +0000 Subject: [PATCH] MBCS to Unicode conversion bugs fixed git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@688 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/DialogTemplate.cpp | 6 +++--- Source/ResourceEditor.cpp | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Source/DialogTemplate.cpp b/Source/DialogTemplate.cpp index c9bd257a..4a515372 100644 --- a/Source/DialogTemplate.cpp +++ b/Source/DialogTemplate.cpp @@ -52,7 +52,7 @@ void ReadVarLenArr(BYTE* &seeker, char* &readInto) { DWORD dwStrLen = WCStrLen((WCHAR*)arr); readInto = new char[dwStrLen]; WideCharToMultiByte(CP_ACP, 0, (WCHAR*)arr, dwStrLen, readInto, dwStrLen, 0, 0); - seeker += (dwStrLen)*sizeof(WORD); + seeker += (dwStrLen)*sizeof(WCHAR); } break; } @@ -68,8 +68,8 @@ void ReadVarLenArr(BYTE* &seeker, char* &readInto) { seeker += sizeof(WORD); \ } \ else { \ - MultiByteToWideChar(CP_ACP, 0, x, -1, (WCHAR*)seeker, dwSize); \ - seeker += (lstrlen(x)+1)*sizeof(WCHAR); \ + int us = MultiByteToWideChar(CP_ACP, 0, x, -1, (WCHAR*)seeker, dwSize); \ + seeker += us*sizeof(WCHAR); \ } \ else \ seeker += sizeof(WORD); diff --git a/Source/ResourceEditor.cpp b/Source/ResourceEditor.cpp index 3aa0852a..63eef7d7 100644 --- a/Source/ResourceEditor.cpp +++ b/Source/ResourceEditor.cpp @@ -445,8 +445,9 @@ void CResourceEditor::WriteRsrcSec(BYTE* pbRsrcSec) { char* szName = cRDirE->GetName(); WORD iLen = lstrlen(szName); WCHAR* szwName = new WCHAR[iLen]; - MultiByteToWideChar(CP_ACP, 0, szName, iLen, szwName, iLen); - CopyMemory(seeker, &iLen, sizeof(WORD)); + // MultiByteToWideChar return value includes the null char, so -1 + iLen = MultiByteToWideChar(CP_ACP, 0, szName, iLen, szwName, iLen) - 1; + *(WORD*)seeker = iLen; seeker += sizeof(WORD); CopyMemory(seeker, szwName, iLen*sizeof(WCHAR)); seeker += iLen*sizeof(WCHAR);