From 2a005401f4a72db6875166621e96a46b35d11fa4 Mon Sep 17 00:00:00 2001 From: kichik Date: Sat, 11 Dec 2004 16:09:23 +0000 Subject: [PATCH] use new, correct, MultiByteToWideChar and WideCharToMultiByte implementation on POSIX git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3822 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/ResourceEditor.cpp | 53 ++++++--------------------------------- 1 file changed, 7 insertions(+), 46 deletions(-) diff --git a/Source/ResourceEditor.cpp b/Source/ResourceEditor.cpp index f73cde42..c39b14ec 100644 --- a/Source/ResourceEditor.cpp +++ b/Source/ResourceEditor.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2002 Amir Szekely + Copyright (C) 2002-2004 Amir Szekely This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,10 +25,6 @@ #include #include -#ifndef _WIN32 -# include -#endif - ////////////////////////////////////////////////////////////////////// // Utilities ////////////////////////////////////////////////////////////////////// @@ -424,28 +420,12 @@ CResourceDirectory* CResourceEditor::ScanDirectory(PRESOURCE_DIRECTORY rdRoot, P if (rdToScan->Entries[i].NameString.NameIsString) { PIMAGE_RESOURCE_DIR_STRING_U rds = PIMAGE_RESOURCE_DIR_STRING_U(rdToScan->Entries[i].NameString.NameOffset + (char*)rdRoot); -#ifdef _WIN32 int mbsSize = WideCharToMultiByte(CP_ACP, 0, rds->NameString, rds->Length, 0, 0, 0, 0); szName = new char[mbsSize+1]; - WideCharToMultiByte(CP_ACP, 0, rds->NameString, rds->Length, szName, mbsSize, 0, 0); - szName[mbsSize] = 0; -#else - { - iconv_t cd = iconv_open("CP1252", "UCS-2"); - if (cd != (iconv_t) -1) - { - char *in = (char *) rds->NameString; - char *out = szName = new char[(rds->Length + 1) * sizeof(WCHAR)]; - size_t insize = rds->Length; - size_t outsize = (rds->Length + 1) * sizeof(WCHAR); - if (__iconv_adaptor(iconv, cd, &in, &insize, &out, &outsize) == (size_t) -1) - throw runtime_error("Unicode conversion failed"); - iconv_close(cd); - } - else - throw runtime_error("Unicode conversion failed"); + if (!WideCharToMultiByte(CP_ACP, 0, rds->NameString, rds->Length, szName, mbsSize, 0, 0)) { + throw runtime_error("Unicode conversion failed"); } -#endif + szName[mbsSize] = 0; } // Else, set the name to this entry's id else @@ -549,30 +529,11 @@ void CResourceEditor::WriteRsrcSec(BYTE* pbRsrcSec) { PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->NameString.NameOffset = DWORD(seeker) - DWORD(pbRsrcSec); char* szName = cRDirE->GetName(); - WORD iLen = strlen(szName); - WCHAR *szwName = new WCHAR[iLen + 1]; -#ifdef _WIN32 + WORD iLen = strlen(szName) + 1; + WCHAR *szwName = new WCHAR[iLen]; + // MultiByteToWideChar return value includes the null char, so -1 iLen = MultiByteToWideChar(CP_ACP, 0, szName, iLen, szwName, iLen) - 1; -#else - { - iconv_t cd = iconv_open("UCS-2", "CP1252"); - if (cd != (iconv_t) -1) - { - char *in = szName; - char *out = (char *) szwName; - size_t insize = iLen + 1; - size_t outsize = insize * sizeof(WCHAR); - if (__iconv_adaptor(iconv, cd, &in, &insize, &out, &outsize) == (size_t) -1) - iLen = (WORD) -1; - else - iLen = (WORD) (((int) out - (int) szwName - 2) / 2); - iconv_close(cd); - } - else - iLen = (WORD) -1; - } -#endif if (iLen == (WORD) -1) throw runtime_error("Unicode conversion failed");