Merge pull request #3648 from jviotti/jviotti/fix/exec-file-asar-bat
🏁 Preserve file extension when extracting from asar
	
	
This commit is contained in:
		
				commit
				
					
						0d50e08ed1
					
				
			
		
					 3 changed files with 18 additions and 7 deletions
				
			
		|  | @ -272,7 +272,8 @@ bool Archive::CopyFileOut(const base::FilePath& path, base::FilePath* out) { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   scoped_ptr<ScopedTemporaryFile> temp_file(new ScopedTemporaryFile); |   scoped_ptr<ScopedTemporaryFile> temp_file(new ScopedTemporaryFile); | ||||||
|   if (!temp_file->InitFromFile(&file_, info.offset, info.size)) |   base::FilePath::StringType ext = path.Extension(); | ||||||
|  |   if (!temp_file->InitFromFile(&file_, ext, info.offset, info.size)) | ||||||
|     return false; |     return false; | ||||||
| 
 | 
 | ||||||
| #if defined(OS_POSIX) | #if defined(OS_POSIX) | ||||||
|  |  | ||||||
|  | @ -28,20 +28,28 @@ ScopedTemporaryFile::~ScopedTemporaryFile() { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool ScopedTemporaryFile::Init() { | bool ScopedTemporaryFile::Init(const base::FilePath::StringType ext) { | ||||||
|   if (!path_.empty()) |   if (!path_.empty()) | ||||||
|     return true; |     return true; | ||||||
| 
 | 
 | ||||||
|   base::ThreadRestrictions::ScopedAllowIO allow_io; |   base::ThreadRestrictions::ScopedAllowIO allow_io; | ||||||
|   return base::CreateTemporaryFile(&path_); | 
 | ||||||
|  |   base::FilePath temporaryPath_; | ||||||
|  |   if (!base::CreateTemporaryFile(&temporaryPath_)) { | ||||||
|  |     return false; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   path_ = temporaryPath_.AddExtension(ext); | ||||||
|  |   return base::Move(temporaryPath_, path_); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool ScopedTemporaryFile::InitFromFile(base::File* src, | bool ScopedTemporaryFile::InitFromFile(base::File* src, | ||||||
|  |                                        const base::FilePath::StringType ext, | ||||||
|                                        uint64 offset, uint64 size) { |                                        uint64 offset, uint64 size) { | ||||||
|   if (!src->IsValid()) |   if (!src->IsValid()) | ||||||
|     return false; |     return false; | ||||||
| 
 | 
 | ||||||
|   if (!Init()) |   if (!Init(ext)) | ||||||
|     return false; |     return false; | ||||||
| 
 | 
 | ||||||
|   std::vector<char> buf(size); |   std::vector<char> buf(size); | ||||||
|  |  | ||||||
|  | @ -22,11 +22,13 @@ class ScopedTemporaryFile { | ||||||
|   ScopedTemporaryFile(); |   ScopedTemporaryFile(); | ||||||
|   virtual ~ScopedTemporaryFile(); |   virtual ~ScopedTemporaryFile(); | ||||||
| 
 | 
 | ||||||
|   // Init an empty temporary file.
 |   // Init an empty temporary file with a certain extension.
 | ||||||
|   bool Init(); |   bool Init(const base::FilePath::StringType ext); | ||||||
| 
 | 
 | ||||||
|   // Init an temporary file and fill it with content of |path|.
 |   // Init an temporary file and fill it with content of |path|.
 | ||||||
|   bool InitFromFile(base::File* src, uint64 offset, uint64 size); |   bool InitFromFile(base::File* src, | ||||||
|  |                     const base::FilePath::StringType ext, | ||||||
|  |                     uint64 offset, uint64 size); | ||||||
| 
 | 
 | ||||||
|   base::FilePath path() const { return path_; } |   base::FilePath path() const { return path_; } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Cheng Zhao
				Cheng Zhao