]> sigrok.org Git - libserialport.git/blobdiff - windows.c
windows: Fix compile issues with multiply or not defined GUIDs.
[libserialport.git] / windows.c
index 78b6ce9babf6685bed794b17bf974e09084c829f..38ea0cedef7349260c5af7623a268393fea2f914 100644 (file)
--- a/windows.c
+++ b/windows.c
@@ -359,8 +359,10 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
                        continue;
                size = sizeof(value);
                if (RegQueryValueExA(device_key, "PortName", NULL, &type, (LPBYTE)value,
-                                    &size) != ERROR_SUCCESS || type != REG_SZ)
+                                    &size) != ERROR_SUCCESS || type != REG_SZ) {
+                       RegCloseKey(device_key);
                        continue;
+               }
                RegCloseKey(device_key);
                value[sizeof(value)-1] = 0;
                if (strcmp(value, port->name))
@@ -452,6 +454,8 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
                break;
        }
 
+       SetupDiDestroyDeviceInfoList(device_info);
+
        RETURN_OK();
 }
 
@@ -494,28 +498,30 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list)
                RegEnumValue(key, index, value, &value_len,
                        NULL, &type, (LPBYTE)data, &data_size) == ERROR_SUCCESS)
        {
-               data_len = data_size / sizeof(TCHAR);
-               data[data_len] = '\0';
+               if (type == REG_SZ) {
+                       data_len = data_size / sizeof(TCHAR);
+                       data[data_len] = '\0';
 #ifdef UNICODE
-               name_len = WideCharToMultiByte(CP_ACP, 0, data, -1, NULL, 0, NULL, NULL);
+                       name_len = WideCharToMultiByte(CP_ACP, 0, data, -1, NULL, 0, NULL, NULL);
 #else
-               name_len = data_len + 1;
+                       name_len = data_len + 1;
 #endif
-               if (!(name = malloc(name_len))) {
-                       SET_ERROR(ret, SP_ERR_MEM, "registry port name malloc failed");
-                       goto out;
-               }
+                       if (!(name = malloc(name_len))) {
+                               SET_ERROR(ret, SP_ERR_MEM, "registry port name malloc failed");
+                               goto out;
+                       }
 #ifdef UNICODE
-               WideCharToMultiByte(CP_ACP, 0, data, -1, name, name_len, NULL, NULL);
+                       WideCharToMultiByte(CP_ACP, 0, data, -1, name, name_len, NULL, NULL);
 #else
-               strcpy(name, data);
+                       strcpy(name, data);
 #endif
-               if (type == REG_SZ) {
-                       DEBUG("Found port %s", name);
+                       DEBUG_FMT("Found port %s", name);
                        if (!(*list = list_append(*list, name))) {
                                SET_ERROR(ret, SP_ERR_MEM, "list append failed");
+                               free(name);
                                goto out;
                        }
+                       free(name);
                }
                index++;
        }