1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_INSTALLER_UTIL_LZMA_UTIL_H_
6#define CHROME_INSTALLER_UTIL_LZMA_UTIL_H_
7
8#include <windows.h>
9
10#include <set>
11#include <string>
12
13#include "base/basictypes.h"
14
15namespace base {
16class FilePath;
17}
18
19// This is a utility class that acts as a wrapper around LZMA SDK library
20class LzmaUtil {
21 public:
22  // Utility method that does the job of calling OpenArchive(), UnPack()
23  // and CloseArchive() in order. Returns error code (NO_ERROR if successful).
24  static int32 UnPackArchive(const std::wstring& archive,
25                             const std::wstring& output_dir,
26                             std::wstring* output_file);
27
28  LzmaUtil();
29  ~LzmaUtil();
30
31  DWORD OpenArchive(const std::wstring& archivePath);
32
33  // Unpacks the archive to the given location
34  DWORD UnPack(const std::wstring& location);
35
36  // Unpacks the archive to the given location and returns the last file
37  // extracted from archive. |single_file| is set to true iff only a single
38  // file is extracted from archive.
39  DWORD UnPack(const std::wstring& location,
40               std::wstring* output_file);
41
42  void CloseArchive();
43
44 protected:
45  bool CreateDirectory(const base::FilePath& dir);
46
47 private:
48  HANDLE archive_handle_;
49  std::set<std::wstring> directories_created_;
50
51  DISALLOW_COPY_AND_ASSIGN(LzmaUtil);
52};
53
54#endif  // CHROME_INSTALLER_UTIL_LZMA_UTIL_H_
55