// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_ZLIB_GOOGLE_ZIP_READER_H_ #define THIRD_PARTY_ZLIB_GOOGLE_ZIP_READER_H_ #include <stddef.h> #include <stdint.h> #include <limits> #include <memory> #include <string> #include <string_view> #include "base/files/file.h" #include "base/files/file_path.h" #include "base/functional/callback.h" #include "base/memory/weak_ptr.h" #include "base/numerics/safe_conversions.h" #include "base/time/time.h" #if defined(USE_SYSTEM_MINIZIP) #include <minizip/unzip.h> #else #include "third_party/zlib/contrib/minizip/unzip.h" #endif namespace zip { // A delegate interface used to stream out an entry; see // ZipReader::ExtractCurrentEntry. class WriterDelegate { … }; // This class is used for reading ZIP archives. A typical use case of this class // is to scan entries in a ZIP archive and extract them. The code will look // like: // // ZipReader reader; // if (!reader.Open(zip_path)) { // // Cannot open // return; // } // // while (const ZipReader::entry* entry = reader.Next()) { // auto writer = CreateFilePathWriterDelegate(extract_dir, entry->path); // if (!reader.ExtractCurrentEntry(writer)) { // // Cannot extract // return; // } // } // // if (!reader.ok()) { // // Error while enumerating entries // return; // } // class ZipReader { … }; // A writer delegate that writes to a given File. It is recommended that this // file be initially empty. class FileWriterDelegate : public WriterDelegate { … }; // A writer delegate that creates and writes a file at a given path. This does // not overwrite any existing file. class FilePathWriterDelegate : public FileWriterDelegate { … }; } // namespace zip #endif // THIRD_PARTY_ZLIB_GOOGLE_ZIP_READER_H_