readline.c: fix 8b2e925c

This commit is contained in:
Thomas Bernard 2020-04-13 01:42:45 +02:00
parent 2c9b79a6af
commit 00323b1942
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C
3 changed files with 18 additions and 9 deletions

View File

@ -311,6 +311,22 @@ char * Unicode_to_utf8(const word * str, size_t * utf8len)
return utf8; return utf8;
} }
} }
/**
* UTF8 to Unicode (16bits per character).
* use MultiByteToWideChar(CP_UTF8, ...) under WIN32.
* Note : For UTF-8, dwFlags must be set to either 0 or MB_ERR_INVALID_CHARS.
*/
void Unicode_from_utf8(const char * utf8, word * unicode, size_t unicodelen)
{
int r = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, (LPWSTR)unicode, unicodelen);
if (r == 0)
{
GFX2_Log(GFX2_ERROR, "MultiByteToWideChar(CP_UTF8, \"%s\", ...) failed with error #%u\n", utf8, GetLastError());
unicode[0] = 0;
}
}
#endif #endif
/** /**

View File

@ -56,6 +56,7 @@ unsigned long Memory_free(void);
#if defined(WIN32) #if defined(WIN32)
char * Unicode_to_utf8(const word * str, size_t * utf8len); char * Unicode_to_utf8(const word * str, size_t * utf8len);
void Unicode_from_utf8(const char * utf8, word * unicode, size_t unicodelen);
void GFX2_GetShortPathName(char * shortname, size_t shortname_len, const word * longname); void GFX2_GetShortPathName(char * shortname, size_t shortname_len, const word * longname);
#endif #endif

View File

@ -709,15 +709,7 @@ byte Readline_ex_unicode(word x_pos, word y_pos, char * str, word * str_unicode,
unicode_text[0] = 0; unicode_text[0] = 0;
} }
#elif defined(WIN32) #elif defined(WIN32)
// use MultiByteToWideChar(CP_UTF8, ...) under WIN32 Unicode_from_utf8(Key_Text, unicode_text, sizeof(unicode_text)/sizeof(word));
// Note : For UTF-8, dwFlags must be set to either 0 or
// MB_ERR_INVALID_CHARS.
i = MultiByteToWideChar(CP_UTF8, 0, Key_Text, -1, (LPWSTR)unicode_text, sizeof(unicode_text)/sizeof(word));
if (i == 0)
{
GFX2_Log(GFX2_ERROR, "MultiByteToWideChar(CP_UTF8, \"%s\", ...) failed with error #%u\n", Key_Text, GetLastError());
unicode_text[0] = 0;
}
#else #else
int j; int j;
for (i = 0, j = 0; i < (int)sizeof(Key_Text) && j < (int)sizeof(unicode_text) && Key_Text[i] != '\0'; i++) for (i = 0, j = 0; i < (int)sizeof(Key_Text) && j < (int)sizeof(unicode_text) && Key_Text[i] != '\0'; i++)