From 97b5163874da9e7a34f96ce04ef9db5edb14ae24 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Tue, 15 Jul 2014 13:40:15 -0700 Subject: [PATCH] Patch os module methods to add Unicode support on Windows --- vendor/luajit/src/lib_os.c | 17 +++++++++++++++++ vendor/luajit/unicode-os.patch | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 vendor/luajit/unicode-os.patch diff --git a/vendor/luajit/src/lib_os.c b/vendor/luajit/src/lib_os.c index f62e8c8bb..df03b4d24 100644 --- a/vendor/luajit/src/lib_os.c +++ b/vendor/luajit/src/lib_os.c @@ -29,6 +29,23 @@ /* ------------------------------------------------------------------------ */ +#if LJ_TARGET_WINDOWS +#define WIN32_LEAN_AND_MEAN +#include + +static wchar_t *widen_static(const char *narrow, int idx) +{ + __declspec(thread) static wchar_t buffer[2][MAX_PATH]; + return MultiByteToWideChar(CP_UTF8, 0, narrow, -1, buffer[idx], MAX_PATH) ? buffer[idx] : L""; +} + +#define remove(x) _wremove(widen_static(x, 0)) +#define system(x) _wsystem(widen_static(x, 0)) +#define rename(x, y) _wrename(widen_static(x, 0), widen_static(y, 1)) +#endif + +/* ------------------------------------------------------------------------ */ + #define LJLIB_MODULE_os LJLIB_CF(os_execute) diff --git a/vendor/luajit/unicode-os.patch b/vendor/luajit/unicode-os.patch new file mode 100644 index 000000000..0f505ec86 --- /dev/null +++ b/vendor/luajit/unicode-os.patch @@ -0,0 +1,28 @@ +diff --git c/vendor/luajit/src/lib_os.c w/vendor/luajit/src/lib_os.c +index f62e8c8..08eeb15 100644 +--- c/vendor/luajit/src/lib_os.c ++++ w/vendor/luajit/src/lib_os.c +@@ -29,6 +29,23 @@ + + /* ------------------------------------------------------------------------ */ + ++#if LJ_TARGET_WINDOWS ++#define WIN32_LEAN_AND_MEAN ++#include ++ ++static wchar_t *widen_static(const char *narrow, int idx) ++{ ++ __declspec(thread) static wchar_t buffer[2][MAX_PATH]; ++ return MultiByteToWideChar(CP_UTF8, 0, narrow, -1, buffer[idx], MAX_PATH) ? buffer[idx] : L""; ++} ++ ++#define remove(x) _wremove(widen_static(x, 0)) ++#define system(x) _wsystem(widen_static(x, 0)) ++#define rename(x, y) _wrename(widen_static(x, 0), widen_static(y, 1)) ++#endif ++ ++/* ------------------------------------------------------------------------ */ ++ + #define LJLIB_MODULE_os + + LJLIB_CF(os_execute)