forked from qt-creator/qt-creator
Update mime database from Qt
qtbase/40dd38813cba4bc8425e846f220e358ffb0d19ac QMimeDatabase: don't stat() something that isn't a local file Change-Id: Id9af310b19649897c4bbaff0c5fb81e0f390bc20 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -507,31 +507,32 @@ MimeType MimeDatabasePrivate::mimeTypeForData(QIODevice *device)
|
||||
}
|
||||
|
||||
MimeType MimeDatabasePrivate::mimeTypeForFile(const QString &fileName,
|
||||
[[maybe_unused]] const QFileInfo *fileInfo,
|
||||
const QFileInfo &fileInfo,
|
||||
MimeDatabase::MatchMode mode)
|
||||
{
|
||||
if (false) {
|
||||
#ifdef Q_OS_UNIX
|
||||
// Cannot access statBuf.st_mode from the filesystem engine, so we have to stat again.
|
||||
// In addition we want to follow symlinks.
|
||||
const QByteArray nativeFilePath = QFile::encodeName(fileName);
|
||||
QT_STATBUF statBuffer;
|
||||
if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) {
|
||||
if (S_ISDIR(statBuffer.st_mode))
|
||||
return mimeTypeForName(directoryMimeType());
|
||||
if (S_ISCHR(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/chardevice"));
|
||||
if (S_ISBLK(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/blockdevice"));
|
||||
if (S_ISFIFO(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/fifo"));
|
||||
if (S_ISSOCK(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/socket"));
|
||||
}
|
||||
#else
|
||||
const bool isDirectory = fileInfo ? fileInfo->isDir() : QFileInfo(fileName).isDir();
|
||||
if (isDirectory)
|
||||
return mimeTypeForName(directoryMimeType());
|
||||
} else if (fileInfo.isNativePath()) {
|
||||
// Cannot access statBuf.st_mode from the filesystem engine, so we have to stat again.
|
||||
// In addition we want to follow symlinks.
|
||||
const QByteArray nativeFilePath = QFile::encodeName(fileName);
|
||||
QT_STATBUF statBuffer;
|
||||
if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) {
|
||||
if (S_ISDIR(statBuffer.st_mode))
|
||||
return mimeTypeForName(directoryMimeType());
|
||||
if (S_ISCHR(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/chardevice"));
|
||||
if (S_ISBLK(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/blockdevice"));
|
||||
if (S_ISFIFO(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/fifo"));
|
||||
if (S_ISSOCK(statBuffer.st_mode))
|
||||
return mimeTypeForName(QStringLiteral("inode/socket"));
|
||||
}
|
||||
#endif
|
||||
} else if (fileInfo.isDir()) {
|
||||
return mimeTypeForName(directoryMimeType());
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case MimeDatabase::MatchDefault:
|
||||
@@ -680,7 +681,7 @@ MimeType MimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode
|
||||
d->checkInitPhase(fileInfo.filePath());
|
||||
QMutexLocker locker(&d->mutex);
|
||||
|
||||
return d->mimeTypeForFile(fileInfo.filePath(), &fileInfo, mode);
|
||||
return d->mimeTypeForFile(fileInfo.filePath(), fileInfo, mode);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -696,7 +697,8 @@ MimeType MimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode)
|
||||
if (mode == MatchExtension) {
|
||||
return d->mimeTypeForFileExtension(fileName);
|
||||
} else {
|
||||
return d->mimeTypeForFile(fileName, nullptr, mode);
|
||||
QFileInfo fileInfo(fileName);
|
||||
return d->mimeTypeForFile(fileName, fileInfo, mode);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -64,7 +64,7 @@ public:
|
||||
MimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device);
|
||||
MimeType mimeTypeForFileExtension(const QString &fileName);
|
||||
MimeType mimeTypeForData(QIODevice *device);
|
||||
MimeType mimeTypeForFile(const QString &fileName, const QFileInfo *fileInfo, MimeDatabase::MatchMode mode);
|
||||
MimeType mimeTypeForFile(const QString &fileName, const QFileInfo &fileInfo, MimeDatabase::MatchMode mode);
|
||||
MimeType findByData(const QByteArray &data, int *priorityPtr);
|
||||
QStringList mimeTypeForFileName(const QString &fileName);
|
||||
MimeGlobMatchResult findByFileName(const QString &fileName);
|
||||
|
Reference in New Issue
Block a user