From 8b532d9c1e91bb3e956a31b06f43b386bf7b7b68 Mon Sep 17 00:00:00 2001 From: Martin Ling Date: Sun, 3 Nov 2013 21:22:21 +0000 Subject: [PATCH] Handle conversion of unicode names to char * on Windows. --- serialport.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/serialport.c b/serialport.c index c2f6f62..51fcf5a 100644 --- a/serialport.c +++ b/serialport.c @@ -100,6 +100,8 @@ struct sp_port **sp_list_ports(void) DWORD max_value_len, max_data_size, max_data_len; DWORD value_len, data_size, data_len; DWORD type, index = 0; + char *name; + int name_len; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_QUERY_VALUE, &key) != ERROR_SUCCESS) @@ -120,9 +122,20 @@ struct sp_port **sp_list_ports(void) { data_len = data_size / sizeof(TCHAR); data[data_len] = '\0'; +#ifdef UNICODE + name_len = WideCharToMultiByte(CP_ACP, 0, data, -1, NULL, 0, NULL, NULL) +#else + name_len = data_len + 1; +#endif + if (!(name = malloc(name_len))) + goto out; +#ifdef UNICODE + WideCharToMultiByte(CP_ACP, 0, data, -1, name, name_len, NULL, NULL); +#else + strcpy(name, data); +#endif if (type == REG_SZ) - if (!(list = sp_list_append(list, - data, (data_len + 1) * sizeof(TCHAR)))) + if (!(list = sp_list_append(list, name, name_len))) goto out; index++; }