From 4699619746190adb56cfc4fa5f521ec8f084ed69 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Mon, 16 Jan 2023 21:03:19 +0200 Subject: [PATCH] Fix few QFileInfo and QDir calls Return the file engine impl of QFileInfo::completeBaseName() and QDir::absolutePath() and QFileInfo::fileName() (based on QAbstractFileEngine::BaseName) if the file engine impl is valid. Amends f77668ffec48d8aaad7c74069c6f3e770a305ae1. Task-number: QTBUG-98974 Change-Id: I28a8c75a6f25e30012b0791c12dbde51bfe8f62c Reviewed-by: Qt CI Bot Reviewed-by: Thiago Macieira (cherry picked from commit 249d613a60aa6a1347ebc1c29902049247b93324) Reviewed-by: Volker Hilsheimer --- src/corelib/io/qdir.cpp | 8 ++++++-- src/corelib/io/qfileinfo.cpp | 9 +++++++-- tests/manual/android_content_uri/tst_content_uris.cpp | 4 +--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index f12aeded3d4..08a288ddf2b 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -659,8 +659,12 @@ QString QDir::path() const QString QDir::absolutePath() const { const QDirPrivate* d = d_ptr.constData(); - d->resolveAbsoluteEntry(); - return d->absoluteDirEntry.filePath(); + if (!d->fileEngine) { + d->resolveAbsoluteEntry(); + return d->absoluteDirEntry.filePath(); + } + + return d->fileEngine->fileName(QAbstractFileEngine::AbsoluteName); } /*! diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index fe64ee1cf15..66573f79204 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -781,7 +781,9 @@ QString QFileInfo::fileName() const Q_D(const QFileInfo); if (d->isDefaultConstructed) return QLatin1String(""); - return d->fileEntry.fileName(); + if (!d->fileEngine) + return d->fileEntry.fileName(); + return d->fileEngine->fileName(QAbstractFileEngine::BaseName); } /*! @@ -846,7 +848,10 @@ QString QFileInfo::completeBaseName() const Q_D(const QFileInfo); if (d->isDefaultConstructed) return QLatin1String(""); - return d->fileEntry.completeBaseName(); + if (!d->fileEngine) + return d->fileEntry.completeBaseName(); + const QString fileEngineBaseName = d->fileEngine->fileName(QAbstractFileEngine::BaseName); + return QFileSystemEntry(fileEngineBaseName).completeBaseName(); } /*! diff --git a/tests/manual/android_content_uri/tst_content_uris.cpp b/tests/manual/android_content_uri/tst_content_uris.cpp index 0ececb7ce2b..20b736c3cb3 100644 --- a/tests/manual/android_content_uri/tst_content_uris.cpp +++ b/tests/manual/android_content_uri/tst_content_uris.cpp @@ -51,7 +51,6 @@ void tst_ContentUris::dirFacilities() const QDir subDir = dirList.first(); QVERIFY(subDir.dirName() == QLatin1String("Sub")); - QEXPECT_FAIL("", "absolutePath() is returning wrong path, cutting from 'primary' onward", Continue); qWarning() << "subDir.absolutePath()" << subDir.absolutePath() << dirList.first(); QVERIFY(subDir.absolutePath() == dirList.first()); QVERIFY(subDir.path() == dirList.first()); @@ -65,7 +64,6 @@ void tst_ContentUris::dirFacilities() QVERIFY(listFiles(dir, QDirIterator::Subdirectories).size() == 3); QVERIFY(dir.mkpath(QLatin1String("Sub/Sub2/Sub3"))); // Create an existing dir hierarchy QVERIFY(dir.rmdir(QLatin1String("Sub"))); - } void tst_ContentUris::readWriteFile() @@ -81,7 +79,7 @@ void tst_ContentUris::readWriteFile() QVERIFY(file.exists()); QVERIFY(file.size() == 0); QVERIFY(file.fileName() == url); - QVERIFY(QFileInfo(url).baseName() == fileName); + QVERIFY(QFileInfo(url).completeBaseName() == fileName); QVERIFY(file.open(QFile::WriteOnly)); QVERIFY(file.isOpen());