1
0
mirror of https://github.com/Picovoice/porcupine.git synced 2022-01-28 03:27:53 +03:00

fix windows utf-8

This commit is contained in:
Eric Mikulin
2022-01-26 14:47:22 -08:00
committed by GitHub
parent dfa6438f83
commit 6103132887
2 changed files with 88 additions and 2 deletions

View File

@@ -99,7 +99,7 @@ void print_usage(const char *program_name) {
fprintf(stderr, "Usage : %s -l LIBRARY_PATH -m MODEL_PATH -k KEYWORD_PATH -t SENSITIVITY -a ACCESS_KEY -w WAV_PATH\n", program_name);
}
int main(int argc, char *argv[]) {
int picovoice_main(int argc, char *argv[]) {
const char *library_path = NULL;
const char *model_path = NULL;
const char *keyword_path = NULL;
@@ -263,3 +263,46 @@ int main(int argc, char *argv[]) {
return 0;
}
int main(int argc, char *argv[]) {
#if defined(_WIN32) || defined(_WIN64)
#define UTF8_COMPOSITION_FLAG (0)
#define NULL_TERMINATED (-1)
LPWSTR *wargv = CommandLineToArgvW(GetCommandLineW(), &argc);
if (wargv == NULL) {
fprintf(stderr, "CommandLineToArgvW failed\n");
exit(1);
}
char *utf8_argv[argc];
for (int i = 0; i < argc; ++i) {
// WideCharToMultiByte: https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-widechartomultibyte
int arg_chars_num = WideCharToMultiByte(CP_UTF8, UTF8_COMPOSITION_FLAG, wargv[i], NULL_TERMINATED, NULL, 0, NULL, NULL);
utf8_argv[i] = (char *) malloc(arg_chars_num * sizeof(char));
if (!utf8_argv[i]) {
fprintf(stderr, "failed to to allocate memory for converting args");
}
WideCharToMultiByte(CP_UTF8, UTF8_COMPOSITION_FLAG, wargv[i], NULL_TERMINATED, utf8_argv[i], arg_chars_num, NULL, NULL);
}
LocalFree(wargv);
argv = utf8_argv;
#endif
int result = picovoice_main(argc, argv);
#if defined(_WIN32) || defined(_WIN64)
for (int i = 0; i < argc; ++i) {
free(utf8_argv[i]);
}
#endif
return result;
}

View File

@@ -124,7 +124,7 @@ void show_audio_devices(void) {
pv_recorder_free_device_list(count, devices);
}
int main(int argc, char *argv[]) {
int picovoice_main(int argc, char *argv[]) {
signal(SIGINT, interrupt_handler);
const char *library_path = NULL;
@@ -285,3 +285,46 @@ int main(int argc, char *argv[]) {
return 0;
}
int main(int argc, char *argv[]) {
#if defined(_WIN32) || defined(_WIN64)
#define UTF8_COMPOSITION_FLAG (0)
#define NULL_TERMINATED (-1)
LPWSTR *wargv = CommandLineToArgvW(GetCommandLineW(), &argc);
if (wargv == NULL) {
fprintf(stderr, "CommandLineToArgvW failed\n");
exit(1);
}
char *utf8_argv[argc];
for (int i = 0; i < argc; ++i) {
// WideCharToMultiByte: https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-widechartomultibyte
int arg_chars_num = WideCharToMultiByte(CP_UTF8, UTF8_COMPOSITION_FLAG, wargv[i], NULL_TERMINATED, NULL, 0, NULL, NULL);
utf8_argv[i] = (char *) malloc(arg_chars_num * sizeof(char));
if (!utf8_argv[i]) {
fprintf(stderr, "failed to to allocate memory for converting args");
}
WideCharToMultiByte(CP_UTF8, UTF8_COMPOSITION_FLAG, wargv[i], NULL_TERMINATED, utf8_argv[i], arg_chars_num, NULL, NULL);
}
LocalFree(wargv);
argv = utf8_argv;
#endif
int result = picovoice_main(argc, argv);
#if defined(_WIN32) || defined(_WIN64)
for (int i = 0; i < argc; ++i) {
free(utf8_argv[i]);
}
#endif
return result;
}