Skip to content

Commit cbfef87

Browse files
fix: Improve command execution using QProcess
- Updated command execution in PageInfo and DriverManager to use QStringList for better argument handling. - Enhanced error handling in PageMultiInfo when removing drivers by validating row index. - Refactored Utils to append to blacklist configuration file directly instead of using echo command. - Replaced system calls with QProcess in EnableUtils for network operations to improve reliability and error handling. Log: Refactor command execution and improve error handling across multiple files.
1 parent ad44a57 commit cbfef87

5 files changed

Lines changed: 27 additions & 19 deletions

File tree

deepin-devicemanager-server/deepin-devicecontrol/src/drivercontrol/drivermanager.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -639,8 +639,7 @@ QList<DriverManager::TDriverInfo> DriverManager::parsePrinterInfo(const QByteArr
639639
bool DriverManager::printerHasInstalled(const QString &packageName)
640640
{
641641
QProcess p;
642-
QString cmd = "sudo dpkg -s " + packageName;
643-
p.start(cmd);
642+
p.start("sudo", QStringList() << "dpkg" << "-s" << packageName);
644643
p.waitForFinished(-1);
645644

646645
QByteArray r = p.readAll();
@@ -655,7 +654,7 @@ bool DriverManager::printerHasInstalled(const QString &packageName)
655654
bool DriverManager::installPrinter(const QString &packageName)
656655
{
657656
QProcess p;
658-
p.start("sudo apt install " + packageName);
657+
p.start("sudo", QStringList() << "apt" << "install" << packageName);
659658
p.waitForFinished(-1);
660659

661660
return printerHasInstalled(packageName);
@@ -669,7 +668,7 @@ bool DriverManager::installPrinter(const QString &packageName)
669668
bool DriverManager::unInstallPrinter(const QString &packageName)
670669
{
671670
QProcess p;
672-
p.start("sudo dpkg -r " + packageName);
671+
p.start("sudo", QStringList() << "dpkg" << "-r" << packageName);
673672
p.waitForFinished(-1);
674673

675674
return !printerHasInstalled(packageName);

deepin-devicemanager-server/deepin-devicecontrol/src/drivercontrol/utils.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,18 +127,19 @@ bool Utils::getVersion(QString &major, QString &minor)
127127
bool Utils::addModBlackList(const QString &moduleName)
128128
{
129129
qCDebug(appLog) << "Adding module to blacklist:" << moduleName;
130-
QProcess process;
131-
process.start(QString("echo blacklist %1 >> %2").arg(moduleName).arg(BLACKLIST_CONF));
132-
if (!process.waitForFinished())
133-
return false;
134-
return true;
130+
QFile file(BLACKLIST_CONF);
131+
if (!file.open(QIODevice::Append | QIODevice::Text))
132+
return false;
133+
file.write(QString("blacklist %1\n").arg(moduleName).toUtf8());
134+
file.close();
135+
return true;
135136
}
136137

137138
bool Utils::unInstallPackage(const QString &packageName)
138139
{
139140
qCDebug(appLog) << "Uninstalling package:" << packageName;
140141
QProcess process;
141-
process.start(QString("apt remove %1").arg(packageName));
142+
process.start("apt", QStringList() << "remove" << packageName);
142143
if (!process.waitForFinished())
143144
return false;
144145
return true;

deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enableutils.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,19 @@ bool EnableUtils::ioctlOperateNetworkLogicalName(const QString &logicalName, boo
159159
QString cmd = QString("rfkill %1 $(rfkill list | grep -A 2 \"phy$(iw dev %2 info 2>/dev/null | awk '/wiphy/{print $2}')\" | awk 'NR==1{print $1}' | tr -d ':')")
160160
.arg(enable ? "unblock" : "block")
161161
.arg(logicalName);
162-
int ret = system(cmd.toStdString().c_str());
163-
if (ret != 0) {
164-
qCritical() << "Failed to block/unblock wifi: " << " error code: " << ret ;
162+
QProcess p1;
163+
p1.start("sh", QStringList() << "-c" << cmd);
164+
p1.waitForFinished(-1);
165+
if (p1.exitCode() != 0) {
166+
qCritical() << "Failed to block/unblock wifi: " << " error code: " << p1.exitCode() ;
165167
}
166-
cmd = QString("/sbin/ifconfig %1 %2").arg(logicalName).arg(enable ? "up" : "down");
167-
ret = system(cmd.toStdString().c_str());
168-
if (ret != 0) {
169-
qCritical() << "Failed to up/down network: " << logicalName << enable << " error code: " << ret ;
168+
169+
// 使用QProcess执行ifconfig
170+
QProcess ifconfigProcess;
171+
ifconfigProcess.start("/sbin/ifconfig", QStringList() << logicalName << (enable ? "up" : "down"));
172+
ifconfigProcess.waitForFinished(-1);
173+
if (ifconfigProcess.exitCode() != 0) {
174+
qCritical() << "Failed to up/down network: " << logicalName << enable << " error code: " << ifconfigProcess.exitCode();
170175
return false;
171176
}
172177
} else {

deepin-devicemanager/src/Page/PageInfo.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ bool PageInfo::packageHasInstalled(const QString &packageName)
7373
{
7474
qCDebug(appLog) << "Checking if package is installed:" << packageName;
7575
QProcess p;
76-
QString cmd = "dpkg -s " + packageName;
77-
p.start(cmd);
76+
p.start("dpkg", QStringList() << "-s" << packageName);
7877
p.waitForFinished(-1);
7978

8079
QByteArray r = p.readAll();

deepin-devicemanager/src/Page/PageMultiInfo.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ void PageMultiInfo::slotActionUpdateDriver(int row)
242242
void PageMultiInfo::slotActionRemoveDriver(int row)
243243
{
244244
qCDebug(appLog) << "Removing driver for device at row:" << row;
245+
if (row < 0 || row >= m_lstDevice.size()) {
246+
qCWarning(appLog) << "Invalid row index:" << row;
247+
return;
248+
}
245249
DeviceBaseInfo *device = m_lstDevice[row];
246250
if (nullptr == device) {
247251
qCWarning(appLog) << "Null device at row:" << row;

0 commit comments

Comments
 (0)