Find Wireshark exe path when given .app path

Also change the default Wireshark path value to match what recent
versions of Wireshark are using

Fixes #288
This commit is contained in:
Srivats P 2020-02-14 18:47:02 +05:30
parent 3889780d79
commit 88ddb97a52
2 changed files with 27 additions and 1 deletions

View File

@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
#include <QFileDialog>
#include <QtGlobal>
#include <QXmlStreamReader>
#if defined(Q_OS_WIN32)
QString kGzipPathDefaultValue;
@ -98,6 +99,31 @@ void Preferences::on_wiresharkPathButton_clicked()
path = QFileDialog::getOpenFileName(0, "Locate Wireshark",
wiresharkPathEdit->text());
#ifdef Q_OS_MAC
// Find executable inside app bundle using Info.plist
if (!path.isEmpty() && path.endsWith(".app")) {
QFile plist(path+"/Contents/Info.plist");
plist.open(QIODevice::ReadOnly);
QXmlStreamReader xml(&plist);
while (!xml.atEnd()) {
xml.readNext();
if (xml.isStartElement()
&& (xml.name() == "key")
&& (xml.readElementText() == "CFBundleExecutable")) {
xml.readNext(); // </key>
xml.readNext(); // <string>
if (xml.isStartElement() && (xml.name() == "string"))
path = path+"/Contents/MacOs/"+xml.readElementText();
break;
}
if (xml.hasError())
qDebug("%lld:%lld Error reading Info.plist: %s",
xml.lineNumber(), xml.columnNumber(),
qPrintable(xml.errorString()));
}
}
#endif
if (!path.isEmpty())
wiresharkPathEdit->setText(path);

View File

@ -31,7 +31,7 @@ const QString kWiresharkPathDefaultValue(
"C:/Program Files/Wireshark/wireshark.exe");
#elif defined(Q_OS_MAC)
const QString kWiresharkPathDefaultValue(
"/Applications/Wireshark.app/Contents/Resources/bin/wireshark");
"/Applications/Wireshark.app/Contents/MacOS/Wireshark");
#else
const QString kWiresharkPathDefaultValue("/usr/bin/wireshark");
#endif