diff options
author | Pavel Mogilevskiy <pmogilevskiy@gmail.com> | 2013-02-09 13:56:58 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-21 18:19:40 +0100 |
commit | 5ac70b848e2cd1c4e5462cd8fe3467c57a749adf (patch) | |
tree | 923be8f5a1fb8104f3d0f6e9f1f315f781cc208e /src | |
parent | c9e96db7879d793d5ea12b6a0a2d6bce74c3e537 (diff) |
Fix path separators in archives created by QZipWriter
It was not possible to extract data from the archive on OSX
which was created on the 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.
Cherry picked from qtbase eff6dbb306956f099374e5a0c5942b9e91a81e71
Change-Id: I2180282d235dc998309fc4f7b67f5c0181b78dda
Reviewed-by: Vasiliy Sorokin <sorokin.vasiliy@gmail.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/text/qzip.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 5c1a5f7415..edc2e76912 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -1170,7 +1170,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); } /*! @@ -1192,7 +1192,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(); } @@ -1203,10 +1203,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()); } @@ -1217,7 +1217,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)); } /*! |