From eff6dbb306956f099374e5a0c5942b9e91a81e71 Mon Sep 17 00:00:00 2001 From: Pavel Mogylevskiy Date: Tue, 19 Feb 2013 02:45:44 +0200 Subject: [PATCH] Fix path separators in archives created by QZipWriter It was not possible to extract data from the archive on OSX which was created on Windows platform because of wrong separators. Archive was created on Windows via QZipWriter and opened on OSX with QZipReader. It consisted of a lots directories and subdirectories with files. The solution is to use '/' separator for internal representation. Change-Id: Ic0837ca184bb6188129d53b587a5df2ec61e4e05 Reviewed-by: Oswald Buddenhagen --- src/gui/text/qzip.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 9e373303816..151b0bcfebb 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -1302,7 +1302,7 @@ QFile::Permissions QZipWriter::creationPermissions() const */ void QZipWriter::addFile(const QString &fileName, const QByteArray &data) { - d->addEntry(QZipWriterPrivate::File, fileName, data); + d->addEntry(QZipWriterPrivate::File, QDir::fromNativeSeparators(fileName), data); } /*! @@ -1324,7 +1324,7 @@ void QZipWriter::addFile(const QString &fileName, QIODevice *device) return; } } - d->addEntry(QZipWriterPrivate::File, fileName, device->readAll()); + d->addEntry(QZipWriterPrivate::File, QDir::fromNativeSeparators(fileName), device->readAll()); if (opened) device->close(); } @@ -1335,10 +1335,10 @@ void QZipWriter::addFile(const QString &fileName, QIODevice *device) */ void QZipWriter::addDirectory(const QString &dirName) { - QString name = dirName; + QString name(QDir::fromNativeSeparators(dirName)); // separator is mandatory - if (!name.endsWith(QDir::separator())) - name.append(QDir::separator()); + if (!name.endsWith(QLatin1Char('/'))) + name.append(QLatin1Char('/')); d->addEntry(QZipWriterPrivate::Directory, name, QByteArray()); } @@ -1349,7 +1349,7 @@ void QZipWriter::addDirectory(const QString &dirName) */ void QZipWriter::addSymLink(const QString &fileName, const QString &destination) { - d->addEntry(QZipWriterPrivate::Symlink, fileName, QFile::encodeName(destination)); + d->addEntry(QZipWriterPrivate::Symlink, QDir::fromNativeSeparators(fileName), QFile::encodeName(destination)); } /*!