make system.* functions support UTF8 filenames (#1042)

* make system.* functions support UTF8 filenames
* move utfconv.h into ifdef guard
* fix wrong null check
This commit is contained in:
Takase
2022-06-17 09:31:52 -04:00
committed by GitHub
parent 3dadbd3a49
commit 4e1ce07610
2 changed files with 190 additions and 27 deletions
+57
View File
@@ -0,0 +1,57 @@
#ifndef MBSEC_H
#define MBSEC_H
#ifdef _WIN32
#include <stdlib.h>
#include <windows.h>
#define UTFCONV_ERROR_INVALID_CONVERSION "Input contains invalid byte sequences."
LPWSTR utfconv_utf8towc(const char *str) {
LPWSTR output;
int len;
// len includes \0
len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
if (len == 0)
return NULL;
output = (LPWSTR) malloc(sizeof(WCHAR) * len);
if (output == NULL)
return NULL;
len = MultiByteToWideChar(CP_UTF8, 0, str, -1, output, len);
if (len == 0) {
free(output);
return NULL;
}
return output;
}
char *utfconv_wctoutf8(LPCWSTR str) {
char *output;
int len;
// len includes \0
len = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
if (len == 0)
return NULL;
output = (char *) malloc(sizeof(char) * len);
if (output == NULL)
return NULL;
len = WideCharToMultiByte(CP_UTF8, 0, str, -1, output, len, NULL, NULL);
if (len == 0) {
free(output);
return NULL;
}
return output;
}
#endif
#endif