# HG changeset patch # User David Demelier # Date 1415713945 -3600 # Node ID 9b6990fa8fd91fb4d8fa90cab310dc3fe876dc03 # Parent 9be2cd100167406cbe43bdff173b0e67f54b7683 Zip: * add unchange functions * add password * add numEntries diff -r 9be2cd100167 -r 9b6990fa8fd9 C++/ZipArchive.cpp --- a/C++/ZipArchive.cpp Tue Nov 11 14:04:36 2014 +0100 +++ b/C++/ZipArchive.cpp Tue Nov 11 14:52:25 2014 +0100 @@ -69,7 +69,7 @@ { auto src = zip_source_file(archive, m_path.c_str(), m_start, m_length); - if (!src) + if (src == nullptr) throw std::runtime_error(zip_strerror(archive)); return src; @@ -246,3 +246,50 @@ if (zip_delete(m_handle.get(), index) < 0) throw std::runtime_error(zip_strerror(m_handle.get())); } + +ZipInt64 ZipArchive::numEntries(ZipFlags flags) const +{ + return zip_get_num_entries(m_handle.get(), flags); +} + +void ZipArchive::unchange(ZipUint64 index) +{ + if (zip_unchange(m_handle.get(), index) < 0) + throw std::runtime_error(zip_strerror(m_handle.get())); +} + +void ZipArchive::unchangeAll() +{ + if (zip_unchange_all(m_handle.get()) < 0) + throw std::runtime_error(zip_strerror(m_handle.get())); +} + +void ZipArchive::unchangeArchive() +{ + if (zip_unchange_archive(m_handle.get()) < 0) + throw std::runtime_error(zip_strerror(m_handle.get())); +} + +void ZipArchive::setDefaultPassword(const std::string &password) +{ + auto cstr = (password.size() > 0) ? password.c_str() : nullptr; + + if (zip_set_default_password(m_handle.get(), cstr) < 0) + throw std::runtime_error(zip_strerror(m_handle.get())); +} + +void ZipArchive::setFlag(ZipFlags flags, int value) +{ + if (zip_set_archive_flag(m_handle.get(), flags, value) < 0) + throw std::runtime_error(zip_strerror(m_handle.get())); +} + +int ZipArchive::getFlag(ZipFlags which, ZipFlags flags) const +{ + auto ret = zip_get_archive_flag(m_handle.get(), which, flags); + + if (ret < 0) + throw std::runtime_error(zip_strerror(m_handle.get())); + + return ret; +} diff -r 9be2cd100167 -r 9b6990fa8fd9 C++/ZipArchive.h --- a/C++/ZipArchive.h Tue Nov 11 14:04:36 2014 +0100 +++ b/C++/ZipArchive.h Tue Nov 11 14:52:25 2014 +0100 @@ -369,6 +369,56 @@ * @param index the file index in the archive */ void remove(ZipUint64 index); + + /** + * Get the number of entries in the archive. + * + * @param flags the optional flags + * @return the number of entries + */ + ZipInt64 numEntries(ZipFlags flags = 0) const; + + /** + * Revert changes on the file. + * + * @param index the index + */ + void unchange(ZipUint64 index); + + /** + * Revert all changes. + */ + void unchangeAll(); + + /** + * Revert changes to archive. + */ + void unchangeArchive(); + + /** + * Set the defaut password. + * + * @param password the password or empty to unset it + */ + void setDefaultPassword(const std::string &password = ""); + + /** + * Set an archive flag. + * + * @param flag the flag to set + * @param value the value + */ + void setFlag(ZipFlags flag, int value); + + /** + * Get an archive flag. + * + * @param which which flag + * @param flags the optional flags + * @return the value + */ + int getFlag(ZipFlags which, ZipFlags flags) const; + }; #endif // !_ZIP_ARCHIVE_H_