BizHawk/waterbox/ares64/ares/nall/windows/utf8.cpp

38 lines
1013 B
C++

#include <nall/windows/utf8.hpp>
#include <shellapi.h>
namespace nall {
NALL_HEADER_INLINE auto utf16_t::operator=(const char* s) -> utf16_t& {
reset();
if(!s) s = "";
length = MultiByteToWideChar(CP_UTF8, 0, s, -1, nullptr, 0);
buffer = new wchar_t[length + 1];
MultiByteToWideChar(CP_UTF8, 0, s, -1, buffer, length);
buffer[length] = 0;
return *this;
}
NALL_HEADER_INLINE auto utf8_t::operator=(const wchar_t* s) -> utf8_t& {
reset();
if(!s) s = L"";
length = WideCharToMultiByte(CP_UTF8, 0, s, -1, nullptr, 0, nullptr, nullptr);
buffer = new char[length + 1];
WideCharToMultiByte(CP_UTF8, 0, s, -1, buffer, length, nullptr, nullptr);
buffer[length] = 0;
return *this;
}
NALL_HEADER_INLINE auto utf8_arguments(int& argc, char**& argv) -> void {
wchar_t** wargv = CommandLineToArgvW(GetCommandLineW(), &argc);
argv = new char*[argc + 1]();
for(u32 i = 0; i < argc; i++) {
utf8_t arg(wargv[i]);
argv[i] = new char[arg.size() + 1];
strcpy(argv[i], arg);
}
}
}