summaryrefslogtreecommitdiffstats
path: root/tdeio
diff options
context:
space:
mode:
authorThomas McGuire <mcguire@kde.org>2014-10-05 23:51:39 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-10-05 23:51:39 -0500
commitddbe23e90d6684548fe9a952b01b3d6cbaf60a7c (patch)
tree2f1578c58b71aa8dc03de729a210f280d980ae88 /tdeio
parent03518d6339ad40346fdcf7ab4b66d8eb307a36a8 (diff)
downloadtdelibs-ddbe23e90d6684548fe9a952b01b3d6cbaf60a7c.tar.gz
tdelibs-ddbe23e90d6684548fe9a952b01b3d6cbaf60a7c.zip
Support writing empty directories to ZIP files.
Diffstat (limited to 'tdeio')
-rw-r--r--tdeio/tdeio/kzip.cpp15
-rw-r--r--tdeio/tdeio/kzip.h2
2 files changed, 16 insertions, 1 deletions
diff --git a/tdeio/tdeio/kzip.cpp b/tdeio/tdeio/kzip.cpp
index 23052ce51..91f36a085 100644
--- a/tdeio/tdeio/kzip.cpp
+++ b/tdeio/tdeio/kzip.cpp
@@ -1051,6 +1051,21 @@ bool KZip::closeArchive()
return true;
}
+bool KZip::writeDir(const TQString& name, const TQString& user, const TQString& group)
+{
+ // Zip files have no explicit directories, they are implicitly created during extraction time
+ // when file entries have paths in them.
+ // However, to support empty directories, we must create a dummy file entry which ends with '/'.
+ TQString dirName = name;
+ if (!name.endsWith("/")) {
+ dirName = dirName.append('/');
+ }
+
+ mode_t perm = 040755;
+ time_t the_time = time(0);
+ return writeFile(dirName, user, group, 0, perm, the_time, the_time, the_time, 0);
+}
+
// Doesn't need to be reimplemented anymore. Remove for KDE-4.0
bool KZip::writeFile( const TQString& name, const TQString& user, const TQString& group, uint size, const char* data )
{
diff --git a/tdeio/tdeio/kzip.h b/tdeio/tdeio/kzip.h
index 333736e21..4207e25d4 100644
--- a/tdeio/tdeio/kzip.h
+++ b/tdeio/tdeio/kzip.h
@@ -194,7 +194,7 @@ protected:
/**
* @internal Not needed for zip
*/
- virtual bool writeDir( const TQString& name, const TQString& user, const TQString& group) { Q_UNUSED(name); Q_UNUSED(user); Q_UNUSED(group); return true; }
+ virtual bool writeDir( const TQString& name, const TQString& user, const TQString& group);
// TODO(BIC) uncomment and make virtual for KDE 4.
// bool writeDir( const TQString& name, const TQString& user, const TQString& group,
// mode_t perm, time_t atime, time_t mtime, time_t ctime );