summaryrefslogtreecommitdiffstats
path: root/src/modules/Unity/Application/proc_info.cpp
blob: 1bd0d51c95c0dead94d2adc2ebef5eebdf014ac9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * Copyright (C) 2014 Canonical, Ltd.
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
 * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "proc_info.h"

// Qt
#include <QFile>
#include <QRegularExpression>

namespace qtmir
{

ProcInfo::~ProcInfo() {
}

std::unique_ptr<ProcInfo::CommandLine> ProcInfo::commandLine(quint64 pid) {
    QFile cmdline(QString("/proc/%1/cmdline").arg(pid));
    if (!cmdline.open(QIODevice::ReadOnly | QIODevice::Text)) {
        return nullptr;
    }

    return std::unique_ptr<CommandLine>(new CommandLine{ cmdline.readLine().replace('\0', ' ') });
}
QStringList ProcInfo::CommandLine::asStringList() const {
    return QString(m_command.data()).split(' ');
}

bool ProcInfo::CommandLine::startsWith(char const* prefix) const {
    return m_command.startsWith(prefix);
}

bool ProcInfo::CommandLine::contains(char const* prefix) const {
    return m_command.contains(prefix);
}

QString ProcInfo::CommandLine::getParameter(const char* name) const {
    QString pattern = QRegularExpression::escape(name) + "(\\S+)";
    QRegularExpression regExp(pattern);
    QRegularExpressionMatch regExpMatch = regExp.match(m_command);

    if (!regExpMatch.hasMatch()) {
        return QString();
    }

    return QString(regExpMatch.captured(1));
}

} // namespace qtmir