diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2015-12-30 18:27:13 +0100 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2016-01-17 19:18:26 +0100 |
commit | 537f9a4ab61b9be8f4bb6a8bc0d3c9d4c47993d4 (patch) | |
tree | b6a0b912427609917185fadc243ab83fce7f2ce9 | |
parent | 3b089b439fe4c87999aac9d4ed08a6ea9b267e66 (diff) | |
download | rockbox-537f9a4ab61b9be8f4bb6a8bc0d3c9d4c47993d4.tar.gz rockbox-537f9a4ab61b9be8f4bb6a8bc0d3c9d4c47993d4.zip |
Return process IDs in Utils::findRunningProcess().
Rework to return mapping between (filtered) process names and their pid values
(if running). Note that this functionality is not implemented for Linux (but as
it's mostly intended to detect Itunes currently not needed on that platform).
Change-Id: Ie348bfed46bda390f469c37635a96c75e5782616
-rw-r--r-- | rbutil/rbutilqt/base/utils.cpp | 54 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/utils.h | 2 |
2 files changed, 34 insertions, 22 deletions
diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index 6bd9e23230..f58d8c34e3 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp | |||
@@ -670,13 +670,13 @@ QStringList Utils::mountpoints(enum MountpointsFilter type) | |||
670 | 670 | ||
671 | 671 | ||
672 | /** Check if a process with a given name is running | 672 | /** Check if a process with a given name is running |
673 | * @param names list of names to check | 673 | * @param names list of names to filter on. All processes if empty list. |
674 | * @return list of detected processes. | 674 | * @return list of processname, process ID pairs. |
675 | */ | 675 | */ |
676 | QStringList Utils::findRunningProcess(QStringList names) | 676 | QMap<QString, QList<int> > Utils::findRunningProcess(QStringList names) |
677 | { | 677 | { |
678 | QStringList processlist; | 678 | QMap<QString, QList<int> > processlist; |
679 | QStringList found; | 679 | QMap<QString, QList<int> > found; |
680 | #if defined(Q_OS_WIN32) | 680 | #if defined(Q_OS_WIN32) |
681 | HANDLE hdl; | 681 | HANDLE hdl; |
682 | PROCESSENTRY32 entry; | 682 | PROCESSENTRY32 entry; |
@@ -694,14 +694,16 @@ QStringList Utils::findRunningProcess(QStringList names) | |||
694 | return found; | 694 | return found; |
695 | } | 695 | } |
696 | 696 | ||
697 | processlist.append(QString::fromWCharArray(entry.szExeFile)); | ||
698 | do { | 697 | do { |
698 | int pid = entry.th32ProcessID; // FIXME: DWORD vs int! | ||
699 | QString name = QString::fromWCharArray(entry.szExeFile); | ||
700 | if(processlist.find(name) == processlist.end()) { | ||
701 | processlist.insert(name, QList<int>()); | ||
702 | } | ||
703 | processlist[name].append(pid); | ||
699 | entry.dwSize = sizeof(PROCESSENTRY32); | 704 | entry.dwSize = sizeof(PROCESSENTRY32); |
700 | entry.szExeFile[0] = '\0'; | 705 | entry.szExeFile[0] = '\0'; |
701 | result = Process32Next(hdl, &entry); | 706 | result = Process32Next(hdl, &entry); |
702 | if(result) { | ||
703 | processlist.append(QString::fromWCharArray(entry.szExeFile)); | ||
704 | } | ||
705 | } while(result); | 707 | } while(result); |
706 | CloseHandle(hdl); | 708 | CloseHandle(hdl); |
707 | #endif | 709 | #endif |
@@ -726,28 +728,38 @@ QStringList Utils::findRunningProcess(QStringList names) | |||
726 | if(isprint(buf[i])) break; | 728 | if(isprint(buf[i])) break; |
727 | } | 729 | } |
728 | // avoid adding duplicates. | 730 | // avoid adding duplicates. |
729 | QString process = QString::fromUtf8(&buf[i]); | 731 | QString name = QString::fromUtf8(&buf[i]); |
730 | if(!processlist.contains(process)) { | 732 | if(processlist.find(name) == processlist.end()) { |
731 | processlist.append(process); | 733 | processlist.insert(name, QList<int>()); |
732 | } | 734 | } |
733 | 735 | processlist[name].append(pid); | |
734 | } | 736 | } |
735 | } | 737 | } |
736 | } while(err == noErr); | 738 | } while(err == noErr); |
737 | #endif | 739 | #endif |
738 | // check for given names in list of processes | 740 | #if defined(Q_OS_LINUX) |
739 | for(int i = 0; i < names.size(); ++i) { | 741 | // not implemented for Linux! |
742 | #endif | ||
743 | // Filter for names (unless empty) | ||
744 | if(names.size() > 0) { | ||
745 | for(int i = 0; i < names.size(); ++i) { | ||
746 | QStringList k(processlist.keys()); | ||
740 | #if defined(Q_OS_WIN32) | 747 | #if defined(Q_OS_WIN32) |
741 | // the process name might be truncated. Allow the extension to be partial. | 748 | // the process name might be truncated. Allow the extension to be partial. |
742 | int index = processlist.indexOf(QRegExp(names.at(i) + "(\\.(e(x(e?)?)?)?)?")); | 749 | int index = k.indexOf(QRegExp(names.at(i) + "(\\.(e(x(e?)?)?)?)?", |
750 | Qt::CaseInsensitive)); | ||
743 | #else | 751 | #else |
744 | int index = processlist.indexOf(names.at(i)); | 752 | int index = k.indexOf(names.at(i)); |
745 | #endif | 753 | #endif |
746 | if(index != -1) { | 754 | if(index != -1) { |
747 | found.append(processlist.at(index)); | 755 | found.insert(k[index], processlist[k[index]]); |
756 | } | ||
748 | } | 757 | } |
749 | } | 758 | } |
750 | LOG_INFO() << "Found listed processes running:" << found; | 759 | else { |
760 | found = processlist; | ||
761 | } | ||
762 | LOG_INFO() << "Looking for processes" << names << "found" << found; | ||
751 | return found; | 763 | return found; |
752 | } | 764 | } |
753 | 765 | ||
diff --git a/rbutil/rbutilqt/base/utils.h b/rbutil/rbutilqt/base/utils.h index bc45ebd857..7dfd797cbd 100644 --- a/rbutil/rbutilqt/base/utils.h +++ b/rbutil/rbutilqt/base/utils.h | |||
@@ -54,7 +54,7 @@ public: | |||
54 | static QStringList mountpoints(enum MountpointsFilter type = MountpointsAll); | 54 | static QStringList mountpoints(enum MountpointsFilter type = MountpointsAll); |
55 | static QString resolveDevicename(QString path); | 55 | static QString resolveDevicename(QString path); |
56 | static QString resolveMountPoint(QString device); | 56 | static QString resolveMountPoint(QString device); |
57 | static QStringList findRunningProcess(QStringList names); | 57 | static QMap<QString, QList<int> > findRunningProcess(QStringList names); |
58 | static bool ejectDevice(QString device); | 58 | static bool ejectDevice(QString device); |
59 | }; | 59 | }; |
60 | 60 | ||