summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmeer <aj662@drexel.edu>2020-07-08 20:18:54 +0200
committerAmeer <aj662@drexel.edu>2020-07-08 20:18:54 +0200
commit3c7a115afe0590fd6358767942340eb807f9b81d (patch)
tree7954a988d1881123a939b92c5984fce2b491ccfd
parentAdd more libusb error checks (diff)
downloadyuzu-3c7a115afe0590fd6358767942340eb807f9b81d.tar
yuzu-3c7a115afe0590fd6358767942340eb807f9b81d.tar.gz
yuzu-3c7a115afe0590fd6358767942340eb807f9b81d.tar.bz2
yuzu-3c7a115afe0590fd6358767942340eb807f9b81d.tar.lz
yuzu-3c7a115afe0590fd6358767942340eb807f9b81d.tar.xz
yuzu-3c7a115afe0590fd6358767942340eb807f9b81d.tar.zst
yuzu-3c7a115afe0590fd6358767942340eb807f9b81d.zip
-rw-r--r--src/input_common/gcadapter/gc_adapter.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp
index f6e51705b..6d9f4d9eb 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;
}