summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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