aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKelvin Zhang <zhangkelvin@google.com>2021-11-19 20:34:45 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-11-19 20:34:45 +0000
commit11a3a4cd409d6e0f4ccfcfb97cc962eeaeddde00 (patch)
treee796a37895a74a9ecffab0478f63011c8711b73c
parent8be98142ecdba40b2ea9be10b11a23f4e6b67b05 (diff)
parent1de48bf84e890cc22f397ccece799fc67554a77f (diff)
downloadzucchini-master.tar.gz
Merge remote-tracking branch 'aosp/upstream-main' am: a2c45bea23 am: 0d1306182f am: dd0b6e3bf2 am: 1de48bf84eHEADt_frc_tz4_330443010t_frc_swc_330443040t_frc_swc_330443010t_frc_sta_330443010t_frc_sch_330443040t_frc_sch_330443010t_frc_res_330443000t_frc_per_330444010t_frc_odp_330442040t_frc_odp_330442000t_frc_neu_330443030t_frc_neu_330443000t_frc_net_330443000t_frc_med_330443030t_frc_ips_330443010t_frc_ext_330443000t_frc_doc_330543000t_frc_doc_330443060t_frc_doc_330443000t_frc_con_330443020t_frc_cbr_330443000t_frc_ase_330444010t_frc_art_330443060t_frc_adb_330444000frc_340821000frc_340819280frc_340819220frc_340819190frc_340819030frc_340819020frc_340819010frc_340818170frc_340818110android-vts-14.0_r3android-vts-14.0_r2android-vts-14.0_r1android-u-beta-1-gplandroid-security-14.0.0_r7android-security-14.0.0_r6android-security-14.0.0_r5android-security-14.0.0_r4android-security-14.0.0_r3android-security-14.0.0_r2android-security-14.0.0_r1android-platform-14.0.0_r6android-platform-14.0.0_r5android-platform-14.0.0_r4android-platform-14.0.0_r3android-platform-14.0.0_r2android-platform-14.0.0_r1android-cts-14.0_r3android-cts-14.0_r2android-cts-14.0_r1android-14.0.0_r9android-14.0.0_r8android-14.0.0_r7android-14.0.0_r6android-14.0.0_r5android-14.0.0_r4android-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r3android-14.0.0_r29android-14.0.0_r28android-14.0.0_r27android-14.0.0_r26android-14.0.0_r25android-14.0.0_r24android-14.0.0_r23android-14.0.0_r22android-14.0.0_r21android-14.0.0_r20android-14.0.0_r2android-14.0.0_r19android-14.0.0_r18android-14.0.0_r17android-14.0.0_r16android-14.0.0_r15android-14.0.0_r14android-14.0.0_r13android-14.0.0_r12android-14.0.0_r11android-14.0.0_r10android-14.0.0_r1android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r57android-13.0.0_r56android-13.0.0_r55android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android-13.0.0_r30android-13.0.0_r29android-13.0.0_r28android-13.0.0_r27android-13.0.0_r24android-13.0.0_r23android-13.0.0_r22android-13.0.0_r21android-13.0.0_r20android-13.0.0_r19android-13.0.0_r18android-13.0.0_r17android-13.0.0_r16aml_wif_341610000aml_wif_341510000aml_wif_341410080aml_wif_341310010aml_wif_341110010aml_wif_341011010aml_wif_340913010aml_wif_331910020aml_wif_331810010aml_wif_331710030aml_wif_331613000aml_wif_331511020aml_wif_331414000aml_wif_331310070aml_wif_331112000aml_wif_331016070aml_wif_330910030aml_wif_330810040aml_uwb_341513070aml_uwb_341511050aml_uwb_341310300aml_uwb_341310030aml_uwb_341111010aml_uwb_341011000aml_uwb_331910010aml_uwb_331820070aml_uwb_331613010aml_uwb_331611010aml_uwb_331410010aml_uwb_331310030aml_uwb_331115000aml_uwb_331015040aml_uwb_330810010aml_tz5_341510070aml_tz5_341510050aml_tz5_341510010aml_tz4_332714070aml_tz4_332714050aml_tz4_332714010aml_tz4_331910000aml_tz4_331314030aml_tz4_331314020aml_tz4_331314010aml_tz4_331012050aml_tz4_331012040aml_tz4_331012000aml_tet_341610020aml_tet_341511010aml_tet_341411060aml_tet_341310230aml_tet_341112070aml_tet_341010040aml_tet_340913030aml_tet_331910040aml_tet_331820050aml_tet_331711040aml_tet_331511160aml_tet_331511000aml_tet_331412030aml_tet_331312080aml_tet_331117000aml_tet_331012080aml_tet_330911010aml_tet_330812150aml_swc_341619000aml_swc_341513600aml_swc_341312300aml_swc_341312020aml_swc_341111000aml_swc_341011020aml_swc_340922010aml_swc_331911000aml_swc_331712000aml_swc_331612000aml_swc_331511000aml_swc_331410000aml_swc_331318000aml_swc_331116000aml_swc_331012020aml_sta_341615000aml_sta_341511040aml_sta_341410000aml_sta_341311010aml_sta_341114000aml_sta_341111000aml_sta_341010020aml_sta_340912000aml_sta_340911000aml_sta_331910000aml_sta_331811000aml_sta_331711010aml_sta_331610000aml_sta_331511000aml_sta_331410000aml_sta_331311000aml_sta_331010010aml_sta_330910000aml_sdk_341510000aml_sdk_341410000aml_sdk_341110080aml_sdk_341110000aml_sdk_341010000aml_sdk_340912010aml_sdk_331812000aml_sdk_331811100aml_sdk_331811000aml_sdk_331412000aml_sdk_331410000aml_sdk_331310010aml_sdk_331111000aml_sdk_330810050aml_sdk_330810010aml_sch_341510000aml_sch_331113000aml_sch_331111000aml_rkp_341510000aml_rkp_341311000aml_rkp_341114000aml_rkp_341015010aml_rkp_341012000aml_res_341510000aml_res_341410010aml_res_341311030aml_res_341110000aml_res_340912000aml_res_331820000aml_res_331611010aml_res_331512000aml_res_331314010aml_res_331114000aml_res_331011050aml_res_330910000aml_res_330810000aml_per_341614000aml_per_341510010aml_per_341410020aml_per_341311000aml_per_341110020aml_per_341110010aml_per_341011100aml_per_341011020aml_per_340916010aml_per_331913010aml_per_331812030aml_per_331710050aml_per_331611010aml_per_331512020aml_per_331411000aml_per_331313010aml_per_331115020aml_per_331019040aml_per_330912010aml_per_330811030aml_odp_341610000aml_neu_341510000aml_neu_341010080aml_neu_341010000aml_neu_331310000aml_neu_331113000aml_net_341610030aml_net_341510050aml_net_341510000aml_net_341411030aml_net_341311010aml_net_341310020aml_net_341111030aml_net_341014000aml_net_340913000aml_net_331910030aml_net_331812010aml_net_331710000aml_net_331610000aml_net_331412000aml_net_331313030aml_net_331313010aml_net_331110020aml_net_331011030aml_net_330910010aml_net_330811010aml_mpr_341614010aml_mpr_341511070aml_mpr_341411070aml_mpr_341313030aml_mpr_341111030aml_mpr_341111020aml_mpr_341015090aml_mpr_341015030aml_mpr_340919000aml_mpr_331918000aml_mpr_331812020aml_mpr_331711020aml_mpr_331613010aml_mpr_331512020aml_mpr_331412040aml_mpr_331311080aml_mpr_331112050aml_mpr_331112030aml_mpr_331011070aml_mpr_330911040aml_mpr_330811020aml_med_341619000aml_med_341513600aml_med_341312300aml_med_341312020aml_med_341111000aml_med_341011000aml_med_340922010aml_med_331911000aml_med_331712010aml_med_331612000aml_med_331511000aml_med_331410000aml_med_331318000aml_med_331115000aml_med_331012020aml_ips_341611000aml_ips_341510000aml_ips_340914280aml_ips_340914200aml_ips_340914000aml_ips_331910010aml_ips_331312000aml_ips_331310000aml_ips_331111030aml_ips_331014020aml_hef_341613000aml_hef_341512030aml_hef_341415040aml_hef_341311010aml_hef_341114030aml_go_wif_330911000aml_go_uwb_330912000aml_go_tz4_330912000aml_go_tet_330914010aml_go_swc_330913000aml_go_sta_330911000aml_go_sdk_330810000aml_go_sch_330911000aml_go_res_330912000aml_go_per_330912000aml_go_odp_330913000aml_go_odp_330912000aml_go_neu_330912000aml_go_net_330913000aml_go_mpr_330912000aml_go_med_330913000aml_go_ips_330911000aml_go_ext_330912000aml_go_doc_330912000aml_go_con_330913000aml_go_cbr_330912000aml_go_ase_330913000aml_go_art_330913000aml_go_ads_330915100aml_go_ads_330915000aml_go_ads_330913000aml_go_adb_330913000aml_ext_341620040aml_ext_341518010aml_ext_341414010aml_ext_341317010aml_ext_341131030aml_ext_341027030aml_ext_331814220aml_ext_331412000aml_ext_331312000aml_ext_331112010aml_ext_331012020aml_doc_341610010aml_doc_341510050aml_doc_341312010aml_doc_341112000aml_doc_341012000aml_doc_340916000aml_doc_331120000aml_con_341614000aml_con_341511080aml_con_341410300aml_con_341310090aml_con_341110000aml_con_331413000aml_con_331411000aml_con_331312000aml_con_331115000aml_con_331011010aml_cfg_341510000aml_cbr_341610000aml_cbr_341510010aml_cbr_341410010aml_cbr_341311010aml_cbr_341110000aml_cbr_341011000aml_cbr_340914000aml_cbr_331910000aml_cbr_331810000aml_cbr_331710020aml_cbr_331610010aml_cbr_331510000aml_cbr_331411000aml_cbr_331310010aml_cbr_331111030aml_cbr_331013010aml_cbr_330911010aml_cbr_330810000aml_ase_341510000aml_ase_341410000aml_ase_341310010aml_ase_341113000aml_ase_340913000aml_ase_331311020aml_ase_331112000aml_ase_331011020aml_art_341615020aml_art_341514450aml_art_341514410aml_art_341411300aml_art_341311100aml_art_341110110aml_art_341110060aml_art_341010050aml_art_340915060aml_art_331813100aml_art_331813010aml_art_331711080aml_art_331612010aml_art_331413030aml_art_331314010aml_art_331113000aml_art_331012050aml_ads_341615050aml_ads_341517040aml_ads_341413000aml_ads_341316030aml_ads_341131050aml_ads_341027030aml_ads_340915050aml_ads_331920180aml_ads_331814200aml_ads_331710270aml_ads_331611190aml_ads_331511020aml_ads_331418080aml_ads_331131000aml_adb_341520010aml_adb_341517070aml_adb_340912530aml_adb_340912350aml_adb_340912200aml_adb_340912000aml_adb_331610000aml_adb_331314020aml_adb_331113120aml_adb_331011050aml_adb_331011040mastermain-16k-with-phonesmain-16kmainandroid14-tests-releaseandroid14-security-releaseandroid14-s2-releaseandroid14-s1-releaseandroid14-releaseandroid14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-releaseandroid14-qpr1-s2-releaseandroid14-qpr1-releaseandroid14-platform-releaseandroid14-mainline-wifi-releaseandroid14-mainline-uwb-releaseandroid14-mainline-tethering-releaseandroid14-mainline-sdkext-releaseandroid14-mainline-resolv-releaseandroid14-mainline-permission-releaseandroid14-mainline-os-statsd-releaseandroid14-mainline-networking-releaseandroid14-mainline-mediaprovider-releaseandroid14-mainline-media-swcodec-releaseandroid14-mainline-media-releaseandroid14-mainline-healthfitness-releaseandroid14-mainline-extservices-releaseandroid14-mainline-conscrypt-releaseandroid14-mainline-cellbroadcast-releaseandroid14-mainline-art-releaseandroid14-mainline-appsearch-releaseandroid14-mainline-adservices-releaseandroid14-mainline-adbd-releaseandroid14-gsiandroid14-devandroid14-d1-s7-releaseandroid14-d1-s6-releaseandroid14-d1-s5-releaseandroid14-d1-s4-releaseandroid14-d1-s3-releaseandroid14-d1-s2-releaseandroid14-d1-s1-releaseandroid14-d1-releaseandroid13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-qpr1-s8-releaseandroid13-qpr1-s7-releaseandroid13-qpr1-s6-releaseandroid13-qpr1-s5-releaseandroid13-qpr1-s4-releaseandroid13-qpr1-s3-releaseandroid13-qpr1-s2-releaseandroid13-qpr1-s1-releaseandroid13-qpr1-releaseandroid13-mainline-wifi-releaseandroid13-mainline-uwb-releaseandroid13-mainline-tzdata4-releaseandroid13-mainline-tethering-releaseandroid13-mainline-sdkext-releaseandroid13-mainline-scheduling-releaseandroid13-mainline-resolv-releaseandroid13-mainline-permission-releaseandroid13-mainline-os-statsd-releaseandroid13-mainline-networking-releaseandroid13-mainline-mediaprovider-releaseandroid13-mainline-media-swcodec-releaseandroid13-mainline-media-releaseandroid13-mainline-ipsec-releaseandroid13-mainline-go-wifi-releaseandroid13-mainline-go-uwb-releaseandroid13-mainline-go-tzdata4-releaseandroid13-mainline-go-tethering-releaseandroid13-mainline-go-sdkext-releaseandroid13-mainline-go-scheduling-releaseandroid13-mainline-go-resolv-releaseandroid13-mainline-go-permission-releaseandroid13-mainline-go-os-statsd-releaseandroid13-mainline-go-odp-releaseandroid13-mainline-go-neuralnetworks-releaseandroid13-mainline-go-networking-releaseandroid13-mainline-go-mediaprovider-releaseandroid13-mainline-go-media-swcodec-releaseandroid13-mainline-go-media-releaseandroid13-mainline-go-ipsec-releaseandroid13-mainline-go-extservices-releaseandroid13-mainline-go-documentsui-releaseandroid13-mainline-go-conscrypt-releaseandroid13-mainline-go-cellbroadcast-releaseandroid13-mainline-go-art-releaseandroid13-mainline-go-appsearch-releaseandroid13-mainline-go-adservices-releaseandroid13-mainline-go-adbd-releaseandroid13-mainline-extservices-releaseandroid13-mainline-conscrypt-releaseandroid13-mainline-cellbroadcast-releaseandroid13-mainline-art-releaseandroid13-mainline-appsearch-releaseandroid13-mainline-adservices-releaseandroid13-mainline-adbd-releaseandroid13-frc-scheduling-releaseandroid13-frc-resolv-releaseandroid13-frc-permission-releaseandroid13-frc-os-statsd-releaseandroid13-frc-odp-releaseandroid13-frc-neuralnetworks-releaseandroid13-frc-networking-releaseandroid13-frc-media-swcodec-releaseandroid13-frc-media-releaseandroid13-frc-ipsec-releaseandroid13-frc-extservices-releaseandroid13-frc-documentsui-releaseandroid13-frc-conscrypt-releaseandroid13-frc-cellbroadcast-releaseandroid13-frc-art-releaseandroid13-frc-adbd-releaseandroid13-devandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-releaseandroid13-d3-s1-releaseandroid13-d2-releaseaml_tz5_341510010aml_tz4_332714010
Original change: https://android-review.googlesource.com/c/platform/external/zucchini/+/1895428 Change-Id: I4f5c6a4883719a69ec8ae69173cb1a1be6362af5
-rw-r--r--BUILD.gn1
-rw-r--r--aosp/include/base/check_op.h2
l---------aosp/include/components/zucchini/version_info.h1
-rw-r--r--element_detection.cc2
-rw-r--r--main_utils.cc2
-rw-r--r--mapped_file_unittest.cc4
-rw-r--r--patch_read_write_unittest.cc1
-rw-r--r--patch_reader.cc1
-rw-r--r--patch_utils.h12
-rw-r--r--patch_writer.cc1
-rw-r--r--version_info.h30
-rw-r--r--zucchini_commands.cc10
-rw-r--r--zucchini_integration.cc13
13 files changed, 54 insertions, 26 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 54b06ab..9fa2ea9 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -97,6 +97,7 @@ static_library("zucchini_lib") {
"type_elf.h",
"type_win_pe.h",
"typed_value.h",
+ "version_info.h",
"zucchini.h",
"zucchini_apply.cc",
"zucchini_apply.h",
diff --git a/aosp/include/base/check_op.h b/aosp/include/base/check_op.h
index d72e4a4..47162e6 100644
--- a/aosp/include/base/check_op.h
+++ b/aosp/include/base/check_op.h
@@ -19,4 +19,6 @@
#include <base/logging.h>
+#define FLAG_WIN_SHARE_DELETE FLAG_SHARE_DELETE
+
#endif /* __ZUCCHINI_AOSP_BASE_CHECK_OP_H */
diff --git a/aosp/include/components/zucchini/version_info.h b/aosp/include/components/zucchini/version_info.h
new file mode 120000
index 0000000..be765ba
--- /dev/null
+++ b/aosp/include/components/zucchini/version_info.h
@@ -0,0 +1 @@
+../../../../version_info.h \ No newline at end of file
diff --git a/element_detection.cc b/element_detection.cc
index 5548610..2d260e4 100644
--- a/element_detection.cc
+++ b/element_detection.cc
@@ -9,7 +9,7 @@
#include "components/zucchini/buildflags.h"
#include "components/zucchini/disassembler.h"
#include "components/zucchini/disassembler_no_op.h"
-#include "components/zucchini/patch_utils.h"
+#include "components/zucchini/version_info.h"
#if BUILDFLAG(ENABLE_DEX)
#include "components/zucchini/disassembler_dex.h"
diff --git a/main_utils.cc b/main_utils.cc
index b499817..48b52e1 100644
--- a/main_utils.cc
+++ b/main_utils.cc
@@ -22,7 +22,7 @@
#include "base/time/time.h"
#include "build/build_config.h"
#include "components/zucchini/io_utils.h"
-#include "components/zucchini/patch_utils.h"
+#include "components/zucchini/version_info.h"
#include "components/zucchini/zucchini_commands.h"
#if defined(OS_WIN)
diff --git a/mapped_file_unittest.cc b/mapped_file_unittest.cc
index e3ee6dc..56014b0 100644
--- a/mapped_file_unittest.cc
+++ b/mapped_file_unittest.cc
@@ -33,7 +33,7 @@ TEST_F(MappedFileWriterTest, Keep) {
{
using base::File;
File file(file_path_, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
- File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
+ File::FLAG_WRITE | File::FLAG_WIN_SHARE_DELETE |
File::FLAG_CAN_DELETE_ON_CLOSE);
MappedFileWriter file_writer(file_path_, std::move(file), 10);
EXPECT_FALSE(file_writer.HasError());
@@ -49,7 +49,7 @@ TEST_F(MappedFileWriterTest, DeleteOnClose) {
{
using base::File;
File file(file_path_, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
- File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
+ File::FLAG_WRITE | File::FLAG_WIN_SHARE_DELETE |
File::FLAG_CAN_DELETE_ON_CLOSE);
MappedFileWriter file_writer(file_path_, std::move(file), 10);
EXPECT_FALSE(file_writer.HasError());
diff --git a/patch_read_write_unittest.cc b/patch_read_write_unittest.cc
index 25e1fb0..cce590d 100644
--- a/patch_read_write_unittest.cc
+++ b/patch_read_write_unittest.cc
@@ -11,6 +11,7 @@
#include <utility>
#include <vector>
+#include "components/zucchini/version_info.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace zucchini {
diff --git a/patch_reader.cc b/patch_reader.cc
index 8fd9b57..50ee199 100644
--- a/patch_reader.cc
+++ b/patch_reader.cc
@@ -11,6 +11,7 @@
#include "components/zucchini/algorithm.h"
#include "components/zucchini/crc32.h"
#include "components/zucchini/element_detection.h"
+#include "components/zucchini/version_info.h"
namespace zucchini {
diff --git a/patch_utils.h b/patch_utils.h
index 822fedc..82b2b48 100644
--- a/patch_utils.h
+++ b/patch_utils.h
@@ -11,20 +11,10 @@
#include <type_traits>
#include "components/zucchini/image_utils.h"
+#include "components/zucchini/version_info.h"
namespace zucchini {
-// A change in major version indicates breaking changes such that a patch
-// definitely cannot be applied by a zucchini binary whose major version doesn't
-// match.
-enum : uint16_t { kMajorVersion = 1 };
-// A change in minor version indicates possibly breaking changes at the element
-// level, such that it may not be possible to apply a patch whose minor version
-// doesn't match this version. To determine if a given patch may be applied with
-// this version, VerifyPatch() should be called.
-enum : uint16_t { kMinorVersion = 0 };
-enum : uint16_t { kInvalidVersion = 0xffff };
-
// A Zucchini 'ensemble' patch is the concatenation of a patch header with a
// list of patch 'elements', each containing data for patching individual
// elements.
diff --git a/patch_writer.cc b/patch_writer.cc
index 04f3244..186ece8 100644
--- a/patch_writer.cc
+++ b/patch_writer.cc
@@ -11,6 +11,7 @@
#include "base/numerics/safe_conversions.h"
#include "components/zucchini/crc32.h"
#include "components/zucchini/element_detection.h"
+#include "components/zucchini/version_info.h"
namespace zucchini {
diff --git a/version_info.h b/version_info.h
new file mode 100644
index 0000000..c6d2fac
--- /dev/null
+++ b/version_info.h
@@ -0,0 +1,30 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_ZUCCHINI_VERSION_INFO_H_
+#define COMPONENTS_ZUCCHINI_VERSION_INFO_H_
+
+// This file serves as a stable location for main Zucchini version constants,
+// whose names and types should also be stable. These allow external tools to
+// determine Zucchini version at compile time by inclusion or parsing.
+
+namespace zucchini {
+
+// A change in major version indicates breaking changes such that a patch
+// definitely cannot be applied by a zucchini binary whose major version doesn't
+// match.
+enum : uint16_t { kMajorVersion = 1 };
+
+// A change in minor version indicates possibly breaking changes at the element
+// level, such that it may not be possible to apply a patch whose minor version
+// doesn't match this version. To determine if a given patch may be applied with
+// this version, VerifyPatch() should be called.
+enum : uint16_t { kMinorVersion = 0 };
+
+// A empty or error value for major or minor version numbers.
+enum : uint16_t { kInvalidVersion = 0xffff };
+
+} // namespace zucchini
+
+#endif // COMPONENTS_ZUCCHINI_VERSION_INFO_H_
diff --git a/zucchini_commands.cc b/zucchini_commands.cc
index 0699cbe..225fc25 100644
--- a/zucchini_commands.cc
+++ b/zucchini_commands.cc
@@ -60,7 +60,7 @@ 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_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
zucchini::MappedFileReader input(std::move(input_file));
if (input.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
@@ -80,7 +80,7 @@ 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_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
zucchini::MappedFileReader input(std::move(input_file));
if (input.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
@@ -100,7 +100,7 @@ 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 |
- base::File::FLAG_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
zucchini::MappedFileReader old_image(std::move(old_file));
if (old_image.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
@@ -108,7 +108,7 @@ zucchini::status::Code MainMatch(MainParams params) {
return zucchini::status::kStatusFileReadError;
}
File new_file(params.file_paths[1], File::FLAG_OPEN | File::FLAG_READ |
- base::File::FLAG_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
zucchini::MappedFileReader new_image(std::move(new_file));
if (new_image.HasError()) {
LOG(ERROR) << "Error with file " << params.file_paths[1].value() << ": "
@@ -131,7 +131,7 @@ 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_SHARE_DELETE);
+ base::File::FLAG_WIN_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 bf28b3c..c654a08 100644
--- a/zucchini_integration.cc
+++ b/zucchini_integration.cc
@@ -184,11 +184,12 @@ status::Code Generate(const base::FilePath& old_path,
std::string imposed_matches) {
using base::File;
File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ |
- base::File::FLAG_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
File new_file(new_path, File::FLAG_OPEN | File::FLAG_READ |
- base::File::FLAG_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
File patch_file(patch_path, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
- File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
+ File::FLAG_WRITE |
+ File::FLAG_WIN_SHARE_DELETE |
File::FLAG_CAN_DELETE_ON_CLOSE);
const FileNames file_names(old_path, new_path, patch_path);
return GenerateCommon(std::move(old_file), std::move(new_file),
@@ -211,11 +212,11 @@ status::Code Apply(const base::FilePath& old_path,
bool force_keep) {
using base::File;
File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ |
- base::File::FLAG_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
File patch_file(patch_path, File::FLAG_OPEN | File::FLAG_READ |
- base::File::FLAG_SHARE_DELETE);
+ base::File::FLAG_WIN_SHARE_DELETE);
File new_file(new_path, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
- File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
+ File::FLAG_WRITE | File::FLAG_WIN_SHARE_DELETE |
File::FLAG_CAN_DELETE_ON_CLOSE);
const FileNames file_names(old_path, new_path, patch_path);
return ApplyCommon(std::move(old_file), std::move(patch_file),