Revert "SkinInstaller: Fix issues with paths containing Unicode characters"

This reverts commit 05c6ce1ce7.
This commit is contained in:
jsmorley 2013-04-21 10:08:26 -04:00
parent 685eccfa9f
commit c834e59bcd
6 changed files with 46 additions and 23 deletions

View File

@ -293,3 +293,37 @@ OSPLATFORM GetOSPlatform()
return OSPLATFORM_UNKNOWN; return OSPLATFORM_UNKNOWN;
} }
std::string ConvertToAscii(LPCTSTR str)
{
std::string szAscii;
if (str && *str)
{
int strLen = (int)wcslen(str);
int bufLen = WideCharToMultiByte(CP_ACP, 0, str, strLen, NULL, 0, NULL, NULL);
if (bufLen > 0)
{
szAscii.resize(bufLen);
WideCharToMultiByte(CP_ACP, 0, str, strLen, &szAscii[0], bufLen, NULL, NULL);
}
}
return szAscii;
}
std::wstring ConvertToWide(LPCSTR str)
{
std::wstring szWide;
if (str && *str)
{
int strLen = (int)strlen(str);
int bufLen = MultiByteToWideChar(CP_ACP, 0, str, strLen, NULL, 0);
if (bufLen > 0)
{
szWide.resize(bufLen);
MultiByteToWideChar(CP_ACP, 0, str, strLen, &szWide[0], bufLen);
}
}
return szWide;
}

View File

@ -53,5 +53,7 @@ OSPLATFORM GetOSPlatform();
bool IsRunning(const WCHAR* name, HANDLE* hMutex); bool IsRunning(const WCHAR* name, HANDLE* hMutex);
bool CopyFiles(const std::wstring& strFrom, const std::wstring& strTo, bool bMove = false); bool CopyFiles(const std::wstring& strFrom, const std::wstring& strTo, bool bMove = false);
std::string ConvertToAscii(LPCTSTR str);
std::wstring ConvertToWide(LPCSTR str);
#endif #endif

View File

@ -21,7 +21,6 @@
#include "DialogInstall.h" #include "DialogInstall.h"
#include "../Library/pcre-8.10/config.h" #include "../Library/pcre-8.10/config.h"
#include "../Library/pcre-8.10/pcre.h" #include "../Library/pcre-8.10/pcre.h"
#include "../Common/StringUtil.h"
#include "resource.h" #include "resource.h"
#include "../Version.h" #include "../Version.h"
@ -389,7 +388,7 @@ bool CDialogInstall::ReadPackage()
return false; return false;
} }
m_PackageUnzFile = unzOpen(StringUtil::NarrowUTF8(fileName).c_str()); m_PackageUnzFile = unzOpen(ConvertToAscii(fileName).c_str());
if (!m_PackageUnzFile) if (!m_PackageUnzFile)
{ {
return false; return false;
@ -410,7 +409,7 @@ bool CDialogInstall::ReadPackage()
unz_file_info ufi; unz_file_info ufi;
if (unzGetCurrentFileInfo(m_PackageUnzFile, &ufi, cBuffer, MAX_PATH, NULL, 0, NULL, 0) == UNZ_OK) if (unzGetCurrentFileInfo(m_PackageUnzFile, &ufi, cBuffer, MAX_PATH, NULL, 0, NULL, 0) == UNZ_OK)
{ {
MultiByteToWideChar(CP_UTF8, 0, cBuffer, strlen(cBuffer) + 1, buffer, MAX_PATH); MultiByteToWideChar(CP_ACP, 0, cBuffer, strlen(cBuffer) + 1, buffer, MAX_PATH);
while (WCHAR* pos = wcschr(buffer, L'/')) *pos = L'\\'; while (WCHAR* pos = wcschr(buffer, L'/')) *pos = L'\\';
return true; return true;
} }
@ -718,7 +717,7 @@ bool CDialogInstall::InstallPackage()
unz_file_info ufi; unz_file_info ufi;
if (unzGetCurrentFileInfo(m_PackageUnzFile, &ufi, cBuffer, MAX_PATH, NULL, 0, NULL, 0) == UNZ_OK) if (unzGetCurrentFileInfo(m_PackageUnzFile, &ufi, cBuffer, MAX_PATH, NULL, 0, NULL, 0) == UNZ_OK)
{ {
MultiByteToWideChar(CP_UTF8, 0, cBuffer, strlen(cBuffer) + 1, buffer, MAX_PATH); MultiByteToWideChar(CP_ACP, 0, cBuffer, strlen(cBuffer) + 1, buffer, MAX_PATH);
while (WCHAR* pos = wcschr(buffer, L'/')) *pos = L'\\'; while (WCHAR* pos = wcschr(buffer, L'/')) *pos = L'\\';
return true; return true;
} }

View File

@ -20,7 +20,6 @@
#include "Application.h" #include "Application.h"
#include "DialogPackage.h" #include "DialogPackage.h"
#include "DialogInstall.h" #include "DialogInstall.h"
#include "../Common/StringUtil.h"
#include "resource.h" #include "resource.h"
#include "../Version.h" #include "../Version.h"
@ -265,7 +264,7 @@ bool CDialogPackage::CreatePackage()
WritePrivateProfileString(L"rmskin", L"MinimumWindows", m_MinimumWindows.c_str(), tempFile); WritePrivateProfileString(L"rmskin", L"MinimumWindows", m_MinimumWindows.c_str(), tempFile);
// Create archive and add options file and header bitmap // Create archive and add options file and header bitmap
m_ZipFile = zipOpen(StringUtil::NarrowUTF8(m_TargetFile).c_str(), APPEND_STATUS_CREATE); m_ZipFile = zipOpen(ConvertToAscii(m_TargetFile.c_str()).c_str(), APPEND_STATUS_CREATE);
auto cleanup = [&]()->bool auto cleanup = [&]()->bool
{ {
@ -380,16 +379,16 @@ unsigned __stdcall CDialogPackage::PackagerThreadProc(void* pParam)
bool CDialogPackage::AddFileToPackage(const WCHAR* filePath, const WCHAR* zipPath) bool CDialogPackage::AddFileToPackage(const WCHAR* filePath, const WCHAR* zipPath)
{ {
std::string zipPathUTF8 = StringUtil::NarrowUTF8(zipPath); std::string zipPathAscii = ConvertToAscii(zipPath);
for (int i = 0, isize = zipPathUTF8.length(); i < isize; ++i) for (int i = 0, isize = zipPathAscii.length(); i < isize; ++i)
{ {
if (zipPathUTF8[i] == '\\') if (zipPathAscii[i] == '\\')
{ {
zipPathUTF8[i] = '/'; zipPathAscii[i] = '/';
} }
} }
int open = zipOpenNewFileInZip(m_ZipFile, zipPathUTF8.c_str(), NULL, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION); int open = zipOpenNewFileInZip(m_ZipFile, zipPathAscii.c_str(), NULL, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION);
if (open != ZIP_OK) if (open != ZIP_OK)
{ {
return false; return false;
@ -744,7 +743,7 @@ INT_PTR CALLBACK CDialogPackage::SelectPluginDlgProc(HWND hWnd, UINT uMsg, WPARA
bool x32 = LOWORD(wParam) == IDC_PACKAGESELECTPLUGIN_32BITBROWSE_BUTTON; bool x32 = LOWORD(wParam) == IDC_PACKAGESELECTPLUGIN_32BITBROWSE_BUTTON;
LOADED_IMAGE* loadedImage = ImageLoad(StringUtil::NarrowUTF8(buffer).c_str(), NULL); LOADED_IMAGE* loadedImage = ImageLoad(ConvertToAscii(buffer).c_str(), NULL);
if (loadedImage) if (loadedImage)
{ {
WORD machine = loadedImage->FileHeader->FileHeader.Machine; WORD machine = loadedImage->FileHeader->FileHeader.Machine;

View File

@ -134,7 +134,6 @@
</Manifest> </Manifest>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\Common\StringUtil.cpp" />
<ClCompile Include="..\Library\Dialog.cpp" /> <ClCompile Include="..\Library\Dialog.cpp" />
<ClCompile Include="Application.cpp" /> <ClCompile Include="Application.cpp" />
<ClCompile Include="DialogInstall.cpp" /> <ClCompile Include="DialogInstall.cpp" />
@ -171,7 +170,6 @@
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\Common\StringUtil.h" />
<ClInclude Include="..\Library\Dialog.h" /> <ClInclude Include="..\Library\Dialog.h" />
<ClInclude Include="Application.h" /> <ClInclude Include="Application.h" />
<ClInclude Include="DialogInstall.h" /> <ClInclude Include="DialogInstall.h" />

View File

@ -22,9 +22,6 @@
<Filter Include="pcre"> <Filter Include="pcre">
<UniqueIdentifier>{73cc243e-5b60-4fbc-ae48-069c6decc4ed}</UniqueIdentifier> <UniqueIdentifier>{73cc243e-5b60-4fbc-ae48-069c6decc4ed}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Common">
<UniqueIdentifier>{65d4ccc5-15bd-4268-a539-ebf090e28d5d}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Application.cpp"> <ClCompile Include="Application.cpp">
@ -90,9 +87,6 @@
<ClCompile Include="DialogPackage.cpp"> <ClCompile Include="DialogPackage.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\Common\StringUtil.cpp">
<Filter>Common</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="resource.h"> <ClInclude Include="resource.h">
@ -161,9 +155,6 @@
<ClInclude Include="DialogPackage.h"> <ClInclude Include="DialogPackage.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\Common\StringUtil.h">
<Filter>Common</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Res\SkinInstaller.ico"> <None Include="Res\SkinInstaller.ico">