summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/serialport/qserialportinfo_unix.cpp86
1 files changed, 38 insertions, 48 deletions
diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp
index 0529973..b4caf88 100644
--- a/src/serialport/qserialportinfo_unix.cpp
+++ b/src/serialport/qserialportinfo_unix.cpp
@@ -296,72 +296,62 @@ QList<QSerialPortInfo> availablePortsByUdev()
if (!symbolsResolved)
return QList<QSerialPortInfo>();
#endif
- QList<QSerialPortInfo> serialPortInfoList;
-
static const QString rfcommDeviceName(QStringLiteral("rfcomm"));
QScopedPointer<struct ::udev, ScopedPointerUdevDeleter> udev(::udev_new());
- if (udev) {
-
- QScopedPointer<struct ::udev_enumerate, ScopedPointerUdevEnumeratorDeleter> enumerate(::udev_enumerate_new(udev.data()));
-
- if (enumerate) {
-
- ::udev_enumerate_add_match_subsystem(enumerate.data(), "tty");
- ::udev_enumerate_scan_devices(enumerate.data());
-
- struct ::udev_list_entry *devices =
- ::udev_enumerate_get_list_entry(enumerate.data());
-
- struct ::udev_list_entry *dev_list_entry;
- udev_list_entry_foreach(dev_list_entry, devices) {
-
- QScopedPointer<struct ::udev_device, ScopedPointerUdevDeviceDeleter> dev(::udev_device_new_from_syspath(udev.data(),
- ::udev_list_entry_get_name(dev_list_entry)));
-
- if (dev) {
+ if (!udev)
+ return QList<QSerialPortInfo>();
- QSerialPortInfo serialPortInfo;
+ QScopedPointer<udev_enumerate, ScopedPointerUdevEnumeratorDeleter>
+ enumerate(::udev_enumerate_new(udev.data()));
- serialPortInfo.d_ptr->device = QString::fromLatin1(::udev_device_get_devnode(dev.data()));
- serialPortInfo.d_ptr->portName = QString::fromLatin1(::udev_device_get_sysname(dev.data()));
+ if (!enumerate)
+ return QList<QSerialPortInfo>();
- struct ::udev_device *parentdev = ::udev_device_get_parent(dev.data());
+ ::udev_enumerate_add_match_subsystem(enumerate.data(), "tty");
+ ::udev_enumerate_scan_devices(enumerate.data());
- if (parentdev) {
+ udev_list_entry *devices = ::udev_enumerate_get_list_entry(enumerate.data());
- if (checkUdevForSerial8250Driver(parentdev))
- continue;
+ QList<QSerialPortInfo> serialPortInfoList;
+ udev_list_entry *dev_list_entry;
+ udev_list_entry_foreach(dev_list_entry, devices) {
- serialPortInfo.d_ptr->description = getUdevModelName(dev.data());
- serialPortInfo.d_ptr->manufacturer = getUdevVendorName(dev.data());
- serialPortInfo.d_ptr->serialNumber = getUdevSerialNumber(dev.data());
+ QScopedPointer<udev_device, ScopedPointerUdevDeviceDeleter>
+ dev(::udev_device_new_from_syspath(
+ udev.data(), ::udev_list_entry_get_name(dev_list_entry)));
- serialPortInfo.d_ptr->vendorIdentifier = getUdevModelIdentifier(
- dev.data(), serialPortInfo.d_ptr->hasVendorIdentifier);
+ if (!dev)
+ return serialPortInfoList;
- serialPortInfo.d_ptr->productIdentifier = getUdevVendorIdentifier(
- dev.data(), serialPortInfo.d_ptr->hasProductIdentifier);
- } else {
- if (serialPortInfo.d_ptr->portName.startsWith(rfcommDeviceName)) {
- bool ok;
- int portNumber = serialPortInfo.d_ptr->portName.mid(rfcommDeviceName.length()).toInt(&ok);
+ QSerialPortInfo serialPortInfo;
- if (!ok || (portNumber < 0) || (portNumber > 255))
- continue;
- } else {
- continue;
- }
- }
+ serialPortInfo.d_ptr->device = QString::fromLatin1(::udev_device_get_devnode(dev.data()));
+ serialPortInfo.d_ptr->portName = QString::fromLatin1(::udev_device_get_sysname(dev.data()));
- serialPortInfoList.append(serialPortInfo);
- }
+ udev_device *parentdev = ::udev_device_get_parent(dev.data());
+ if (parentdev) {
+ if (checkUdevForSerial8250Driver(parentdev))
+ continue;
+ serialPortInfo.d_ptr->description = getUdevModelName(dev.data());
+ serialPortInfo.d_ptr->manufacturer = getUdevVendorName(dev.data());
+ serialPortInfo.d_ptr->serialNumber = getUdevSerialNumber(dev.data());
+ serialPortInfo.d_ptr->vendorIdentifier = getUdevModelIdentifier(dev.data(), serialPortInfo.d_ptr->hasVendorIdentifier);
+ serialPortInfo.d_ptr->productIdentifier = getUdevVendorIdentifier(dev.data(), serialPortInfo.d_ptr->hasProductIdentifier);
+ } else {
+ if (serialPortInfo.d_ptr->portName.startsWith(rfcommDeviceName)) {
+ bool ok;
+ int portNumber = serialPortInfo.d_ptr->portName.mid(rfcommDeviceName.length()).toInt(&ok);
+ if (!ok || (portNumber < 0) || (portNumber > 255))
+ continue;
+ } else {
+ continue;
}
-
}
+ serialPortInfoList.append(serialPortInfo);
}
return serialPortInfoList;