aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Nätterlund <tobias.naetterlund.qnx@kdab.com>2013-04-29 15:45:00 +0200
committerTobias Nätterlund <tobias.naetterlund@kdab.com>2013-05-13 11:30:40 +0200
commit1d792a9a15d32b0fd9fa47903a00cdba3fb22281 (patch)
tree1ede02801864d565c9f894e4eb8e1d9c9e614ff6
parent3c1b5213b55a81f3e1a89e3e93867e3d56f30abe (diff)
QNX: Add support for listing processes for pure QNX devices
Change-Id: Id2d9bd6b7f5ce56ff0d7ece30bb93a69969beecf Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com> Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/qnx/qnxdeviceconfiguration.cpp55
-rw-r--r--src/plugins/qnx/qnxdeviceconfiguration.h2
2 files changed, 56 insertions, 1 deletions
diff --git a/src/plugins/qnx/qnxdeviceconfiguration.cpp b/src/plugins/qnx/qnxdeviceconfiguration.cpp
index c23ebaf226..50cc3a89cd 100644
--- a/src/plugins/qnx/qnxdeviceconfiguration.cpp
+++ b/src/plugins/qnx/qnxdeviceconfiguration.cpp
@@ -31,6 +31,11 @@
#include "qnxdeviceconfiguration.h"
+#include <projectexplorer/devicesupport/sshdeviceprocesslist.h>
+
+#include <QRegExp>
+#include <QStringList>
+
using namespace Qnx;
using namespace Qnx::Internal;
@@ -85,6 +90,51 @@ class QnxPortsGatheringMethod : public ProjectExplorer::PortsGatheringMethod
}
};
+class QnxDeviceProcessList : public ProjectExplorer::SshDeviceProcessList
+{
+public:
+ QnxDeviceProcessList(const ProjectExplorer::IDevice::ConstPtr &device, QObject *parent)
+ : SshDeviceProcessList(device, parent)
+ {
+ }
+
+private:
+ QString listProcessesCommandLine() const
+ {
+ return QLatin1String("pidin -F \"%a %A '/%n'\"");
+ }
+
+ QList<ProjectExplorer::DeviceProcess> buildProcessList(const QString &listProcessesReply) const
+ {
+ QList<ProjectExplorer::DeviceProcess> processes;
+ QStringList lines = listProcessesReply.split(QLatin1Char('\n'));
+ if (lines.isEmpty())
+ return processes;
+
+ lines.pop_front(); // drop headers
+ QRegExp re(QLatin1String("\\s*(\\d+)\\s+(.*)'(.*)'"));
+
+ foreach (const QString& line, lines) {
+ if (re.exactMatch(line)) {
+ const QStringList captures = re.capturedTexts();
+ if (captures.size() == 4) {
+ const int pid = captures[1].toInt();
+ const QString args = captures[2];
+ const QString exe = captures[3];
+ ProjectExplorer::DeviceProcess deviceProcess;
+ deviceProcess.pid = pid;
+ deviceProcess.exe = exe.trimmed();
+ deviceProcess.cmdLine = args.trimmed();
+ processes.append(deviceProcess);
+ }
+ }
+ }
+
+ qSort(processes);
+ return processes;
+ }
+};
+
QnxDeviceConfiguration::QnxDeviceConfiguration()
: RemoteLinux::LinuxDevice()
{
@@ -130,3 +180,8 @@ ProjectExplorer::PortsGatheringMethod::Ptr QnxDeviceConfiguration::portsGatherin
{
return ProjectExplorer::PortsGatheringMethod::Ptr(new QnxPortsGatheringMethod);
}
+
+ProjectExplorer::DeviceProcessList *QnxDeviceConfiguration::createProcessListModel(QObject *parent) const
+{
+ return new QnxDeviceProcessList(sharedFromThis(), parent);
+}
diff --git a/src/plugins/qnx/qnxdeviceconfiguration.h b/src/plugins/qnx/qnxdeviceconfiguration.h
index 87f97effb9..f1645d6793 100644
--- a/src/plugins/qnx/qnxdeviceconfiguration.h
+++ b/src/plugins/qnx/qnxdeviceconfiguration.h
@@ -52,7 +52,7 @@ public:
ProjectExplorer::DeviceProcessSupport::Ptr processSupport() const;
ProjectExplorer::PortsGatheringMethod::Ptr portsGatheringMethod() const;
- bool canCreateProcessModel() const { return false; } // Override LinuxDevice implementation.
+ ProjectExplorer::DeviceProcessList *createProcessListModel(QObject *parent) const;
QString displayType() const;