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);
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;
#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())
return true;
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,
const base::FilePath::StringType ext,
uint64 offset, uint64 size) {
if (!src->IsValid())
return false;
if (!Init())
if (!Init(ext))
return false;
std::vector<char> buf(size);

View file

@ -22,11 +22,13 @@ class ScopedTemporaryFile {
ScopedTemporaryFile();
virtual ~ScopedTemporaryFile();
// Init an empty temporary file.
bool Init();
// Init an empty temporary file with a certain extension.
bool Init(const base::FilePath::StringType ext);
// 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_; }