summaryrefslogtreecommitdiff
blob: e63c14fd79aee6155e063a23fab448b6176bdf9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
diff -u -r kio/kio/kzip.cpp kio/kio/kzip.cpp
--- kio/kio/kzip.cpp	2003-01-03 02:58:47.000000000 -0200
+++ kio/kio/kzip.cpp	2003-01-29 22:16:15.000000000 -0200
@@ -332,27 +332,43 @@
 
             KArchiveEntry* entry;
             if ( isdir )
-                entry = new KArchiveDirectory( this, entryName, access, time, rootDir()->user(), rootDir()->group(), QString::null );
+            {
+                QString path = QDir::cleanDirPath( name.left( pos ) );
+                KArchiveEntry* ent = rootDir()->entry( path );
+                if ( ent && ent->isDirectory() )
+                {
+                    //kdDebug(7040) << "Directory already exists, NOT going to add it again" << endl;
+                    entry = 0L;
+                }
+                else
+                {
+                    entry = new KArchiveDirectory( this, entryName, access, time, rootDir()->user(), rootDir()->group(), QString::null );
+                    //kdDebug(7040) << "KArchiveDirectory created, entryName= " << entryName << ", name=" << name << endl;
+                }
+            }
             else
             {
                 entry = new KZipFileEntry( this, entryName, access, time, rootDir()->user(), rootDir()->group(), QString::null,
-                                          name, dataoffset, ucsize, cmethod, csize );
+                                        name, dataoffset, ucsize, cmethod, csize );
                 static_cast<KZipFileEntry *>(entry)->setHeaderStart( localheaderoffset );
-                //kdDebug(7040) << "KZipFileEntry created" << endl;
+                //kdDebug(7040) << "KZipFileEntry created, entryName= " << entryName << ", name=" << name << endl;
                 d->m_fileList.append( static_cast<KZipFileEntry *>( entry ) );
             }
 
-            if ( pos == -1 )
-            {
-                rootDir()->addEntry(entry);
-            }
-            else
-            {
-                // In some tar files we can find dir/./file => call cleanDirPath
-                QString path = QDir::cleanDirPath( name.left( pos ) );
-                // Ensure container directory exists, create otherwise
-                KArchiveDirectory * tdir = findOrCreate( path );
-                tdir->addEntry(entry);
+            if ( entry )
+            {
+                if ( pos == -1 )
+                {
+                    rootDir()->addEntry(entry);
+                }
+                else
+                {
+                    // In some tar files we can find dir/./file => call cleanDirPath
+                    QString path = QDir::cleanDirPath( name.left( pos ) );
+                    // Ensure container directory exists, create otherwise
+                    KArchiveDirectory * tdir = findOrCreate( path );
+                    tdir->addEntry(entry);
+                }
             }
 
             //calculate offset to next entry