From 25989cbf94e951f27ccf2d973e7e877d55ed96e2 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 25 Feb 2015 15:32:18 +0100 Subject: [PATCH] MimeDatabase: Avoid opening files even if already file name matches Change-Id: If669985f8ef852c31ecbaae76c533c7286e5a294 Reviewed-by: Daniel Teske Reviewed-by: Orgad Shaneh --- src/libs/utils/mimetypes/mimedatabase.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/utils/mimetypes/mimedatabase.cpp b/src/libs/utils/mimetypes/mimedatabase.cpp index 47146553512..e8d12819bc2 100644 --- a/src/libs/utils/mimetypes/mimedatabase.cpp +++ b/src/libs/utils/mimetypes/mimedatabase.cpp @@ -175,12 +175,16 @@ MimeType MimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName // Extension is unknown, or matches multiple mimetypes. // Pass 2) Match on content, if we can read the data + const bool openedByUs = !device->isOpen() && device->open(QIODevice::ReadOnly); if (device->isOpen()) { // Read 16K in one go (QIODEVICE_BUFFERSIZE in qiodevice_p.h). // This is much faster than seeking back and forth into QIODevice. const QByteArray data = device->peek(16384); + if (openedByUs) + device->close(); + int magicAccuracy = 0; MimeType candidateByData(findByData(data, &magicAccuracy)); @@ -485,7 +489,6 @@ MimeType MimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode int priority = 0; switch (mode) { case MatchDefault: - file.open(QIODevice::ReadOnly); // isOpen() will be tested by method below return d->mimeTypeForFileNameAndData(fileInfo.absoluteFilePath(), &file, &priority); case MatchExtension: locker.unlock(); @@ -655,10 +658,7 @@ MimeType MimeDatabase::mimeTypeForUrl(const QUrl &url) const MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const { int accuracy = 0; - const bool openedByUs = !device->isOpen() && device->open(QIODevice::ReadOnly); const MimeType result = d->mimeTypeForFileNameAndData(fileName, device, &accuracy); - if (openedByUs) - device->close(); return result; }