15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef THIRD_PARTY_ZLIB_GOOGLE_ZIP_INTERNAL_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define THIRD_PARTY_ZLIB_GOOGLE_ZIP_INTERNAL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <windows.h> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_SYSTEM_MINIZIP) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <minizip/unzip.h> 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <minizip/zip.h> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/zlib/contrib/minizip/unzip.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/zlib/contrib/minizip/zip.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace base { 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class FilePath; 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Utility functions and constants used internally for the zip file 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// library in the directory. Don't use them outside of the library. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace zip { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Opens the given file name in UTF-8 for unzipping, with some setup for 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unzFile OpenForUnzipping(const std::string& file_name_utf8); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Opens the file referred to by |zip_fd| for unzipping. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unzFile OpenFdForUnzipping(int zip_fd); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Opens the file referred to by |zip_handle| for unzipping. 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)unzFile OpenHandleForUnzipping(HANDLE zip_handle); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates a custom unzFile object which reads data from the specified string. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This custom unzFile object overrides the I/O API functions of zlib so it can 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// read data from the specified string. 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)unzFile PrepareMemoryForUnzipping(const std::string& data); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Opens the given file name in UTF-8 for zipping, with some setup for 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows. |append_flag| will be passed to zipOpen2(). 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)zipFile OpenForZipping(const std::string& file_name_utf8, int append_flag); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_POSIX) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Opens the file referred to by |zip_fd| for zipping. |append_flag| will be 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// passed to zipOpen2(). 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)zipFile OpenFdForZipping(int zip_fd, int append_flag); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Returns a zip_fileinfo with the last modification date of |path| set. 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)zip_fileinfo GetFileInfoForZipping(const base::FilePath& path); 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Wrapper around zipOpenNewFileInZip4 which passes most common options. 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool ZipOpenNewFileInZip(zipFile zip_file, 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& str_path, 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const zip_fileinfo* file_info); 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kZipMaxPath = 256; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kZipBufSize = 8192; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace zip 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // THIRD_PARTY_ZLIB_GOOGLE_ZIP_INTERNAL_H_ 75