Skip to content

Commit

Permalink
make system.* functions support UTF8 filenames (lite-xl#1042)
Browse files Browse the repository at this point in the history
* make system.* functions support UTF8 filenames
* move utfconv.h into ifdef guard
* fix wrong null check
  • Loading branch information
takase1121 committed Nov 14, 2022
1 parent 06aafae commit 8b6b2a9
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions src/utfconv.h
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 8b6b2a9

Please sign in to comment.