diff options
author | Thomas McGuire <[email protected]> | 2014-10-05 23:51:39 -0500 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2014-10-05 23:51:39 -0500 |
commit | ddbe23e90d6684548fe9a952b01b3d6cbaf60a7c (patch) | |
tree | 2f1578c58b71aa8dc03de729a210f280d980ae88 /tdeio | |
parent | 03518d6339ad40346fdcf7ab4b66d8eb307a36a8 (diff) | |
download | tdelibs-ddbe23e90d6684548fe9a952b01b3d6cbaf60a7c.tar.gz tdelibs-ddbe23e90d6684548fe9a952b01b3d6cbaf60a7c.zip |
Support writing empty directories to ZIP files.
Diffstat (limited to 'tdeio')
-rw-r--r-- | tdeio/tdeio/kzip.cpp | 15 | ||||
-rw-r--r-- | tdeio/tdeio/kzip.h | 2 |
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 ); |