mirror of https://github.com/mgba-emu/mgba.git
Windows: Fix passing Unicode filenames (fixes #1359)
This commit is contained in:
parent
1844c26388
commit
c364a6527a
|
@ -226,6 +226,8 @@ endif()
|
|||
if(WIN32)
|
||||
set(WIN32_VERSION "${LIB_VERSION_MAJOR},${LIB_VERSION_MINOR},${LIB_VERSION_PATCH}")
|
||||
add_definitions(-D_WIN32_WINNT=0x0600)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -municode")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -municode")
|
||||
list(APPEND OS_LIB ws2_32 shlwapi)
|
||||
list(APPEND CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/vfs-w32.c)
|
||||
file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/*.c)
|
||||
|
|
|
@ -34,12 +34,16 @@ CXX_GUARD_START
|
|||
// WinSock2 gets very angry if it's included too late
|
||||
#include <winsock2.h>
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) || defined(__cplusplus)
|
||||
#define restrict __restrict
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <Windows.h>
|
||||
#include <sys/types.h>
|
||||
typedef intptr_t ssize_t;
|
||||
#define PATH_MAX MAX_PATH
|
||||
#define restrict __restrict
|
||||
#define strcasecmp _stricmp
|
||||
#define strncasecmp _strnicmp
|
||||
#define ftruncate _chsize
|
||||
|
|
|
@ -104,3 +104,21 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
return application.exec();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <mgba-util/string.h>
|
||||
#include <vector>
|
||||
|
||||
extern "C"
|
||||
int wmain(int argc, wchar_t* argv[]) {
|
||||
std::vector<char*> argv8;
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
argv8.push_back(utf16to8(reinterpret_cast<uint16_t*>(argv[i]), wcslen(argv[i]) * 2));
|
||||
}
|
||||
int ret = main(argc, argv8.data());
|
||||
for (char* ptr : argv8) {
|
||||
free(ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -179,6 +179,24 @@ int main(int argc, char** argv) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <mgba-util/string.h>
|
||||
|
||||
int wmain(int argc, wchar_t** argv) {
|
||||
char** argv8 = malloc(sizeof(char*) * argc);
|
||||
int i;
|
||||
for (i = 0; i < argc; ++i) {
|
||||
argv8[i] = utf16to8((uint16_t*) argv[i], wcslen(argv[i]) * 2);
|
||||
}
|
||||
int ret = main(argc, argv8);
|
||||
for (i = 0; i < argc; ++i) {
|
||||
free(argv8[i]);
|
||||
}
|
||||
free(argv8);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args) {
|
||||
struct mCoreThread thread = {
|
||||
.core = renderer->core
|
||||
|
|
Loading…
Reference in New Issue