diff options
-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 | ||