[vcpkg] Use fgetws instead of fgets to accomodate non-ascii results

This commit is contained in:
Robert Schumacher 2017-08-25 23:34:44 -07:00
parent 7a2a237e13
commit 581aea74fb

View File

@ -170,24 +170,24 @@ namespace vcpkg::System
const std::wstring& actual_cmd_line = Strings::wformat(LR"###("%s 2>&1")###", cmd_line); const std::wstring& actual_cmd_line = Strings::wformat(LR"###("%s 2>&1")###", cmd_line);
Debug::println("_wpopen(%s)", Strings::to_utf8(actual_cmd_line)); Debug::println("_wpopen(%s)", Strings::to_utf8(actual_cmd_line));
std::string output; std::wstring output;
char buf[1024]; wchar_t buf[1024];
auto pipe = _wpopen(actual_cmd_line.c_str(), L"r"); auto pipe = _wpopen(actual_cmd_line.c_str(), L"r");
if (pipe == nullptr) if (pipe == nullptr)
{ {
return {1, output}; return {1, Strings::to_utf8(output)};
} }
while (fgets(buf, 1024, pipe)) while (fgetws(buf, 1024, pipe))
{ {
output.append(buf); output.append(buf);
} }
if (!feof(pipe)) if (!feof(pipe))
{ {
return {1, output}; return {1, Strings::to_utf8(output)};
} }
auto ec = _pclose(pipe); auto ec = _pclose(pipe);
Debug::println("_wpopen() returned %d", ec); Debug::println("_pclose() returned %d", ec);
return {ec, output}; return {ec, Strings::to_utf8(output)};
} }
std::wstring create_powershell_script_cmd(const fs::path& script_path, const CWStringView args) std::wstring create_powershell_script_cmd(const fs::path& script_path, const CWStringView args)