summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2015-12-30 18:27:13 +0100
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2016-01-17 19:18:26 +0100
commit537f9a4ab61b9be8f4bb6a8bc0d3c9d4c47993d4 (patch)
treeb6a0b912427609917185fadc243ab83fce7f2ce9
parent3b089b439fe4c87999aac9d4ed08a6ea9b267e66 (diff)
downloadrockbox-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.cpp54
-rw-r--r--rbutil/rbutilqt/base/utils.h2
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 */
676QStringList Utils::findRunningProcess(QStringList names) 676QMap<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