device: Ledger - fix wide char hidapi error string conversion
This commit is contained in:
parent
6b2b1d6368
commit
6e1cb5a4d0
|
@ -44,8 +44,20 @@ namespace hw {
|
|||
|
||||
static std::string safe_hid_error(hid_device *hwdev) {
|
||||
if (hwdev) {
|
||||
const char* error_str = (const char*)hid_error(hwdev);
|
||||
return std::string(error_str == nullptr ? "Unknown error" : error_str);
|
||||
const wchar_t* error_wstr = hid_error(hwdev);
|
||||
if (error_wstr == nullptr)
|
||||
{
|
||||
return "Unknown error";
|
||||
}
|
||||
std::mbstate_t state{};
|
||||
const size_t len_symbols = std::wcsrtombs(nullptr, &error_wstr, 0, &state);
|
||||
if (len_symbols == static_cast<std::size_t>(-1))
|
||||
{
|
||||
return "Failed to convert wide char error";
|
||||
}
|
||||
std::string error_str(len_symbols + 1, 0);
|
||||
std::wcsrtombs(&error_str[0], &error_wstr, error_str.size(), &state);
|
||||
return error_str;
|
||||
}
|
||||
return std::string("NULL device");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue