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