diff options
-rw-r--r-- | src/serialport/qserialportinfo.h | 6 | ||||
-rw-r--r-- | src/serialport/qserialportinfo_unix.cpp | 30 |
2 files changed, 22 insertions, 14 deletions
diff --git a/src/serialport/qserialportinfo.h b/src/serialport/qserialportinfo.h index 0c7a0f1..714708d 100644 --- a/src/serialport/qserialportinfo.h +++ b/src/serialport/qserialportinfo.h @@ -82,9 +82,9 @@ public: private: QSerialPortInfo(const QSerialPortInfoPrivate &dd); - friend QList<QSerialPortInfo> availablePortsByUdev(); - friend QList<QSerialPortInfo> availablePortsBySysfs(); - friend QList<QSerialPortInfo> availablePortsByFiltersOfDevices(); + friend QList<QSerialPortInfo> availablePortsByUdev(bool &ok); + friend QList<QSerialPortInfo> availablePortsBySysfs(bool &ok); + friend QList<QSerialPortInfo> availablePortsByFiltersOfDevices(bool &ok); QScopedPointer<QSerialPortInfoPrivate, QSerialPortInfoPrivateDeleter> d_ptr; }; diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index 9637581..8bf5692 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -93,7 +93,7 @@ static QStringList filteredDeviceFilePaths() return result; } -QList<QSerialPortInfo> availablePortsByFiltersOfDevices() +QList<QSerialPortInfo> availablePortsByFiltersOfDevices(bool &ok) { QList<QSerialPortInfo> serialPortInfoList; @@ -104,15 +104,18 @@ QList<QSerialPortInfo> availablePortsByFiltersOfDevices() serialPortInfoList.append(priv); } + ok = true; return serialPortInfoList; } -QList<QSerialPortInfo> availablePortsBySysfs() +QList<QSerialPortInfo> availablePortsBySysfs(bool &ok) { QDir ttySysClassDir(QStringLiteral("/sys/class/tty")); - if (!(ttySysClassDir.exists() && ttySysClassDir.isReadable())) + if (!(ttySysClassDir.exists() && ttySysClassDir.isReadable())) { + ok = false; return QList<QSerialPortInfo>(); + } QList<QSerialPortInfo> serialPortInfoList; ttySysClassDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); @@ -206,6 +209,7 @@ QList<QSerialPortInfo> availablePortsBySysfs() serialPortInfoList.append(priv); } + ok = true; return serialPortInfoList; } @@ -282,8 +286,10 @@ QString getUdevSerialNumber(struct ::udev_device *dev) return getUdevPropertyValue(dev,"ID_SERIAL_SHORT"); } -QList<QSerialPortInfo> availablePortsByUdev() +QList<QSerialPortInfo> availablePortsByUdev(bool &ok) { + ok = false; + #ifndef LINK_LIBUDEV static bool symbolsResolved = resolveSymbols(udevLibrary()); if (!symbolsResolved) @@ -311,6 +317,8 @@ QList<QSerialPortInfo> availablePortsByUdev() udev_list_entry *dev_list_entry; udev_list_entry_foreach(dev_list_entry, devices) { + ok = true; + QScopedPointer<udev_device, ScopedPointerUdevDeviceDeleter> dev(::udev_device_new_from_syspath( udev.data(), ::udev_list_entry_get_name(dev_list_entry))); @@ -352,17 +360,17 @@ QList<QSerialPortInfo> availablePortsByUdev() QList<QSerialPortInfo> QSerialPortInfo::availablePorts() { - QList<QSerialPortInfo> serialPortInfoList = availablePortsByUdev(); + bool ok; + + QList<QSerialPortInfo> serialPortInfoList = availablePortsByUdev(ok); #ifdef Q_OS_LINUX - if (serialPortInfoList.isEmpty()) - serialPortInfoList = availablePortsBySysfs(); - else - return serialPortInfoList; + if (!ok) + serialPortInfoList = availablePortsBySysfs(ok); #endif - if (serialPortInfoList.isEmpty()) - serialPortInfoList = availablePortsByFiltersOfDevices(); + if (!ok) + serialPortInfoList = availablePortsByFiltersOfDevices(ok); return serialPortInfoList; } |