summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-08-13 10:53:19 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-08-13 10:53:19 +0200
commit9a0cb353b8a19b186fe3c9138e058779cd53bd33 (patch)
treee8ac0cc42d63045277d5d2bd7af45c5112ec2338
parent96841349464fa38e6d0d5f79d66d4012b6ab315c (diff)
initial broken multi-platform process lister
-rwxr-xr-x[-rw-r--r--]facetracknoir/process_detector.cpp34
-rwxr-xr-x[-rw-r--r--]facetracknoir/process_detector.h17
-rwxr-xr-xopentrack-compat/process-list.hpp105
3 files changed, 106 insertions, 50 deletions
diff --git a/facetracknoir/process_detector.cpp b/facetracknoir/process_detector.cpp
index df38eb29..19611241 100644..100755
--- a/facetracknoir/process_detector.cpp
+++ b/facetracknoir/process_detector.cpp
@@ -8,6 +8,7 @@
#include "process_detector.h"
#include "facetracknoir/ui.h"
+#include "opentrack-compat/process-list.hpp"
#include <QList>
#include <QFileDialog>
#include <QComboBox>
@@ -153,36 +154,6 @@ void process_detector::remove()
ui.tableWidget->removeRow(r);
}
-#ifdef _WIN32
-
-#include <windows.h>
-#include <TlHelp32.h>
-
-static QStringList get_all_executable_names()
-{
- QStringList ret;
- HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (h == INVALID_HANDLE_VALUE)
- return ret;
-
- PROCESSENTRY32 e;
- e.dwSize = sizeof(e);
-
- if (Process32First(h, &e) != TRUE)
- {
- CloseHandle(h);
- return ret;
- }
-
- do {
- ret.append(e.szExeFile);
- } while (Process32Next(h, &e) == TRUE);
-
- CloseHandle(h);
-
- return ret;
-}
-
bool process_detector_worker::should_stop()
{
if (last_exe_name == "")
@@ -237,6 +208,3 @@ bool process_detector_worker::config_to_start(QString& str)
return false;
}
-
-
-#endif
diff --git a/facetracknoir/process_detector.h b/facetracknoir/process_detector.h
index 792a941f..f6497c90 100644..100755
--- a/facetracknoir/process_detector.h
+++ b/facetracknoir/process_detector.h
@@ -74,8 +74,6 @@ public slots:
void browse();
};
-#ifdef _WIN32
-
class process_detector_worker : QObject
{
Q_OBJECT
@@ -86,18 +84,3 @@ public:
bool should_stop();
};
-#else
-
-class process_detector_worker : QObject
-{
- Q_OBJECT
-public:
- bool config_to_start(QString&)
- {
- return false;
- }
- bool should_stop() { return false; }
-
-};
-
-#endif
diff --git a/opentrack-compat/process-list.hpp b/opentrack-compat/process-list.hpp
new file mode 100755
index 00000000..a00cbb17
--- /dev/null
+++ b/opentrack-compat/process-list.hpp
@@ -0,0 +1,105 @@
+#pragma once
+
+#include <QDebug>
+#include <QStringList>
+
+#if defined _WIN32
+
+#include <windows.h>
+#include <TlHelp32.h>
+
+template<typename = void>
+static QStringList get_all_executable_names()
+{
+ QStringList ret;
+ HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (h == INVALID_HANDLE_VALUE)
+ return ret;
+
+ PROCESSENTRY32 e;
+ e.dwSize = sizeof(e);
+
+ if (Process32First(h, &e) != TRUE)
+ {
+ CloseHandle(h);
+ return ret;
+ }
+
+ do {
+ ret.append(e.szExeFile);
+ } while (Process32Next(h, &e) == TRUE);
+
+ CloseHandle(h);
+
+ return ret;
+}
+#elif defined __APPLE__
+#include <libproc.h>
+#include <sys/param.h>
+#include <cerrno>
+#include <vector>
+
+// link to libproc
+template<typename = void>
+static QStringList get_all_executable_names()
+{
+ QStringList ret;
+ std::vector<int> vec;
+
+ while (true)
+ {
+ int numproc = proc_listpids(PROC_ALL_PIDS, 0, nullptr, 0);
+ if (numproc == -1)
+ {
+ qDebug() << "numproc failed" << errno;
+ break;
+ }
+ vec.resize(numproc);
+ int cnt = proc_listpids(PROC_ALL_PIDS, 0, &vec[0], sizeof(int) * numproc);
+ if (cnt <= numproc)
+ {
+ char name[2 * 2 * MAXCOMLEN + 1];
+ for (int i = 0; i < cnt; i++)
+ {
+ int ret = proc_name(vec[i], name, sizeof(name)-1);
+ if (ret <= 0)
+ continue;
+ name[ret] = '\0';
+ ret.append(name);
+ }
+ return ret;
+ }
+ }
+}
+
+#elif defined __linux
+
+// link to procps
+#include <proc/readproc.h>
+#include <cerrno>
+template<typename = void>
+static QStringList get_all_executable_names()
+{
+ QStringList ret;
+ proc_t** procs = readproctab(PROC_FILLCOM);
+ if (procs == nullptr)
+ {
+ qDebug() << "readproctab" << errno;
+ return ret;
+ }
+ for (int i = 0; procs[i]; i++)
+ {
+ auto& proc = *procs[i];
+ ret.append(proc.cmd);
+ }
+ freeproctab(procs);
+ return ret;
+}
+
+#else
+template<typename = void>
+static QStringList get_all_executable_names()
+{
+ return QStringList();
+}
+#endif