[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kio
From:       David Faure <faure () kde ! org>
Date:       2006-10-09 17:29:40
Message-ID: 1160414980.394421.8532.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 593968 by dfaure:

Unbreak KTar after the KTemporaryFile commit. Please, please, run make test after \
changing code in kdelibs! (the file->close() in writeBackTempFile was the problem)
CCMAIL: lee.jaison@gmail.com

Also detected wrong logic with QIODevice::ReadWrite tests while being in gdb.


 M  +14 -7     kio/ktar.cpp  
 M  +31 -12    tests/karchivetest.cpp  
 M  +1 -0      tests/karchivetest.h  


--- trunk/KDE/kdelibs/kio/kio/ktar.cpp #593967:593968
@@ -275,6 +275,8 @@
 
     if( filterDev ) {
         QFile* file = tmpFile;
+        Q_ASSERT(file->isOpen());
+        Q_ASSERT(file->openMode() & QIODevice::WriteOnly);
         file->seek(0);
         QByteArray buffer;
         buffer.resize(8*1024);
@@ -300,6 +302,8 @@
 
         file->flush();
         file->seek(0);
+        Q_ASSERT(file->isOpen());
+        Q_ASSERT(file->openMode() & QIODevice::ReadOnly);
     }
     else
         kDebug( 7041 ) << "KTar::openArchive: no filterdevice found!" << endl;
@@ -483,7 +487,6 @@
     QIODevice *dev = KFilterDev::deviceForFile( fileName, mimetype, forced );
     if( dev ) {
         QFile* file = tmpFile;
-        file->close();
         if ( !dev->open(QIODevice::WriteOnly) )
         {
             file->close();
@@ -492,6 +495,7 @@
         }
         if ( forced )
             static_cast<KFilterDev *>(dev)->setOrigFileName( origFileName );
+        file->seek(0);
         QByteArray buffer;
         buffer.resize(8*1024);
         qint64 len;
@@ -529,7 +533,7 @@
 bool KTar::doFinishWriting( qint64 size ) {
     // Write alignment
     int rest = size % 0x200;
-    if ( mode() & QIODevice::ReadWrite )
+    if ( ( mode() & QIODevice::ReadWrite ) == QIODevice::ReadWrite )
         d->tarEnd = device()->pos() + (rest ? 0x200 - rest : 0); // Record our new \
end of archive  if ( rest )
     {
@@ -685,7 +689,8 @@
 
     char buffer[ 0x201 ];
     memset( buffer, 0, 0x200 );
-    if ( mode() & QIODevice::ReadWrite ) device()->seek(d->tarEnd); // Go to end of \
archive as might have moved with a read +    if ( ( mode() & QIODevice::ReadWrite ) \
== QIODevice::ReadWrite ) +        device()->seek(d->tarEnd); // Go to end of archive \
as might have moved with a read  
     // provide converted stuff we need later on
     const QByteArray encodedFileName = QFile::encodeName(fileName);
@@ -737,7 +742,8 @@
 
     char buffer[ 0x201 ];
     memset( buffer, 0, 0x200 );
-    if ( mode() & QIODevice::ReadWrite ) device()->seek(d->tarEnd); // Go to end of \
archive as might have moved with a read +    if ( ( mode() & QIODevice::ReadWrite ) \
== QIODevice::ReadWrite ) +        device()->seek(d->tarEnd); // Go to end of archive \
as might have moved with a read  
     // provide converted stuff we need lateron
     QByteArray encodedDirname = QFile::encodeName(dirName);
@@ -760,7 +766,7 @@
 
     // Write header
     device()->write( buffer, 0x200 );
-    if ( mode() & QIODevice::ReadWrite )
+    if ( ( mode() & QIODevice::ReadWrite ) == QIODevice::ReadWrite )
         d->tarEnd = device()->pos();
 
     d->dirList.append( dirName ); // contains trailing slash
@@ -787,7 +793,8 @@
 
     char buffer[ 0x201 ];
     memset( buffer, 0, 0x200 );
-    if ( mode() & QIODevice::ReadWrite ) device()->seek(d->tarEnd); // Go to end of \
archive as might have moved with a read +    if ( ( mode() & QIODevice::ReadWrite ) \
== QIODevice::ReadWrite ) +        device()->seek(d->tarEnd); // Go to end of archive \
as might have moved with a read  
     // provide converted stuff we need lateron
     QByteArray encodedFileName = QFile::encodeName(fileName);
@@ -816,7 +823,7 @@
 
     // Write header
     bool retval = device()->write( buffer, 0x200 ) == 0x200;
-    if ( mode() & QIODevice::ReadWrite )
+    if ( ( mode() & QIODevice::ReadWrite ) == QIODevice::ReadWrite )
         d->tarEnd = device()->pos();
     return retval;
 }
--- trunk/KDE/kdelibs/kio/tests/karchivetest.cpp #593967:593968
@@ -174,8 +174,9 @@
     QCOMPARE(fileInfo4.size(), Q_INT64_C(29));
 }
 
-static const char* s_tarFileName = "karchivetest.tar.gz";
-static const char* s_tarMaxLengthFileName = "karchivetest-maxlength.tar.gz";
+static const char* s_tarFileName = "karchivetest.tar";
+static const char* s_tarGzFileName = "karchivetest.tar.gz";
+static const char* s_tarGzMaxLengthFileName = "karchivetest-maxlength.tar.gz";
 static const char* s_zipFileName = "karchivetest.zip";
 static const char* s_zipMaxLengthFileName = "karchivetest-maxlength.zip";
 
@@ -194,13 +195,31 @@
     QFileInfo fileInfo( QFile::encodeName( s_tarFileName ) );
     QVERIFY( fileInfo.exists() );
     // We can't check for an exact size because of the addLocalFile, whose data is \
system-dependent +    QVERIFY( fileInfo.size() > 450 );
+}
+
+void KArchiveTest::testCreateTarGz()
+{
+    KTar tar( s_tarGzFileName );
+
+    bool ok = tar.open( QIODevice::WriteOnly );
+    QVERIFY( ok );
+
+    writeTestFilesToArchive( &tar );
+
+    ok = tar.close();
+    QVERIFY( ok );
+
+    QFileInfo fileInfo( QFile::encodeName( s_tarGzFileName ) );
+    QVERIFY( fileInfo.exists() );
+    // We can't check for an exact size because of the addLocalFile, whose data is \
system-dependent  QVERIFY( fileInfo.size() > 350 );
 }
 
 void KArchiveTest::testReadTar()
 {
     // testCreateTar must have been run first.
-    KTar tar( s_tarFileName );
+    KTar tar( s_tarGzFileName );
 
     bool ok = tar.open( QIODevice::ReadOnly );
     QVERIFY( ok );
@@ -240,8 +259,8 @@
 void KArchiveTest::testUncompress()
 {
     // testCreateTar must have been run first.
-    QVERIFY( QFile::exists( s_tarFileName ) );
-    QIODevice *filterDev = KFilterDev::deviceForFile( s_tarFileName, \
"application/x-gzip", true ); +    QVERIFY( QFile::exists( s_tarGzFileName ) );
+    QIODevice *filterDev = KFilterDev::deviceForFile( s_tarGzFileName, \
"application/x-gzip", true );  QVERIFY( filterDev );
     QByteArray buffer;
     buffer.resize(8*1024);
@@ -265,7 +284,7 @@
 void KArchiveTest::testTarFileData()
 {
     // testCreateTar must have been run first.
-    KTar tar( s_tarFileName );
+    KTar tar( s_tarGzFileName );
     bool ok = tar.open( QIODevice::ReadOnly );
     QVERIFY( ok );
 
@@ -278,7 +297,7 @@
 void KArchiveTest::testTarCopyTo()
 {
     // testCreateTar must have been run first.
-    KTar tar( s_tarFileName );
+    KTar tar( s_tarGzFileName );
     bool ok = tar.open( QIODevice::ReadOnly );
     QVERIFY( ok );
 
@@ -290,7 +309,7 @@
 
 void KArchiveTest::testTarMaxLength()
 {
-    KTar tar( s_tarMaxLengthFileName );
+    KTar tar( s_tarGzMaxLengthFileName );
 
     bool ok = tar.open( QIODevice::WriteOnly );
     QVERIFY( ok );
@@ -476,8 +495,8 @@
 
 void KArchiveTest::cleanupTestCase()
 {
-    QVERIFY( QFile::remove("karchivetest-maxlength.tar.gz") );
-    QVERIFY( QFile::remove("karchivetest-maxlength.zip") );
-    QVERIFY( QFile::remove("karchivetest.tar.gz") );
-    QVERIFY( QFile::remove("karchivetest.zip") );
+    QFile::remove("karchivetest-maxlength.tar.gz");
+    QFile::remove("karchivetest-maxlength.zip");
+    QFile::remove("karchivetest.tar.gz");
+    QFile::remove("karchivetest.zip");
 }
--- trunk/KDE/kdelibs/kio/tests/karchivetest.h #593967:593968
@@ -27,6 +27,7 @@
     Q_OBJECT
 private Q_SLOTS:
     void testCreateTar();
+    void testCreateTarGz();
     void testReadTar();
     void testUncompress();
     void testTarFileData();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic