| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // -*- mode: C++ -*- |
| // |
| // Copyright (C) 2013-2020 Red Hat, Inc. |
| |
| /// @file |
| |
| #ifndef __ABG_LIBZIP_UTILS_H__ |
| #define __ABG_LIBZIP_UTILS_H__ |
| |
| #include <zip.h> |
| #include <memory> |
| |
| namespace abigail |
| { |
| |
| namespace zip_utils |
| { |
| |
| using std::shared_ptr; |
| using std::string; |
| |
| /// @brief Functor passed to shared_ptr constructor during |
| /// instantiation with zip* |
| /// |
| /// Its aim is to delete zip* managed by shared_ptr. |
| struct archive_deleter |
| { |
| void |
| operator()(zip* archive) |
| { |
| /// ??? Maybe check the return code of close and throw if the |
| /// close fails? But then callers must be prepared to handle |
| /// this. |
| zip_close(archive); |
| } |
| };//end archive_deleter |
| |
| /// @brief Functor passed to shared_ptr<zip_file>'s constructor. |
| /// |
| /// Its aim is to close (actually delete) the zip_file* managed by the |
| /// shared_ptr. |
| struct zip_file_deleter |
| { |
| void |
| operator()(zip_file*f) |
| { |
| zip_fclose(f); |
| } |
| }; |
| |
| typedef shared_ptr<zip> zip_sptr; |
| zip_sptr open_archive(const string& path, int flags, int *errorp); |
| |
| typedef shared_ptr<zip_file> zip_file_sptr; |
| zip_file_sptr open_file_in_archive(zip_sptr archive, |
| int file_index); |
| |
| }// end namespace zip |
| }// end namespace abigail |
| #endif //__ABG_LIBZIP_UTILS_H__ |