diff options
Diffstat (limited to 'src/share/win_utf8_io/win_utf8_io.c')
-rw-r--r-- | src/share/win_utf8_io/win_utf8_io.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/share/win_utf8_io/win_utf8_io.c b/src/share/win_utf8_io/win_utf8_io.c index bb07ccd0..bbb6a74a 100644 --- a/src/share/win_utf8_io/win_utf8_io.c +++ b/src/share/win_utf8_io/win_utf8_io.c @@ -149,6 +149,24 @@ int get_utf8_argv(int *argc, char ***argv) return ret; } +/* similar to CreateFileW but accepts UTF-8 encoded lpFileName */ +HANDLE WINAPI CreateFile_utf8(const char *lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) +{ + if (!flac_internal_get_utf8_filenames()) { + return CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + } else { + wchar_t *wname; + HANDLE handle = INVALID_HANDLE_VALUE; + + if ((wname = wchar_from_utf8(lpFileName)) != NULL) { + handle = CreateFileW(wname, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + free(wname); + } + + return handle; + } +} + /* return number of characters in the UTF-8 string */ size_t strlen_utf8(const char *str) { |