From 3c7a115afe0590fd6358767942340eb807f9b81d Mon Sep 17 00:00:00 2001
From: Ameer <aj662@drexel.edu>
Date: Wed, 8 Jul 2020 14:18:54 -0400
Subject: Address comments for better clarity/signed dev count

---
 src/input_common/gcadapter/gc_adapter.cpp | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

(limited to 'src/input_common/gcadapter/gc_adapter.cpp')

diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp
index f6e51705be..6d9f4d9eb0 100644
--- a/src/input_common/gcadapter/gc_adapter.cpp
+++ b/src/input_common/gcadapter/gc_adapter.cpp
@@ -215,23 +215,27 @@ void Adapter::Setup() {
     adapter_controllers_status.fill(ControllerTypes::None);
 
     // pointer to list of connected usb devices
-    libusb_device** devices;
+    libusb_device** devices{};
 
     // populate the list of devices, get the count
-    const std::size_t device_count = libusb_get_device_list(libusb_ctx, &devices);
+    const ssize_t device_count = libusb_get_device_list(libusb_ctx, &devices);
     if (device_count < 0) {
         LOG_ERROR(Input, "libusb_get_device_list failed with error: {}", device_count);
+        detect_thread_running = false; // Stop the loop constantly checking for gc adapter
+        // TODO: For hotplug+gc adapter checkbox implementation, revert this.
         return;
     }
 
-    for (std::size_t index = 0; index < device_count; ++index) {
-        if (CheckDeviceAccess(devices[index])) {
-            // GC Adapter found and accessible, registering it
-            GetGCEndpoint(devices[index]);
-            break;
+    if (devices != nullptr) {
+        for (std::size_t index = 0; index < device_count; ++index) {
+            if (CheckDeviceAccess(devices[index])) {
+                // GC Adapter found and accessible, registering it
+                GetGCEndpoint(devices[index]);
+                break;
+            }
         }
+        libusb_free_device_list(devices, 1);
     }
-    libusb_free_device_list(devices, 1);
 }
 
 bool Adapter::CheckDeviceAccess(libusb_device* device) {
@@ -288,10 +292,10 @@ bool Adapter::CheckDeviceAccess(libusb_device* device) {
 
 void Adapter::GetGCEndpoint(libusb_device* device) {
     libusb_config_descriptor* config = nullptr;
-    const int config_descriptor_error = libusb_get_config_descriptor(device, 0, &config);
-    if (config_descriptor_error) {
+    const int config_descriptor_return = libusb_get_config_descriptor(device, 0, &config);
+    if (config_descriptor_return != LIBUSB_SUCCESS) {
         LOG_ERROR(Input, "libusb_get_config_descriptor failed with error = {}",
-                  config_descriptor_error);
+                  config_descriptor_return);
         return;
     }
 
-- 
cgit v1.2.3-70-g09d2