diff options
-rw-r--r-- | src/corelib/io/qurl.cpp | 22 | ||||
-rw-r--r-- | tests/auto/corelib/io/qurl/tst_qurl.cpp | 4 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 0d406c057e..ce3f21d43e 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -413,7 +413,6 @@ #include "qstringlist.h" #include "qdebug.h" #include "qhash.h" -#include "qdir.h" // for QDir::fromNativeSeparators #include "qdatastream.h" #include "private/qipaddress_p.h" #include "qurlquery.h" @@ -3296,6 +3295,25 @@ bool QUrl::isDetached() const return !d || d->ref.loadRelaxed() == 1; } +static QString fromNativeSeparators(const QString &pathName) +{ +#if defined(Q_OS_WIN) + QString result(pathName); + const QChar nativeSeparator = u'\\'; + auto i = result.indexOf(nativeSeparator); + if (i != -1) { + QChar * const data = result.data(); + const auto length = result.length(); + for (; i < length; ++i) { + if (data[i] == nativeSeparator) + data[i] = u'/'; + } + } + return result; +#else + return pathName; +#endif +} /*! Returns a QUrl representation of \a localFile, interpreted as a local @@ -3334,7 +3352,7 @@ QUrl QUrl::fromLocalFile(const QString &localFile) if (localFile.isEmpty()) return url; QString scheme = fileScheme(); - QString deslashified = QDir::fromNativeSeparators(localFile); + QString deslashified = fromNativeSeparators(localFile); // magic for drives on windows if (deslashified.length() > 1 && deslashified.at(1) == QLatin1Char(':') && deslashified.at(0) != QLatin1Char('/')) { diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index e46b6eb329..d3ef6fbeca 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -1329,6 +1329,10 @@ void tst_QUrl::fromLocalFile_data() << QString(QString("//somehost") + suffix).replace('/', '\\') << QString("file://somehost") + suffix << QString(suffix); + QTest::addRow("windows-backslash-extlen-%s", pathDescription) + << QString(QString("//?") + suffix).replace('/', '\\') + << QString("file:////%3F") + suffix + << QString("//?") + suffix; #endif QTest::addRow("windows-extlen-%s", pathDescription) << QString("//?") + suffix |