From 97b5163874da9e7a34f96ce04ef9db5edb14ae24 Mon Sep 17 00:00:00 2001
From: Thomas Goyne <plorkyeran@aegisub.org>
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 <windows.h>
+
+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 <windows.h>
++
++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)
-- 
GitLab