Fixed evaluation of application file path
Empty arguments list could lead to crash, due to access of first element. Besides, empty application file path will be cached now universally. Change-Id: Ibe1a668da364d87d8431567dfc999cb394686081 Reviewed-by: Sérgio Martins <sergio.martins.qnx@kdab.com> Reviewed-by: Fabian Bumberger <fbumberger@rim.com> Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
This commit is contained in:
parent
4f2c96eaa8
commit
fd956af257
@ -1952,7 +1952,6 @@ QString QCoreApplication::applicationFilePath()
|
|||||||
char buff[maximum_path+1];
|
char buff[maximum_path+1];
|
||||||
if (_cmdname(buff)) {
|
if (_cmdname(buff)) {
|
||||||
d->cachedApplicationFilePath = QDir::cleanPath(QString::fromLocal8Bit(buff));
|
d->cachedApplicationFilePath = QDir::cleanPath(QString::fromLocal8Bit(buff));
|
||||||
return d->cachedApplicationFilePath;
|
|
||||||
} else {
|
} else {
|
||||||
qWarning("QCoreApplication::applicationFilePath: _cmdname() failed");
|
qWarning("QCoreApplication::applicationFilePath: _cmdname() failed");
|
||||||
// _cmdname() won't fail, but just in case, fallback to the old method
|
// _cmdname() won't fail, but just in case, fallback to the old method
|
||||||
@ -1961,11 +1960,11 @@ QString QCoreApplication::applicationFilePath()
|
|||||||
if (!executables.empty()) {
|
if (!executables.empty()) {
|
||||||
//We assume that there is only one executable in the folder
|
//We assume that there is only one executable in the folder
|
||||||
d->cachedApplicationFilePath = dir.absoluteFilePath(executables.first());
|
d->cachedApplicationFilePath = dir.absoluteFilePath(executables.first());
|
||||||
return d->cachedApplicationFilePath;
|
|
||||||
} else {
|
} else {
|
||||||
return QString();
|
d->cachedApplicationFilePath = QString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return d->cachedApplicationFilePath;
|
||||||
#elif defined(Q_OS_MAC)
|
#elif defined(Q_OS_MAC)
|
||||||
QString qAppFileName_str = qAppFileName();
|
QString qAppFileName_str = qAppFileName();
|
||||||
if(!qAppFileName_str.isEmpty()) {
|
if(!qAppFileName_str.isEmpty()) {
|
||||||
@ -1984,34 +1983,38 @@ QString QCoreApplication::applicationFilePath()
|
|||||||
return d->cachedApplicationFilePath;
|
return d->cachedApplicationFilePath;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
if (!arguments().isEmpty()) {
|
||||||
|
QString argv0 = QFile::decodeName(arguments().at(0).toLocal8Bit());
|
||||||
|
QString absPath;
|
||||||
|
|
||||||
QString argv0 = QFile::decodeName(arguments().at(0).toLocal8Bit());
|
if (!argv0.isEmpty() && argv0.at(0) == QLatin1Char('/')) {
|
||||||
QString absPath;
|
/*
|
||||||
|
If argv0 starts with a slash, it is already an absolute
|
||||||
|
file path.
|
||||||
|
*/
|
||||||
|
absPath = argv0;
|
||||||
|
} else if (argv0.contains(QLatin1Char('/'))) {
|
||||||
|
/*
|
||||||
|
If argv0 contains one or more slashes, it is a file path
|
||||||
|
relative to the current directory.
|
||||||
|
*/
|
||||||
|
absPath = QDir::current().absoluteFilePath(argv0);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
Otherwise, the file path has to be determined using the
|
||||||
|
PATH environment variable.
|
||||||
|
*/
|
||||||
|
absPath = QStandardPaths::findExecutable(argv0);
|
||||||
|
}
|
||||||
|
|
||||||
if (!argv0.isEmpty() && argv0.at(0) == QLatin1Char('/')) {
|
absPath = QDir::cleanPath(absPath);
|
||||||
/*
|
|
||||||
If argv0 starts with a slash, it is already an absolute
|
QFileInfo fi(absPath);
|
||||||
file path.
|
d->cachedApplicationFilePath = fi.exists() ? fi.canonicalFilePath() : QString();
|
||||||
*/
|
|
||||||
absPath = argv0;
|
|
||||||
} else if (argv0.contains(QLatin1Char('/'))) {
|
|
||||||
/*
|
|
||||||
If argv0 contains one or more slashes, it is a file path
|
|
||||||
relative to the current directory.
|
|
||||||
*/
|
|
||||||
absPath = QDir::current().absoluteFilePath(argv0);
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
d->cachedApplicationFilePath = QString();
|
||||||
Otherwise, the file path has to be determined using the
|
|
||||||
PATH environment variable.
|
|
||||||
*/
|
|
||||||
absPath = QStandardPaths::findExecutable(argv0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
absPath = QDir::cleanPath(absPath);
|
|
||||||
|
|
||||||
QFileInfo fi(absPath);
|
|
||||||
d->cachedApplicationFilePath = fi.exists() ? fi.canonicalFilePath() : QString();
|
|
||||||
return d->cachedApplicationFilePath;
|
return d->cachedApplicationFilePath;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user