LINUX.ORG.RU

[Qt] неправильно парсится строчка

 


0

0

Нужно примонтировать ISO, запустив процесс (в моем случае KDE Su, но к gksu это тоже относится, и к fuseiso).

Код:

void DVDRunner::updateMount()
{
	//Пробуем примонтировать образ в diskPath
	if (core->getSudoProg().isEmpty() || core->forceFuseiso())
	{
	mount = QString("fuseiso \"%1\" \"%2\"").arg(realDrive).arg(diskPath);
	umount = QString("fusermount -u \"%1\"").arg(diskPath);
}
	else
	{
		QString sudo = core->getSudoProg();
		QString mountString = QString ("mount -o loop \"%1\" \"%2\"").arg(realDrive).arg(diskPath);
		QString umountString = QString ("umount \"%1\"").arg(diskPath);
		if (sudo == "kdesu" && QProcessEnvironment::systemEnvironment().contains("KDE_FULL_SESSION"))
		{
			mount = QString ("kdesu -i %1 \"%2\"").arg("winegame").arg(mountString);
			umount = QString ("kdesu -i %1 \"%2\"").arg("winegame").arg(umountString);
		}
		else if (sudo == "gksu")
		{
		 QString mountMsg = tr("Enter password to mount ISO image");
		 QString umountMsg = tr("Enter password to unmount ISO image");
		 mount = QString ("gksu -m \"%1\" -D %2 \"%3\"").arg(mountMsg).arg("WineStuff").arg(mountString);
		 umount = QString ("gksu -m \"%1\" -D %2 \"%3\"").arg(umountMsg).arg("WineStuff").arg(umountString);
			  }
		else if (sudo == "xdg-su")
		{
			mount = QString ("xdg-su -c \"%1\"").arg(mountString);
			umount = QString ("xdg-su -c \"%1\"").arg(umountString);
		}
		else
		{
			//force fuseiso
			mount = QString("fuseiso \"%1\" \"%2\"").arg(realDrive).arg(diskPath);
			umount = QString("fusermount -u \"%1\"").arg(diskPath);
		}
	}
	type = Pashazz::Image;
}

Если в пути нет пробелов, то все хорошо. Если же они есть, то получается вот что: http://winegame-project.ru/webapp/attachment/ticket/8/discbug.png

Ссылка на баг

★★★★

А как собственно у вас в коде запускается процесс?

Dendy ★★★★★
()

через одну строку запаришься экранировать. Запускай через

void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite)

:

QStringList mount = QStringList() << "-i" << "winegame" << QString ("mount -o loop \"%1\" \"%2\"").arg(realDrive).arg(realPath);

...

QProcess p;
p.start("kdesudo", mount);

P.S. В KDE4 - kdesudo

alex_custov ★★★★★
()
Ответ на: комментарий от name_no

в убунте, например

Понятно, я так и думал.

«В (советской) убунте патчи не накладываются на исходники, а исходники накладываются на патчи»

Kosyak ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.