From cd9d6c51498d44e2896daeb80bf572be66a211f8 Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Fri, 28 Feb 2014 01:29:28 +0100 Subject: [PATCH] Correctly server non-ASCII filenames on Windows Convert the filename from UTF-8 to UTF-16 and use CreateFileW() to open the file. --- lib/server.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/server.c b/lib/server.c index 7ff3350c..749cec06 100644 --- a/lib/server.c +++ b/lib/server.c @@ -487,7 +487,13 @@ LWS_VISIBLE int libwebsockets_return_http_status( #if defined(WIN32) || defined(_WIN32) static inline HANDLE lws_open_file(const char* filename, unsigned long* filelen) { - HANDLE ret = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE ret; + WCHAR buffer[MAX_PATH]; + + MultiByteToWideChar(CP_UTF8, 0, filename, -1, buffer, + sizeof(buffer) / sizeof(buffer[0])); + ret = CreateFileW(buffer, GENERIC_READ, FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (ret != LWS_INVALID_FILE) *filelen = GetFileSize(ret, NULL);