From 37181cb6192dbc9b0051ee684890000df3a7f1e9 Mon Sep 17 00:00:00 2001 From: jmarshallnz Date: Wed, 7 May 2014 11:46:52 +1200 Subject: [PATCH] Merge pull request #4592 from koying/fixlinhotplug FIX: [linux] fix & optimize input device checking --- xbmc/input/linux/LinuxInputDevices.cpp | 11 ++++++++--- xbmc/input/linux/LinuxInputDevices.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/xbmc/input/linux/LinuxInputDevices.cpp b/xbmc/input/linux/LinuxInputDevices.cpp index 4b642ae..ee21474 100644 --- a/xbmc/input/linux/LinuxInputDevices.cpp +++ b/xbmc/input/linux/LinuxInputDevices.cpp @@ -931,9 +931,9 @@ void CLinuxInputDevice::GetInfo(int fd) //printf("pref: %d\n", m_devicePreferredId); } -char* CLinuxInputDevice::GetDeviceName() +const std::string& CLinuxInputDevice::GetFileName() { - return m_deviceName; + return m_fileName; } bool CLinuxInputDevice::IsUnplugged() @@ -945,6 +945,11 @@ bool CLinuxInputDevices::CheckDevice(const char *device) { int fd; + // Does the device exists? + struct stat buffer; + if (stat(device, &buffer) != 0) + return false; + /* Check if we are able to open the device */ fd = open(device, O_RDWR); if (fd < 0) @@ -1016,7 +1021,7 @@ void CLinuxInputDevices::CheckHotplugged() for (size_t j = 0; j < m_devices.size(); j++) { - if (strcmp(m_devices[j]->GetDeviceName(),buf) == 0) + if (m_devices[j]->GetFileName().compare(buf) == 0) { ispresent = true; break; diff --git a/xbmc/input/linux/LinuxInputDevices.h b/xbmc/input/linux/LinuxInputDevices.h index c385ed7..384a83a 100644 --- a/xbmc/input/linux/LinuxInputDevices.h +++ b/xbmc/input/linux/LinuxInputDevices.h @@ -41,7 +41,7 @@ public: CLinuxInputDevice(const std::string fileName, int index); ~CLinuxInputDevice(); XBMC_Event ReadEvent(); - char* GetDeviceName(); + const std::string& GetFileName(); bool IsUnplugged(); private: -- 2.7.4