aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Thompson <grt@chromium.org>2020-07-18 01:29:39 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 21:07:09 -0700
commitf16a0ed58d771eb63f3fc59377d0979fb746cf04 (patch)
treef7257c903c0124bb454975f8d8dc644de1ff7019
parent928ca353efa36162979a205997e52266bb48f870 (diff)
downloadzucchini-f16a0ed58d771eb63f3fc59377d0979fb746cf04.tar.gz
Use FLAG_SHARE_DELETE when opening files in the installer.
This CL adds FLAG_SHARE_DELETE to many file operations in Chrome's installer; including in delta patch processing and archive extraction utilities. This allows processing on files that are held open to be deleted by another entity so that we can eventually hold temporary files open with FILE_FLAG_DELETE_ON_CLOSE. BUG=516207 Change-Id: I1cd03f6360dfcd61fcd2f09797f0923331076415 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2302109 Reviewed-by: Will Harris <wfh@chromium.org> Commit-Queue: Greg Thompson <grt@chromium.org> Cr-Commit-Position: refs/heads/master@{#789702} NOKEYCHECK=True GitOrigin-RevId: f176eba36c20d3f315e507eea7f306da3b58c2e4
-rw-r--r--zucchini_commands.cc15
-rw-r--r--zucchini_integration.cc12
2 files changed, 18 insertions, 9 deletions
diff --git a/zucchini_commands.cc b/zucchini_commands.cc
index 1abe08f..106b256 100644
--- a/zucchini_commands.cc
+++ b/zucchini_commands.cc
@@ -55,7 +55,8 @@ zucchini::status::Code MainApply(MainParams params) {
zucchini::status::Code MainRead(MainParams params) {
CHECK_EQ(1U, params.file_paths.size());
base::File input_file(params.file_paths[0],
- base::File::FLAG_OPEN | base::File::FLAG_READ);
+ base::File::FLAG_OPEN | base::File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
zucchini::MappedFileReader input(std::move(input_file));
if (input.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
@@ -74,7 +75,8 @@ zucchini::status::Code MainRead(MainParams params) {
zucchini::status::Code MainDetect(MainParams params) {
CHECK_EQ(1U, params.file_paths.size());
base::File input_file(params.file_paths[0],
- base::File::FLAG_OPEN | base::File::FLAG_READ);
+ base::File::FLAG_OPEN | base::File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
zucchini::MappedFileReader input(std::move(input_file));
if (input.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
@@ -93,14 +95,16 @@ zucchini::status::Code MainDetect(MainParams params) {
zucchini::status::Code MainMatch(MainParams params) {
CHECK_EQ(2U, params.file_paths.size());
using base::File;
- File old_file(params.file_paths[0], File::FLAG_OPEN | File::FLAG_READ);
+ File old_file(params.file_paths[0], File::FLAG_OPEN | File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
zucchini::MappedFileReader old_image(std::move(old_file));
if (old_image.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
<< old_image.error();
return zucchini::status::kStatusFileReadError;
}
- File new_file(params.file_paths[1], File::FLAG_OPEN | File::FLAG_READ);
+ File new_file(params.file_paths[1], File::FLAG_OPEN | File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
zucchini::MappedFileReader new_image(std::move(new_file));
if (new_image.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[1].value() << ": "
@@ -122,7 +126,8 @@ zucchini::status::Code MainMatch(MainParams params) {
zucchini::status::Code MainCrc32(MainParams params) {
CHECK_EQ(1U, params.file_paths.size());
base::File image_file(params.file_paths[0],
- base::File::FLAG_OPEN | base::File::FLAG_READ);
+ base::File::FLAG_OPEN | base::File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
zucchini::MappedFileReader image(std::move(image_file));
if (image.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
diff --git a/zucchini_integration.cc b/zucchini_integration.cc
index 97790a3..ff7e792 100644
--- a/zucchini_integration.cc
+++ b/zucchini_integration.cc
@@ -167,8 +167,10 @@ status::Code Generate(const base::FilePath& old_path,
bool is_raw,
std::string imposed_matches) {
using base::File;
- File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ);
- File new_file(new_path, File::FLAG_OPEN | File::FLAG_READ);
+ File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
+ File new_file(new_path, File::FLAG_OPEN | File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
File patch_file(patch_path, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
File::FLAG_CAN_DELETE_ON_CLOSE);
@@ -192,8 +194,10 @@ status::Code Apply(const base::FilePath& old_path,
const base::FilePath& new_path,
bool force_keep) {
using base::File;
- File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ);
- File patch_file(patch_path, File::FLAG_OPEN | File::FLAG_READ);
+ File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
+ File patch_file(patch_path, File::FLAG_OPEN | File::FLAG_READ |
+ base::File::FLAG_SHARE_DELETE);
File new_file(new_path, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
File::FLAG_CAN_DELETE_ON_CLOSE);