From 8888759aef808c899ba98015c8794a14247e2ce6 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 15 Apr 2026 23:18:53 +0200 Subject: [PATCH 1/2] PlutoSDR: filter PlutoSDR and AD93 device description to catch also PlutoSDR clones. Fixes #2686 --- devices/plutosdr/deviceplutosdrscan.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/devices/plutosdr/deviceplutosdrscan.cpp b/devices/plutosdr/deviceplutosdrscan.cpp index 6d1f857b0..0f6f6d361 100644 --- a/devices/plutosdr/deviceplutosdrscan.cpp +++ b/devices/plutosdr/deviceplutosdrscan.cpp @@ -53,6 +53,7 @@ void DevicePlutoSDRScan::scan() m_scans.clear(); m_scans.reserve(num_contexts); + qDebug("PlutoSDRScan::scan: found %d contexts", num_contexts); for (i = 0; i < num_contexts; i++) { @@ -64,9 +65,9 @@ void DevicePlutoSDRScan::scan() } qDebug("PlutoSDRScan::scan: %d: %s [%s]", i, description, uri); - char *pch = strstr(const_cast(description), "PlutoSDR"); + const bool isPlutoDescription = strstr(description, "PlutoSDR") || strstr(description, "AD93"); - if (pch) + if (isPlutoDescription) { // As device scan is used across multiple vectors it's best to use a // managed pointer, as to keep track of when it's safe to delete. From d82c1172cdea7dce49112f4a3264274dee282761 Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 16 Apr 2026 12:00:27 +0200 Subject: [PATCH 2/2] PlutoSDR support: appply Sonar suggestion but for C++17 --- devices/plutosdr/deviceplutosdrscan.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/devices/plutosdr/deviceplutosdrscan.cpp b/devices/plutosdr/deviceplutosdrscan.cpp index 0f6f6d361..3adf58b2e 100644 --- a/devices/plutosdr/deviceplutosdrscan.cpp +++ b/devices/plutosdr/deviceplutosdrscan.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -65,7 +66,10 @@ void DevicePlutoSDRScan::scan() } qDebug("PlutoSDRScan::scan: %d: %s [%s]", i, description, uri); - const bool isPlutoDescription = strstr(description, "PlutoSDR") || strstr(description, "AD93"); + const std::string_view descriptionView = description ? std::string_view{description} : std::string_view{}; + const bool isPlutoDescription = + (descriptionView.find("PlutoSDR") != std::string_view::npos) || + (descriptionView.find("AD93") != std::string_view::npos); if (isPlutoDescription) {