]> sigrok.org Git - libserialport.git/commitdiff
Handle conversion of unicode names to char * on Windows.
authorMartin Ling <redacted>
Sun, 3 Nov 2013 21:22:21 +0000 (21:22 +0000)
committerUwe Hermann <redacted>
Thu, 14 Nov 2013 23:42:38 +0000 (00:42 +0100)
serialport.c

index c2f6f625ad94cef41d27895a8436ff90ca67fc51..51fcf5af070bc6bade1d0583a11e96410f43e18d 100644 (file)
@@ -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++;
        }