1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// Use of this source code is governed by a BSD-style license that can be 3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// found in the LICENSE file. 4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#ifndef CHROME_INSTALLER_UTIL_LZMA_UTIL_H_ 6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#define CHROME_INSTALLER_UTIL_LZMA_UTIL_H_ 7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#include <windows.h> 9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#include <set> 11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#include <string> 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#include "base/basictypes.h" 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollnamespace base { 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollclass FilePath; 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// This is a utility class that acts as a wrapper around LZMA SDK library 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollclass LzmaUtil { 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public: 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Utility method that does the job of calling OpenArchive(), UnPack() 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // and CloseArchive() in order. Returns error code (NO_ERROR if successful). 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll static int32 UnPackArchive(const std::wstring& archive, 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll const std::wstring& output_dir, 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll std::wstring* output_file); 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll LzmaUtil(); 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ~LzmaUtil(); 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll DWORD OpenArchive(const std::wstring& archivePath); 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Unpacks the archive to the given location 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll DWORD UnPack(const std::wstring& location); 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Unpacks the archive to the given location and returns the last file 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // extracted from archive. |single_file| is set to true iff only a single 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // file is extracted from archive. 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll DWORD UnPack(const std::wstring& location, 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll std::wstring* output_file); 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll void CloseArchive(); 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll protected: 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll bool CreateDirectory(const base::FilePath& dir); 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private: 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll HANDLE archive_handle_; 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll std::set<std::wstring> directories_created_; 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll DISALLOW_COPY_AND_ASSIGN(LzmaUtil); 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}; 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll#endif // CHROME_INSTALLER_UTIL_LZMA_UTIL_H_ 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll