mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 01:20:42 +00:00
Add helper functions in win32 renderdoccmd for wchar <-> UTF8 conversion
This commit is contained in:
@@ -39,6 +39,31 @@ using std::string;
|
||||
using std::wstring;
|
||||
using std::vector;
|
||||
|
||||
static std::string conv(const std::wstring &str)
|
||||
{
|
||||
std::string ret;
|
||||
// worst case each char takes 4 bytes to encode
|
||||
ret.resize(str.size() * 4 + 1);
|
||||
|
||||
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, &ret[0], (int)ret.size(), NULL, NULL);
|
||||
|
||||
ret.resize(strlen(ret.c_str()));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static std::wstring conv(const std::string &str)
|
||||
{
|
||||
std::wstring ret;
|
||||
ret.resize(str.size() + 1);
|
||||
|
||||
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, &ret[0], int(ret.size() + 1));
|
||||
|
||||
ret.resize(wcslen(ret.c_str()));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
HINSTANCE hInstance = NULL;
|
||||
|
||||
#if defined(RELEASE)
|
||||
@@ -287,19 +312,7 @@ struct UpgradeCommand : public Command
|
||||
virtual bool IsCaptureCommand() { return false; }
|
||||
virtual int Execute(cmdline::parser &parser, const CaptureOptions &)
|
||||
{
|
||||
string originalpath = parser.get<string>("path");
|
||||
|
||||
wstring wide_path;
|
||||
|
||||
{
|
||||
wchar_t *conv = new wchar_t[originalpath.size() + 1];
|
||||
|
||||
MultiByteToWideChar(CP_UTF8, 0, originalpath.c_str(), -1, conv, int(originalpath.size() + 1));
|
||||
|
||||
wide_path = conv;
|
||||
|
||||
delete[] conv;
|
||||
}
|
||||
wstring wide_path = conv(parser.get<string>("path"));
|
||||
|
||||
// Wait for UI to exit
|
||||
Sleep(3000);
|
||||
@@ -657,19 +670,13 @@ struct GlobalHookCommand : public Command
|
||||
virtual bool IsCaptureCommand() { return false; }
|
||||
virtual int Execute(cmdline::parser &parser, const CaptureOptions &)
|
||||
{
|
||||
string pathmatch = parser.get<string>("match");
|
||||
wstring wpathmatch = conv(parser.get<string>("match"));
|
||||
string logfile = parser.get<string>("logfile");
|
||||
string debuglog = parser.get<string>("debuglog");
|
||||
|
||||
CaptureOptions cmdopts;
|
||||
readCapOpts(parser.get<string>("capopts").c_str(), &cmdopts);
|
||||
|
||||
size_t len = pathmatch.length();
|
||||
wstring wpathmatch;
|
||||
wpathmatch.resize(len);
|
||||
MultiByteToWideChar(CP_UTF8, 0, pathmatch.c_str(), -1, &wpathmatch[0], (int)len);
|
||||
wpathmatch.resize(wcslen(wpathmatch.c_str()));
|
||||
|
||||
// make sure the user doesn't accidentally run this with 'a' as a parameter or something.
|
||||
// "a.exe" is over 4 characters so this limit should not be a problem.
|
||||
if(wpathmatch.length() < 4)
|
||||
@@ -823,17 +830,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInstance, _In_
|
||||
|
||||
argv.resize(argc);
|
||||
for(size_t i = 0; i < argv.size(); i++)
|
||||
{
|
||||
size_t len = wcslen(wargv[i]);
|
||||
len *= 4; // worst case, every UTF-8 character takes 4 bytes
|
||||
argv[i].resize(len + 1);
|
||||
argv[i][len] = 0;
|
||||
char *cstr = (char *)&argv[i][0];
|
||||
|
||||
WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, cstr, (int)len + 1, NULL, NULL);
|
||||
|
||||
argv[i].resize(strlen(cstr));
|
||||
}
|
||||
argv[i] = conv(wstring(wargv[i]));
|
||||
|
||||
if(argv.empty())
|
||||
argv.push_back("renderdoccmd");
|
||||
|
||||
Reference in New Issue
Block a user