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)
{
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++;
}