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
|