Hello community, here is the log from the commit of package karchive for openSUSE:Factory checked in at 2015-11-24 22:22:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/karchive (Old) and /work/SRC/openSUSE:Factory/.karchive.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "karchive" Changes: -------- --- /work/SRC/openSUSE:Factory/karchive/karchive.changes 2015-10-19 22:21:54.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.karchive.new/karchive.changes 2015-11-24 22:22:04.000000000 +0100 @@ -1,0 +2,9 @@ +Sun Nov 8 16:57:42 UTC 2015 - hrvoje.sen...@gmail.com + +- Update to 5.16.0 (boo#955067) + * Fix KArchive for behavior change in Qt 5.6 + * Fix memleaks, lower memory usage + * For more details please see: + https://www.kde.org/announcements/kde-frameworks-5.16.0.php + +------------------------------------------------------------------- Old: ---- karchive-5.15.0.tar.xz New: ---- karchive-5.16.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ karchive.spec ++++++ --- /var/tmp/diff_new_pack.ktDxFw/_old 2015-11-24 22:22:05.000000000 +0100 +++ /var/tmp/diff_new_pack.ktDxFw/_new 2015-11-24 22:22:05.000000000 +0100 @@ -17,9 +17,9 @@ %define lname libKF5Archive5 -%define _tar_path 5.15 +%define _tar_path 5.16 Name: karchive -Version: 5.15.0 +Version: 5.16.0 Release: 0 BuildRequires: cmake >= 2.8.12 BuildRequires: extra-cmake-modules >= %{_tar_path} ++++++ karchive-5.15.0.tar.xz -> karchive-5.16.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/CMakeLists.txt new/karchive-5.16.0/CMakeLists.txt --- old/karchive-5.15.0/CMakeLists.txt 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/CMakeLists.txt 2015-11-09 08:55:01.000000000 +0100 @@ -3,7 +3,7 @@ project(KArchive) include(FeatureSummary) -find_package(ECM 5.15.0 NO_MODULE) +find_package(ECM 5.16.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) @@ -49,7 +49,7 @@ include(ECMSetupVersion) include(ECMGenerateHeaders) -set(KF5_VERSION "5.15.0") # handled by release scripts +set(KF5_VERSION "5.16.0") # handled by release scripts ecm_setup_version(${KF5_VERSION} VARIABLE_PREFIX KARCHIVE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/autotests/deprecatedtest.cpp new/karchive-5.16.0/autotests/deprecatedtest.cpp --- old/karchive-5.15.0/autotests/deprecatedtest.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/autotests/deprecatedtest.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -37,7 +37,7 @@ QVERIFY(zip.open(QIODevice::WriteOnly)); const QByteArray fileData("There could be a fire, if there is smoke."); - const QString fileName = QLatin1String("wisdom"); + const QString fileName = QStringLiteral("wisdom"); QVERIFY(zip.writeFile(fileName, "konqi", "dragons", fileData.constData(), fileData.size())); QVERIFY(zip.close()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/autotests/karchivetest.cpp new/karchive-5.16.0/autotests/karchivetest.cpp --- old/karchive-5.15.0/autotests/karchivetest.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/autotests/karchivetest.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -36,6 +36,7 @@ #ifdef Q_OS_WIN #include <Windows.h> +#include <QScopedValueRollback> #else #include <grp.h> #include <pwd.h> @@ -59,7 +60,7 @@ QVERIFY(archive->writeData("Du", 2)); QVERIFY(archive->finishWriting(8)); // Add local file - QFile localFile("test3"); + QFile localFile(QStringLiteral("test3")); QVERIFY(localFile.open(QIODevice::WriteOnly)); QVERIFY(localFile.write("Noch so einer", 13) == 13); localFile.close(); @@ -139,22 +140,22 @@ const KArchiveEntry *entry = dir->entry(it); QString descr; - descr += QString("mode=") + QString::number(entry->permissions(), 8) + ' '; + descr += QStringLiteral("mode=") + QString::number(entry->permissions(), 8) + ' '; if (listingFlags & WithUserGroup) { - descr += QString("user=") + entry->user() + ' '; - descr += QString("group=") + entry->group() + ' '; + descr += QStringLiteral("user=") + entry->user() + ' '; + descr += QStringLiteral("group=") + entry->group() + ' '; } - descr += QString("path=") + path + (it) + ' '; - descr += QString("type=") + (entry->isDirectory() ? "dir" : "file"); + descr += QStringLiteral("path=") + path + (it) + ' '; + descr += QStringLiteral("type=") + (entry->isDirectory() ? "dir" : "file"); if (entry->isFile()) { - descr += QString(" size=") + QString::number(static_cast<const KArchiveFile *>(entry)->size()); + descr += QStringLiteral(" size=") + QString::number(static_cast<const KArchiveFile *>(entry)->size()); } if (!entry->symLinkTarget().isEmpty()) { - descr += QString(" symlink=") + entry->symLinkTarget(); + descr += QStringLiteral(" symlink=") + entry->symLinkTarget(); } if (listingFlags & WithTime) { - descr += QString(" time=") + entry->date().toString("dd.MM.yyyy hh:mm:ss"); + descr += QStringLiteral(" time=") + entry->date().toString(QStringLiteral("dd.MM.yyyy hh:mm:ss")); } //qDebug() << descr; @@ -175,7 +176,7 @@ { const KArchiveDirectory *dir = archive->directory(); - const KArchiveFile *f = dir->file("z/test3"); + const KArchiveFile *f = dir->file(QStringLiteral("z/test3")); QByteArray arr(f->data()); QCOMPARE(arr.size(), 13); QCOMPARE(arr, QByteArray("Noch so einer")); @@ -194,19 +195,19 @@ QCOMPARE(QString::fromLatin1(contents.constData()), QString::fromLatin1(arr.constData())); delete dev; - const KArchiveEntry *e = dir->entry("mediumfile"); + const KArchiveEntry *e = dir->entry(QStringLiteral("mediumfile")); QVERIFY(e && e->isFile()); f = (KArchiveFile *)e; QCOMPARE(f->data().size(), SIZE1); - f = dir->file("hugefile"); + f = dir->file(QStringLiteral("hugefile")); QCOMPARE(f->data().size(), 20000); - e = dir->entry("aaaemptydir"); + e = dir->entry(QStringLiteral("aaaemptydir")); QVERIFY(e && e->isDirectory()); QVERIFY(!dir->file("aaaemptydir")); - e = dir->entry("my/dir/test3"); + e = dir->entry(QStringLiteral("my/dir/test3")); QVERIFY(e && e->isFile()); f = (KArchiveFile *)e; dev = f->createDevice(); @@ -216,24 +217,24 @@ QCOMPARE(QString::fromLatin1(secondLine.constData()), QString::fromLatin1("David.")); delete dev; #ifndef Q_OS_WIN - e = dir->entry("z/test3_symlink"); + e = dir->entry(QStringLiteral("z/test3_symlink")); QVERIFY(e); QVERIFY(e->isFile()); QCOMPARE(e->symLinkTarget(), QString("test3")); #endif // Test "./" prefix for KOffice (xlink:href="./ObjectReplacements/Object 1") - e = dir->entry("./hugefile"); + e = dir->entry(QStringLiteral("./hugefile")); QVERIFY(e && e->isFile()); - e = dir->entry("./my/dir/test3"); + e = dir->entry(QStringLiteral("./my/dir/test3")); QVERIFY(e && e->isFile()); // Test directory entries - e = dir->entry("my"); + e = dir->entry(QStringLiteral("my")); QVERIFY(e && e->isDirectory()); - e = dir->entry("my/"); + e = dir->entry(QStringLiteral("my/")); QVERIFY(e && e->isDirectory()); - e = dir->entry("./my/"); + e = dir->entry(QStringLiteral("./my/")); QVERIFY(e && e->isDirectory()); } @@ -242,6 +243,10 @@ QVERIFY(archive->writeFile("newfile", "New File", 0100440, "dfaure", "users")); } +#ifdef Q_OS_WIN +extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; +#endif + static void testCopyTo(KArchive *archive) { const KArchiveDirectory *dir = archive->directory(); @@ -295,11 +300,15 @@ int len = readlink(encodedFileName.data(), s.data(), s.size() - 1); if (len >= 0) { s[len] = '\0'; - symLinkTarget = QFile::decodeName(s); + symLinkTarget = QFile::decodeName(s.constData()); } QCOMPARE(symLinkTarget, QString("test3")); #endif +#ifdef Q_OS_WIN + QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup); + qt_ntfs_permission_lookup++; +#endif QVERIFY(QFileInfo(dirName + "executableAll").permissions() & (QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther)); } @@ -328,7 +337,7 @@ { #ifndef Q_OS_WIN // Prepare local symlink - QFile::remove("test3_symlink"); + QFile::remove(QStringLiteral("test3_symlink")); if (::symlink("test3", "test3_symlink") != 0) { qDebug() << errno; QVERIFY(false); @@ -353,7 +362,7 @@ void KArchiveTest::testNonExistentFile() { - KTar tar(QLatin1String("nonexistent.tar.gz")); + KTar tar(QStringLiteral("nonexistent.tar.gz")); QVERIFY(!tar.open(QIODevice::ReadOnly)); } @@ -442,13 +451,13 @@ { QFETCH(QString, fileName); - QFileInfo localFileData("test3"); + QFileInfo localFileData(QStringLiteral("test3")); const QString systemUserName = getCurrentUserName(); const QString systemGroupName = getCurrentGroupName(); const QString owner = localFileData.owner(); const QString group = localFileData.group(); - const QString emptyTime = QDateTime().toString("dd.MM.yyyy hh:mm:ss"); + const QString emptyTime = QDateTime().toString(QStringLiteral("dd.MM.yyyy hh:mm:ss")); const QDateTime creationTime = QFileInfo(fileName).created(); // 1.6-1.7 ms per interaction, 2908428 instruction loads @@ -464,13 +473,18 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup | WithTime); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup | WithTime); + #ifndef Q_OS_WIN - QCOMPARE(listing.count(), 16); + const int expectedCount = 16; #else - QCOMPARE(listing.count(), 15); + const int expectedCount = 15; #endif + if (listing.count() != expectedCount) { + qWarning() << listing; + } + QCOMPARE(listing.count(), expectedCount); compareEntryWithTimestamp(listing[0], QString("mode=40755 user= group= path=aaaemptydir type=dir"), creationTime); QCOMPARE(listing[1], QString("mode=40777 user=%1 group=%2 path=dir type=dir time=%3").arg(systemUserName).arg(systemGroupName).arg(emptyTime)); @@ -489,13 +503,13 @@ // This one was added with addLocalFile, so ignore mode. QString str = listing[14]; - str.replace(QRegExp("mode.*user="), "user="); + str.replace(QRegExp(QStringLiteral("mode.*user=")), QStringLiteral("user=")); compareEntryWithTimestamp(str, QString("user=%1 group=%2 path=z/test3 type=file size=13").arg(owner).arg(group), creationTime); #ifndef Q_OS_WIN str = listing[15]; - str.replace(QRegExp("mode.*path="), "path="); + str.replace(QRegExp(QStringLiteral("mode.*path=")), QStringLiteral("path=")); compareEntryWithTimestamp(str, QString("path=z/test3_symlink type=file size=0 symlink=test3"), creationTime); #endif @@ -590,7 +604,7 @@ QVERIFY(tar.open(QIODevice::ReadOnly)); testFileData(&tar); const KArchiveDirectory *dir = tar.directory(); - const KArchiveEntry *e = dir->entry("newfile"); + const KArchiveEntry *e = dir->entry(QStringLiteral("newfile")); QVERIFY(e && e->isFile()); const KArchiveFile *f = (KArchiveFile *)e; QCOMPARE(f->data().size(), 8); @@ -635,7 +649,7 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup); QCOMPARE(listing[0], QString("mode=100644 user= group= path=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000098 type=file size=3")); QCOMPARE(listing[3], QString("mode=100644 user= group= path=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000101 type=file size=3")); @@ -657,7 +671,7 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup); QCOMPARE(listing.count(), 2); @@ -675,7 +689,7 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup); QCOMPARE(listing[0], QString("mode=40775 user=root group=root path=Test type=dir")); QCOMPARE(listing[1], QString("mode=40775 user=root group=root path=Test/qt-jambi-qtjambi-4_7 type=dir")); @@ -701,7 +715,7 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup); QVERIFY(listing[9].contains("trolltech/examples/generator")); QVERIFY(listing[10].contains("trolltech/examples/generator/GeneratorExample.html")); @@ -719,7 +733,7 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup); //qDebug() << listing.join("\n"); QVERIFY(listing[0].contains("%{APPNAME}.cpp")); @@ -737,7 +751,7 @@ const KArchiveDirectory *dir = tar.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", WithUserGroup); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), WithUserGroup); //qDebug() << listing.join("\n"); QVERIFY(listing[0].contains("path=d")); @@ -763,7 +777,7 @@ zip.setCompression(KZip::NoCompression); QByteArray zipMimeType(s_zipMimeType); - zip.writeFile("mimetype", zipMimeType); + zip.writeFile(QStringLiteral("mimetype"), zipMimeType); zip.setCompression(KZip::DeflateCompression); writeTestFilesToArchive(&zip); @@ -809,7 +823,7 @@ void KArchiveTest::testReadZipError() { - QFile brokenZip("broken.zip"); + QFile brokenZip(QStringLiteral("broken.zip")); QVERIFY(brokenZip.open(QIODevice::WriteOnly)); // incomplete magic @@ -817,7 +831,7 @@ brokenZip.close(); { - KZip zip("broken.zip"); + KZip zip(QStringLiteral("broken.zip")); QVERIFY(!zip.open(QIODevice::ReadOnly)); @@ -845,7 +859,7 @@ QVERIFY(dir != 0); // ZIP has no support for per-file user/group, so omit them from the listing - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); #ifndef Q_OS_WIN QCOMPARE(listing.count(), 17); @@ -869,11 +883,11 @@ QCOMPARE(listing[14], QString("mode=40777 path=z type=dir")); // This one was added with addLocalFile, so ignore mode QString str = listing[15]; - str.replace(QRegExp("mode.*path="), "path="); + str.replace(QRegExp(QStringLiteral("mode.*path=")), QStringLiteral("path=")); QCOMPARE(str, QString("path=z/test3 type=file size=13")); #ifndef Q_OS_WIN str = listing[16]; - str.replace(QRegExp("mode.*path="), "path="); + str.replace(QRegExp(QStringLiteral("mode.*path=")), QStringLiteral("path=")); QCOMPARE(str, QString("path=z/test3_symlink type=file size=5 symlink=test3")); #endif @@ -923,7 +937,7 @@ const KArchiveDirectory *dir = zip.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); QCOMPARE(listing[0], QString("mode=100644 path=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000098 type=file size=3")); QCOMPARE(listing[3], QString("mode=100644 path=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000101 type=file size=3")); @@ -941,7 +955,7 @@ QVERIFY(zip.open(QIODevice::WriteOnly)); const QByteArray fileData("Test of data with a russian file name"); - const QString fileName = QString::fromUtf8("Архитектура.okular"); + const QString fileName = QStringLiteral("Архитектура.okular"); const QString recodedFileName = QFile::decodeName(QFile::encodeName(fileName)); QVERIFY(zip.writeFile(fileName, fileData)); @@ -951,7 +965,7 @@ const KArchiveDirectory *dir = zip.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); QCOMPARE(listing.count(), 1); QCOMPARE(listing[0], QString::fromUtf8("mode=100644 path=%1 type=file size=%2").arg(recodedFileName).arg(fileData.size())); @@ -967,7 +981,7 @@ QVERIFY(zip.open(QIODevice::WriteOnly)); const QByteArray fileData1("There could be a fire, if there is smoke."); - const QString fileName = QLatin1String("wisdom"); + const QString fileName = QStringLiteral("wisdom"); QVERIFY(zip.writeFile(fileName, fileData1, 0100644, "konqi", "dragons")); // now overwrite it @@ -980,7 +994,7 @@ const KArchiveDirectory *dir = zip.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); QCOMPARE(listing.count(), 1); QCOMPARE(listing[0], QString::fromUtf8("mode=100644 path=%1 type=file size=%2").arg(fileName).arg(fileData2.size())); @@ -1007,7 +1021,7 @@ const QString dirName = tmpDir.path() + '/'; const QByteArray file1Data = "Hello Shantanu"; - const QString file1 = QLatin1String("file1"); + const QString file1 = QStringLiteral("file1"); QVERIFY(writeFile(dirName, file1, file1Data)); { @@ -1059,7 +1073,7 @@ const QByteArray fileData("aaaaaaaaaaaaaaa"); // ZIP has no support for per-file user/group, so omit them from the listing - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); QCOMPARE(listing.count(), 2); QCOMPARE(listing[0], QString::fromUtf8("mode=100644 path=compressed type=file size=%2").arg(fileData.size())); @@ -1079,10 +1093,10 @@ QVERIFY(rcc.open(QIODevice::ReadOnly)); const KArchiveDirectory *rootDir = rcc.directory(); QVERIFY(rootDir != 0); - const KArchiveEntry *rrEntry = rootDir->entry("runtime_resource"); + const KArchiveEntry *rrEntry = rootDir->entry(QStringLiteral("runtime_resource")); QVERIFY(rrEntry && rrEntry->isDirectory()); const KArchiveDirectory *rrDir = static_cast<const KArchiveDirectory *>(rrEntry); - const KArchiveEntry *fileEntry = rrDir->entry("search_file.txt"); + const KArchiveEntry *fileEntry = rrDir->entry(QStringLiteral("search_file.txt")); QVERIFY(fileEntry && fileEntry->isFile()); const KArchiveFile *searchFile = static_cast<const KArchiveFile *>(fileEntry); const QByteArray fileData = searchFile->data(); @@ -1098,7 +1112,7 @@ QFile::remove(s_zipFileName); QFile::remove(s_zipLocaleFileName); #ifndef Q_OS_WIN - QFile::remove("test3_symlink"); + QFile::remove(QStringLiteral("test3_symlink")); #endif } @@ -1155,7 +1169,7 @@ const KArchiveDirectory *dir = k7zip.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); #ifndef Q_OS_WIN QCOMPARE(listing.count(), 16); @@ -1178,11 +1192,11 @@ QCOMPARE(listing[13], QString("mode=40777 path=z type=dir")); // This one was added with addLocalFile, so ignore mode/user/group. QString str = listing[14]; - str.replace(QRegExp("mode.*path="), "path="); + str.replace(QRegExp(QStringLiteral("mode.*path=")), QStringLiteral("path=")); QCOMPARE(str, QString("path=z/test3 type=file size=13")); #ifndef Q_OS_WIN str = listing[15]; - str.replace(QRegExp("mode.*path="), "path="); + str.replace(QRegExp(QStringLiteral("mode.*path=")), QStringLiteral("path=")); QCOMPARE(str, QString("path=z/test3_symlink type=file size=0 symlink=test3")); #endif @@ -1245,7 +1259,7 @@ QVERIFY(k7zip.open(QIODevice::ReadOnly)); testFileData(&k7zip); const KArchiveDirectory *dir = k7zip.directory(); - const KArchiveEntry *e = dir->entry("newfile"); + const KArchiveEntry *e = dir->entry(QStringLiteral("newfile")); QVERIFY(e && e->isFile()); const KArchiveFile *f = (KArchiveFile *)e; QCOMPARE(f->data().size(), 8); @@ -1280,7 +1294,7 @@ const KArchiveDirectory *dir = k7zip.directory(); QVERIFY(dir != 0); - const QStringList listing = recursiveListEntries(dir, "", 0); + const QStringList listing = recursiveListEntries(dir, QLatin1String(""), 0); QCOMPARE(listing[0], QString("mode=100644 path=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000098 type=file size=3")); QCOMPARE(listing[3], QString("mode=100644 path=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000101 type=file size=3")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/src/k7zip.cpp new/karchive-5.16.0/src/k7zip.cpp --- old/karchive-5.15.0/src/k7zip.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/src/k7zip.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -170,6 +170,8 @@ const QString &user, const QString &group, const QString &symlink, qint64 pos, qint64 size, const QByteArray &data); + ~K7ZipFileEntry(); + /** * @return the content of this file. * Call data() with care (only once per file), this data isn't cached. @@ -198,12 +200,17 @@ qint64 pos, qint64 size, const QByteArray &data) : KArchiveFile(zip, name, access, date, user, group, symlink, pos, size) , m_data(data) + , m_buffer(new QBuffer) { - m_buffer = new QBuffer; m_buffer->setData(m_data); m_buffer->open(QIODevice::ReadOnly); } +K7ZipFileEntry::~K7ZipFileEntry() +{ + delete m_buffer; +} + QByteArray K7ZipFileEntry::data() const { return m_data.mid(position(), size()); @@ -218,24 +225,24 @@ { public: FileInfo() - : attribDefined(false) + : size(0) , attributes(0) - , hasStream(false) - , isDir(false) - , size(0) , crc(0) + , attribDefined(false) , crcDefined(false) + , hasStream(false) + , isDir(false) { } QString path; - bool attribDefined; - quint32 attributes; - bool hasStream; - bool isDir; quint64 size; + quint32 attributes; quint32 crc; + bool attribDefined; bool crcDefined; + bool hasStream; + bool isDir; }; class Folder @@ -268,6 +275,11 @@ { } + ~Folder() + { + qDeleteAll(folderInfos); + } + quint64 getUnpackSize() const { if (unpackSizes.isEmpty()) { @@ -275,7 +287,7 @@ } for (int i = unpackSizes.size() - 1; i >= 0; i--) { if (findBindPairForOutStream(i) < 0) { - return unpackSizes[i]; + return unpackSizes.at(i); } } return 0; @@ -285,7 +297,7 @@ { int result = 0; for (int i = 0; i < folderInfos.size(); i++) { - result += folderInfos[i]->numOutStreams; + result += folderInfos.at(i)->numOutStreams; } return result; } @@ -294,7 +306,7 @@ { quint32 streamIndex = 0; for (quint32 i = 0; i < coderIndex; i++) { - streamIndex += folderInfos[i]->numInStreams; + streamIndex += folderInfos.at(i)->numInStreams; } return streamIndex; } @@ -303,7 +315,7 @@ { quint32 streamIndex = 0; for (quint32 i = 0; i < coderIndex; i++) { - streamIndex += folderInfos[i]->numOutStreams; + streamIndex += folderInfos.at(i)->numOutStreams; } return streamIndex; } @@ -365,7 +377,7 @@ bool isEncrypted() const { for (int i = folderInfos.size() - 1; i >= 0; i--) { - if (folderInfos[i]->methodID == k_AES) { + if (folderInfos.at(i)->methodID == k_AES) { return true; } } @@ -399,6 +411,12 @@ { } + ~K7ZipPrivate() + { + qDeleteAll(folders); + qDeleteAll(fileInfos); + } + K7Zip *q; QVector<bool> packCRCsDefined; @@ -437,14 +455,16 @@ QByteArray header; QByteArray outData; // Store data in this buffer before compress and write in archive. K7ZipFileEntry *m_currentFile; - QList<KArchiveEntry *> m_entryList; + QVector<KArchiveEntry *> m_entryList; void clear() { packCRCsDefined.clear(); packCRCs.clear(); numUnpackStreamsInFolders.clear(); + qDeleteAll(folders); folders.clear(); + qDeleteAll(fileInfos); fileInfos.clear(); cTimesDefined.clear(); cTimes.clear(); @@ -497,10 +517,10 @@ void writeUInt64(quint64 value); void writeHashDigests(const QVector<bool> &digestsDefined, const QVector<quint32> &digests); void writeAlignedBoolHeader(const QVector<bool> &v, int numDefined, int type, unsigned itemSize); - void writeUInt64DefVector(const QVector<quint64> &v, const QVector<bool> defined, int type); + void writeUInt64DefVector(const QVector<quint64> &v, const QVector<bool> &defined, int type); void writeFolder(const Folder *folder); void writePackInfo(quint64 dataOffset, QVector<quint64> &packedSizes, QVector<bool> &packedCRCsDefined, QVector<quint32> &packedCRCs); - void writeUnpackInfo(QVector<Folder *> &folderItems); + void writeUnpackInfo(const QVector<Folder *> &folderItems); void writeSubStreamsInfo(const QVector<quint64> &unpackSizes, const QVector<bool> &digestsDefined, const QVector<quint32> &digests); void writeHeader(quint64 &headerOffset); void writeSignature(); @@ -882,6 +902,7 @@ } int numFolders = readNumber(); + qDeleteAll(folders); folders.clear(); int external = readByte(); switch (external) { @@ -910,7 +931,7 @@ } for (int i = 0; i < numFolders; ++i) { - Folder *folder = folders[i]; + Folder *folder = folders.at(i); int numOutStreams = folder->getNumOutStreams(); for (int j = 0; j < numOutStreams; ++j) { folder->unpackSizes.append(readNumber()); @@ -927,7 +948,7 @@ QVector<quint32> crcs; readHashDigests(numFolders, crcsDefined, crcs); for (int i = 0; i < numFolders; i++) { - Folder *folder = folders[i]; + Folder *folder = folders.at(i); folder->unpackCRCDefined = crcsDefined[i]; folder->unpackCRC = crcs[i]; } @@ -971,7 +992,7 @@ } for (int i = 0; i < numUnpackStreamsInFolders.size(); i++) { - quint64 numSubstreams = numUnpackStreamsInFolders[i]; + quint64 numSubstreams = numUnpackStreamsInFolders.at(i); if (numSubstreams == 0) { continue; } @@ -983,7 +1004,7 @@ sum += size; } } - unpackSizes.append(folders[i]->getUnpackSize() - sum); + unpackSizes.append(folders.at(i)->getUnpackSize() - sum); } if (type == kSize) { @@ -993,8 +1014,8 @@ int numDigests = 0; int numDigestsTotal = 0; for (int i = 0; i < folders.size(); i++) { - quint64 numSubstreams = numUnpackStreamsInFolders[i]; - if (numSubstreams != 1 || !folders[i]->unpackCRCDefined) { + quint64 numSubstreams = numUnpackStreamsInFolders.at(i); + if (numSubstreams != 1 || !folders.at(i)->unpackCRCDefined) { numDigests += numSubstreams; } numDigestsTotal += numSubstreams; @@ -1007,8 +1028,8 @@ readHashDigests(numDigests, digestsDefined2, digests2); int digestIndex = 0; for (int i = 0; i < folders.size(); i++) { - quint64 numSubstreams = numUnpackStreamsInFolders[i]; - const Folder *folder = folders[i]; + quint64 numSubstreams = numUnpackStreamsInFolders.at(i); + const Folder *folder = folders.at(i); if (numSubstreams == 1 && folder->unpackCRCDefined) { digestsDefined.append(true); digests.append(folder->unpackCRC); @@ -1183,7 +1204,7 @@ QVector<quint32> outStreams; quint32 outStreamIndex = 0; for (int i = 0; i < folder->folderInfos.size(); i++) { - const Folder::FolderInfo *coderInfo = folder->folderInfos[i]; + const Folder::FolderInfo *coderInfo = folder->folderInfos.at(i); for (int j = 0; j < coderInfo->numOutStreams; j++, outStreamIndex++) { if (folder->findBindPairForOutStream(outStreamIndex) < 0) { @@ -1461,7 +1482,7 @@ quint64 startPos = 32 + packPos; for (int i = 0; i < folders.size(); i++) { - const Folder *folder = folders[i]; + const Folder *folder = folders.at(i); quint64 unpackSize64 = folder->getUnpackSize();; size_t unpackSize = (size_t)unpackSize64; if (unpackSize != unpackSize64) { @@ -1495,6 +1516,8 @@ QVector<int> seqInStreams; QVector<quint32> coderIndexes; + seqInStreams.reserve(mainCoder->numInStreams); + coderIndexes.reserve(mainCoder->numInStreams); for (int j = 0; j < (int)mainCoder->numInStreams; j++) { int seqInStream; quint32 coderIndex; @@ -1504,6 +1527,7 @@ } QVector<int> seqOutStreams; + seqOutStreams.reserve(mainCoder->numOutStreams); for (int j = 0; j < (int)mainCoder->numOutStreams; j++) { int seqOutStream; getOutStream(folder, startOutIndex + j, seqOutStream); @@ -1671,9 +1695,9 @@ void K7Zip::K7ZipPrivate::createItemsFromEntities(const KArchiveDirectory *dir, const QString &path, QByteArray &data) { - QStringList l = dir->entries(); - QStringList::ConstIterator it = l.constBegin(); - for (; it != l.constEnd(); ++it) { + const QStringList l = dir->entries(); + QStringList::ConstIterator it = l.begin(); + for (; it != l.end(); ++it) { const KArchiveEntry *entry = dir->entry((*it)); FileInfo *fileInfo = new FileInfo; @@ -1792,7 +1816,7 @@ writeByte(0); } -void K7Zip::K7ZipPrivate::writeUInt64DefVector(const QVector<quint64> &v, const QVector<bool> defined, int type) +void K7Zip::K7ZipPrivate::writeUInt64DefVector(const QVector<quint64> &v, const QVector<bool> &defined, int type) { int numDefined = 0; @@ -1869,7 +1893,7 @@ { writeNumber(folder->folderInfos.size()); for (int i = 0; i < folder->folderInfos.size(); i++) { - const Folder::FolderInfo *info = folder->folderInfos[i]; + const Folder::FolderInfo *info = folder->folderInfos.at(i); { size_t propsSize = info->properties.size(); @@ -1925,7 +1949,7 @@ } } -void K7Zip::K7ZipPrivate::writeUnpackInfo(QVector<Folder *> &folderItems) +void K7Zip::K7ZipPrivate::writeUnpackInfo(const QVector<Folder *> &folderItems) { if (folderItems.isEmpty()) { return; @@ -1947,12 +1971,14 @@ for (i = 0; i < folderItems.size(); i++) { const Folder *folder = folderItems[i]; for (int j = 0; j < folder->unpackSizes.size(); j++) { - writeNumber(folder->unpackSizes[j]); + writeNumber(folder->unpackSizes.at(j)); } } QVector<bool> unpackCRCsDefined; QVector<quint32> unpackCRCs; + unpackCRCsDefined.reserve(folderItems.size()); + unpackCRCs.reserve(folderItems.size()); for (i = 0; i < folderItems.size(); i++) { const Folder *folder = folderItems[i]; unpackCRCsDefined.append(folder->unpackCRCDefined); @@ -1971,10 +1997,10 @@ writeByte(kSubStreamsInfo); for (int i = 0; i < numUnpackStreamsInFolders.size(); i++) { - if (numUnpackStreamsInFolders[i] != 1) { + if (numUnpackStreamsInFolders.at(i) != 1) { writeByte(kNumUnpackStream); for (int j = 0; j < numUnpackStreamsInFolders.size(); j++) { - writeNumber(numUnpackStreamsInFolders[j]); + writeNumber(numUnpackStreamsInFolders.at(j)); } break; } @@ -1983,8 +2009,8 @@ bool needFlag = true; int index = 0; for (int i = 0; i < numUnpackStreamsInFolders.size(); i++) { - for (quint32 j = 0; j < numUnpackStreamsInFolders[i]; j++) { - if (j + 1 != numUnpackStreamsInFolders[i]) { + for (quint32 j = 0; j < numUnpackStreamsInFolders.at(i); j++) { + if (j + 1 != numUnpackStreamsInFolders.at(i)) { if (needFlag) { writeByte(kSize); } @@ -2000,8 +2026,8 @@ int digestIndex = 0; for (int i = 0; i < folders.size(); i++) { - int numSubStreams = (int)numUnpackStreamsInFolders[i]; - if (numSubStreams == 1 && folders[i]->unpackCRCDefined) { + int numSubStreams = (int)numUnpackStreamsInFolders.at(i); + if (numSubStreams == 1 && folders.at(i)->unpackCRCDefined) { digestIndex++; } else { for (int j = 0; j < numSubStreams; j++, digestIndex++) { @@ -2094,7 +2120,7 @@ QVector<bool> digestsDefined; QVector<quint32> digests; for (int i = 0; i < fileInfos.size(); i++) { - const FileInfo *file = fileInfos[i]; + const FileInfo *file = fileInfos.at(i); if (!file->hasStream) { continue; } @@ -2120,7 +2146,7 @@ QVector<bool> emptyStreamVector; int numEmptyStreams = 0; for (int i = 0; i < fileInfos.size(); i++) { - if (fileInfos[i]->hasStream) { + if (fileInfos.at(i)->hasStream) { emptyStreamVector.append(false); } else { emptyStreamVector.append(true); @@ -2136,7 +2162,7 @@ QVector<bool> emptyFileVector, antiVector; int numEmptyFiles = 0, numAntiItems = 0; for (int i = 0; i < fileInfos.size(); i++) { - const FileInfo *file = fileInfos[i]; + const FileInfo *file = fileInfos.at(i); if (!file->hasStream) { emptyFileVector.append(!file->isDir); if (!file->isDir) { @@ -2170,7 +2196,7 @@ int numDefined = 0; size_t namesDataSize = 0; for (int i = 0; i < fileInfos.size(); i++) { - const QString &name = fileInfos[i]->path; + const QString &name = fileInfos.at(i)->path; if (!name.isEmpty()) { numDefined++; namesDataSize += (name.length() + 1) * 2; @@ -2185,7 +2211,7 @@ writeNumber(namesDataSize); writeByte(0); for (int i = 0; i < fileInfos.size(); i++) { - const QString &name = fileInfos[i]->path; + const QString &name = fileInfos.at(i)->path; for (int t = 0; t < name.length(); t++) { wchar_t c = name[t].toLatin1(); writeByte((unsigned char)c); @@ -2206,8 +2232,9 @@ /* ---------- Write Attrib ---------- */ QVector<bool> boolVector; int numDefined = 0; + boolVector.reserve(fileInfos.size()); for (int i = 0; i < fileInfos.size(); i++) { - bool defined = fileInfos[i]->attribDefined; + bool defined = fileInfos.at(i)->attribDefined; boolVector.append(defined); if (defined) { numDefined++; @@ -2217,7 +2244,7 @@ if (numDefined > 0) { writeAlignedBoolHeader(boolVector, numDefined, kAttributes, 4); for (int i = 0; i < fileInfos.size(); i++) { - const FileInfo *file = fileInfos[i]; + const FileInfo *file = fileInfos.at(i); if (file->attribDefined) { writeUInt32(file->attributes); } @@ -2397,7 +2424,7 @@ type = d->readByte(); } else { for (int i = 0; i < d->folders.size(); ++i) { - Folder *folder = d->folders[i]; + Folder *folder = d->folders.at(i); d->unpackSizes.append(folder->getUnpackSize()); d->digestsDefined.append(folder->unpackCRCDefined); d->digests.append(folder->unpackCRC); @@ -2489,7 +2516,7 @@ QString name; for (int i = 0; i < numFiles; i++) { name = d->readString(); - d->fileInfos[i]->path = name; + d->fileInfos.at(i)->path = name; } break; } @@ -2507,7 +2534,7 @@ } for (int i = 0; i < numFiles; i++) { - FileInfo *fileInfo = d->fileInfos[i]; + FileInfo *fileInfo = d->fileInfos.at(i); fileInfo->attribDefined = attributesAreDefined[i]; if (fileInfo->attribDefined) { fileInfo->attributes = d->readUInt32(); @@ -2558,20 +2585,14 @@ int numAntiItems = 0; if (emptyStreamVector.isEmpty()) { - for (int i = 0; i < numFiles; ++i) { - emptyStreamVector.append(false); - } + emptyStreamVector.fill(false, numFiles); } if (antiFileVector.isEmpty()) { - for (int i = 0; i < numEmptyStreams; i++) { - antiFileVector.append(false); - } + antiFileVector.fill(false, numEmptyStreams); } if (emptyFileVector.isEmpty()) { - for (int i = 0; i < numEmptyStreams; i++) { - emptyFileVector.append(false); - } + emptyFileVector.fill(false, numEmptyStreams); } for (int i = 0; i < numEmptyStreams; i++) { @@ -2584,7 +2605,7 @@ int oldPos = 0; for (int i = 0; i < numFiles; i++) { - FileInfo *fileInfo = d->fileInfos[i]; + FileInfo *fileInfo = d->fileInfos.at(i); bool isAnti; fileInfo->hasStream = !emptyStreamVector[i]; if (fileInfo->hasStream) { @@ -2605,45 +2626,6 @@ d->isAnti.append(isAnti); } - QString attr; - if ((fileInfo->attributes & FILE_ATTRIBUTE_DIRECTORY) != 0 || fileInfo->isDir) { - attr += QLatin1String("D"); - } - if ((fileInfo->attributes & FILE_ATTRIBUTE_READONLY) != 0) { - attr += QLatin1String("R"); - } - if ((fileInfo->attributes & FILE_ATTRIBUTE_HIDDEN) != 0) { - attr += QLatin1String("H"); - } - if ((fileInfo->attributes & FILE_ATTRIBUTE_SYSTEM) != 0) { - attr += QLatin1String("S"); - } - if ((fileInfo->attributes & FILE_ATTRIBUTE_ARCHIVE) != 0) { - attr += QLatin1String("A"); - } - - quint64 packSize = 0; - for (int j = 0; j < d->packSizes.size(); j++) { - packSize += d->packSizes[j]; - } - //unsigned short st_mode = fileInfo->attributes >> 16; - QString method; - for (int w = 0; w < d->folders.size(); ++w) { - for (int g = 0; g < d->folders[w]->folderInfos.size(); ++g) { - Folder::FolderInfo *info = d->folders[w]->folderInfos[g]; - switch (info->methodID) { - case k_LZMA: - method = QLatin1String("LZMA:16"); - break; - case k_LZMA2: - method = QLatin1String("LZMA2"); - break; - case k_AES: - break; - } - } - } - int access; bool symlink = false; if (fileInfo->attributes & FILE_ATTRIBUTE_UNIX_EXTENSION) { @@ -2791,7 +2773,7 @@ int numUnpackStream = 0; for (int i = 0; i < d->fileInfos.size(); ++i) { - if (d->fileInfos[i]->hasStream) { + if (d->fileInfos.at(i)->hasStream) { numUnpackStream++; } } @@ -2820,8 +2802,9 @@ d->writeUnpackInfo(folders); d->writeByte(kEnd); for (int i = 0; i < packSizes.size(); i++) { - headerOffset += packSizes[i]; + headerOffset += packSizes.at(i); } + qDeleteAll(folders); } // end encode header diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/src/karchive.cpp new/karchive-5.16.0/src/karchive.cpp --- old/karchive-5.15.0/src/karchive.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/src/karchive.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -226,7 +226,7 @@ int len = readlink(encodedFileName.data(), s.data(), s.size() - 1); if (len >= 0) { s[len] = '\0'; - symLinkTarget = QFile::decodeName(s); + symLinkTarget = QFile::decodeName(s.constData()); } #endif if (symLinkTarget.isEmpty()) { // Mac or Windows @@ -410,7 +410,7 @@ QString username = ::getCurrentUserName(); QString groupname = ::getCurrentGroupName(); - d->rootDir = new KArchiveDirectory(this, QLatin1String("/"), (int)(0777 + S_IFDIR), QDateTime(), username, groupname, QString()); + d->rootDir = new KArchiveDirectory(this, QStringLiteral("/"), (int)(0777 + S_IFDIR), QDateTime(), username, groupname, QString()); } return d->rootDir; } @@ -864,8 +864,8 @@ QString linkName = curDirName + QLatin1Char('/') + curEntry->name(); // To create a valid link on Windows, linkName must have a .lnk file extension. #ifdef Q_OS_WIN - if (!linkName.endsWith(QStringLiteral(".lnk"))) { - linkName += QStringLiteral(".lnk"); + if (!linkName.endsWith(QLatin1String(".lnk"))) { + linkName += QLatin1String(".lnk"); } #endif QFile symLinkTarget(curEntry->symLinkTarget()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/src/kfilterdev.cpp new/karchive-5.16.0/src/kfilterdev.cpp --- old/karchive-5.15.0/src/kfilterdev.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/src/kfilterdev.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -73,20 +73,20 @@ QMimeDatabase db; const QMimeType mime = db.mimeTypeForName(mimeType); if (mime.isValid()) { - if (mime.inherits(QString::fromLatin1("application/x-gzip"))) { + if (mime.inherits(QStringLiteral("application/x-gzip"))) { return KCompressionDevice::GZip; } #if HAVE_BZIP2_SUPPORT - if (mime.inherits(QString::fromLatin1("application/x-bzip"))) { + if (mime.inherits(QStringLiteral("application/x-bzip"))) { return KCompressionDevice::BZip2; } #endif #if HAVE_XZ_SUPPORT - if (mime.inherits(QString::fromLatin1("application/x-lzma"))) { + if (mime.inherits(QStringLiteral("application/x-lzma"))) { return KCompressionDevice::Xz; } - if (mime.inherits(QString::fromLatin1("application/x-xz"))) { + if (mime.inherits(QStringLiteral("application/x-xz"))) { return KCompressionDevice::Xz; } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/src/kfilterdev.h new/karchive-5.16.0/src/kfilterdev.h --- old/karchive-5.15.0/src/kfilterdev.h 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/src/kfilterdev.h 2015-11-09 08:55:01.000000000 +0100 @@ -112,7 +112,7 @@ #endif /** - * @deprecated Use KCompressionDevicea + * @deprecated Use KCompressionDevice * * Use: * KCompressionDevice::CompressionType type = KFilterDev::compressionTypeForMimeType(mimeType); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/src/ktar.cpp new/karchive-5.16.0/src/ktar.cpp --- old/karchive-5.15.0/src/ktar.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/src/ktar.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -41,7 +41,6 @@ static const char application_bzip[] = "application/x-bzip"; static const char application_lzma[] = "application/x-lzma"; static const char application_xz[] = "application/x-xz"; -static const char application_zip[] = "application/zip"; class KTar::KTarPrivate { @@ -109,16 +108,16 @@ //qDebug() << mode << mime->name(); - if (mime.inherits(QString::fromLatin1("application/x-compressed-tar")) || mime.inherits(QString::fromLatin1(application_gzip))) { + if (mime.inherits(QStringLiteral("application/x-compressed-tar")) || mime.inherits(QString::fromLatin1(application_gzip))) { // gzipped tar file (with possibly invalid file name), ask for gzip filter d->mimetype = QString::fromLatin1(application_gzip); - } else if (mime.inherits(QString::fromLatin1("application/x-bzip-compressed-tar")) || mime.inherits(QString::fromLatin1(application_bzip))) { + } else if (mime.inherits(QStringLiteral("application/x-bzip-compressed-tar")) || mime.inherits(QString::fromLatin1(application_bzip))) { // bzipped2 tar file (with possibly invalid file name), ask for bz2 filter d->mimetype = QString::fromLatin1(application_bzip); - } else if (mime.inherits(QString::fromLatin1("application/x-lzma-compressed-tar")) || mime.inherits(QString::fromLatin1(application_lzma))) { + } else if (mime.inherits(QStringLiteral("application/x-lzma-compressed-tar")) || mime.inherits(QString::fromLatin1(application_lzma))) { // lzma compressed tar file (with possibly invalid file name), ask for xz filter d->mimetype = QString::fromLatin1(application_lzma); - } else if (mime.inherits(QString::fromLatin1("application/x-xz-compressed-tar")) || mime.inherits(QString::fromLatin1(application_xz))) { + } else if (mime.inherits(QStringLiteral("application/x-xz-compressed-tar")) || mime.inherits(QString::fromLatin1(application_xz))) { // xz compressed tar file (with possibly invalid name), ask for xz filter d->mimetype = QString::fromLatin1(application_xz); } @@ -253,6 +252,7 @@ return false; } } + longlink.truncate(qstrlen(longlink.constData())); return true; } @@ -273,10 +273,10 @@ readLonglink(buffer, longlink); switch (typeflag) { case 'L': - name = QFile::decodeName(longlink); + name = QFile::decodeName(longlink.constData()); break; case 'K': - symlink = QFile::decodeName(longlink); + symlink = QFile::decodeName(longlink.constData()); break; }/*end switch*/ } else { @@ -289,10 +289,11 @@ // there are names that are exactly 100 bytes long // and neither longlink nor \0 terminated (bug:101472) { - name = QFile::decodeName(QByteArray(buffer, 100)); + name = QFile::decodeName(QByteArray(buffer, qstrnlen(buffer, 100))); } if (symlink.isEmpty()) { - symlink = QFile::decodeName(QByteArray(buffer + 0x9d /*?*/, 100)); + char *symlinkBuffer = buffer + 0x9d /*?*/; + symlink = QFile::decodeName(QByteArray(symlinkBuffer, qstrnlen(symlinkBuffer, 100))); } return 0x200; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/src/kzip.cpp new/karchive-5.16.0/src/kzip.cpp --- old/karchive-5.15.0/src/kzip.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/src/kzip.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -1181,7 +1181,7 @@ return true; } - KCompressionDevice::CompressionType type = KFilterDev::compressionTypeForMimeType(QString::fromLatin1("application/x-gzip")); + KCompressionDevice::CompressionType type = KFilterDev::compressionTypeForMimeType(QStringLiteral("application/x-gzip")); d->m_currentDev = new KCompressionDevice(device(), false, type); Q_ASSERT(d->m_currentDev); if (!d->m_currentDev) { @@ -1406,7 +1406,7 @@ if (encoding() == 8) { // On top of that, create a device that uncompresses the zlib data - KCompressionDevice::CompressionType type = KFilterDev::compressionTypeForMimeType(QString::fromLatin1("application/x-gzip")); + KCompressionDevice::CompressionType type = KFilterDev::compressionTypeForMimeType(QStringLiteral("application/x-gzip")); KCompressionDevice *filterDev = new KCompressionDevice(limitedDev, true, type); if (!filterDev) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/tests/k7ziptest.cpp new/karchive-5.16.0/tests/k7ziptest.cpp --- old/karchive-5.15.0/tests/k7ziptest.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/tests/k7ziptest.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -27,7 +27,7 @@ QStringList::ConstIterator it = l.constBegin(); for (; it != l.constEnd(); ++it) { const KArchiveEntry *entry = dir->entry((*it)); - printf("mode=%07o %s %s %s %s%s %lld isdir=%d\n", entry->permissions(), entry->date().toString("yyyy-MM-dd hh:mm:ss").toLatin1().constData(), + printf("mode=%07o %s %s %s %s%s %lld isdir=%d\n", entry->permissions(), entry->date().toString(QStringLiteral("yyyy-MM-dd hh:mm:ss")).toLatin1().constData(), entry->user().toLatin1().constData(), entry->group().toLatin1().constData(), path.toLatin1().constData(), (*it).toLatin1().constData(), entry->isFile() ? static_cast<const KArchiveFile *>(entry)->size() : 0, entry->isDirectory()); @@ -71,7 +71,7 @@ const KArchiveDirectory *dir = k7z.directory(); //printf("calling recursive_print\n"); - recursive_print(dir, ""); + recursive_print(dir, QLatin1String("")); //printf("recursive_print called\n"); k7z.close(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/tests/krcctest.cpp new/karchive-5.16.0/tests/krcctest.cpp --- old/karchive-5.15.0/tests/krcctest.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/tests/krcctest.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -60,7 +60,7 @@ const KArchiveDirectory *dir = rcc.directory(); //printf("calling recursive_print\n"); - recursive_print(dir, ""); + recursive_print(dir, QLatin1String("")); //printf("recursive_print called\n"); rcc.close(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/tests/ktartest.cpp new/karchive-5.16.0/tests/ktartest.cpp --- old/karchive-5.15.0/tests/ktartest.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/tests/ktartest.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -60,7 +60,7 @@ const KArchiveDirectory *dir = tar.directory(); //printf("calling recursive_print\n"); - recursive_print(dir, ""); + recursive_print(dir, QLatin1String("")); //printf("recursive_print called\n"); tar.close(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.15.0/tests/kziptest.cpp new/karchive-5.16.0/tests/kziptest.cpp --- old/karchive-5.15.0/tests/kziptest.cpp 2015-10-03 12:11:51.000000000 +0200 +++ new/karchive-5.16.0/tests/kziptest.cpp 2015-11-09 08:55:01.000000000 +0100 @@ -33,7 +33,7 @@ entry->isDirectory() ? 0 : (static_cast<const KArchiveFile *>(entry))->size(), entry->isDirectory() ? 0 : (static_cast<const KArchiveFile *>(entry))->position(), entry->isDirectory(), - entry->symLinkTarget().isEmpty() ? "" : QString(" symlink: %1").arg(entry->symLinkTarget()).toLatin1().constData()); + entry->symLinkTarget().isEmpty() ? "" : QStringLiteral(" symlink: %1").arg(entry->symLinkTarget()).toLatin1().constData()); // if (!entry->isDirectory()) printf("%d", (static_cast<const KArchiveFile *>(entry))->size()); printf("\n"); @@ -119,13 +119,13 @@ } const QByteArray data = "This is the data for the main file"; - bool writeOk = zip.writeFile("maindoc.txt", data); + bool writeOk = zip.writeFile(QStringLiteral("maindoc.txt"), data); if (!writeOk) { qWarning() << "Write error (main file)"; return 1; } const QByteArray data2 = "This is the data for the other file"; - writeOk = zip.writeFile("subdir/other.txt", data2); + writeOk = zip.writeFile(QStringLiteral("subdir/other.txt"), data2); if (!writeOk) { qWarning() << "Write error (other file)"; return 1; @@ -146,7 +146,7 @@ return 1; } const KArchiveDirectory *dir = zip.directory(); - const KArchiveEntry *mainEntry = dir->entry("maindoc.txt"); + const KArchiveEntry *mainEntry = dir->entry(QStringLiteral("maindoc.txt")); Q_ASSERT(mainEntry && mainEntry->isFile()); const KArchiveFile *mainFile = static_cast<const KArchiveFile *>(mainEntry); qDebug() << "maindoc.txt:" << mainFile->data(); @@ -204,7 +204,7 @@ } const KArchiveDirectory *dir1 = zip1.directory(); - recursive_transfer(dir1, "", &zip2); + recursive_transfer(dir1, QLatin1String(""), &zip2); zip1.close(); zip2.close(); @@ -271,31 +271,31 @@ } QCoreApplication app(argc, argv); QString command = argv[1]; - if (command == "list") { + if (command == QLatin1String("list")) { return doList(QFile::decodeName(argv[2])); - } else if (command == "print-all") { + } else if (command == QLatin1String("print-all")) { return doPrintAll(QFile::decodeName(argv[2])); - } else if (command == "print") { + } else if (command == QLatin1String("print")) { if (argc != 4) { printf("usage: kziptest print archivename filename"); return 1; } return doPrint(QFile::decodeName(argv[2]), argv[3]); - } else if (command == "save") { + } else if (command == QLatin1String("save")) { return doSave(QFile::decodeName(argv[2])); - } else if (command == "load") { + } else if (command == QLatin1String("load")) { return doLoad(QFile::decodeName(argv[2])); - } else if (command == "write") { + } else if (command == QLatin1String("write")) { return doCompress(QFile::decodeName(argv[2])); - } else if (command == "read") { + } else if (command == QLatin1String("read")) { return doUncompress(QFile::decodeName(argv[2])); - } else if (command == "update") { + } else if (command == QLatin1String("update")) { if (argc != 4) { printf("usage: kziptest update archivename filename"); return 1; } return doUpdate(QFile::decodeName(argv[2]), QFile::decodeName(argv[3])); - } else if (command == "transfer") { + } else if (command == QLatin1String("transfer")) { if (argc != 4) { printf("usage: kziptest transfer sourcefile destfile"); return 1;