Home | History | Annotate | Download | only in util
      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 
     15 namespace base {
     16 class FilePath;
     17 }
     18 
     19 // This is a utility class that acts as a wrapper around LZMA SDK library
     20 class 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