blob: dc431d185a33b936c3589a057c63d583295ae134 [file] [log] [blame]
// 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__