Merge pull request #3648 from jviotti/jviotti/fix/exec-file-asar-bat

🏁 Preserve file extension when extracting from asar
This commit is contained in:
Cheng Zhao 2015-12-02 10:45:24 +08:00
commit 0d50e08ed1
3 changed files with 18 additions and 7 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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_; }