summaryrefslogtreecommitdiffstats
path: root/applypatch/main.cpp
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2015-07-18 03:11:12 +0200
committerTao Bao <tbao@google.com>2015-07-24 20:15:19 +0200
commitabba55b4c52cc347e8806ba833645f150f2965ce (patch)
tree6da56c22d1a3d8876660ce659fa30916831b7b98 /applypatch/main.cpp
parentMerge "updater: libapplypatch needs libbase now." (diff)
downloadandroid_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.tar
android_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.tar.gz
android_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.tar.bz2
android_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.tar.lz
android_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.tar.xz
android_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.tar.zst
android_bootable_recovery-abba55b4c52cc347e8806ba833645f150f2965ce.zip
Diffstat (limited to 'applypatch/main.cpp')
-rw-r--r--applypatch/main.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/applypatch/main.cpp b/applypatch/main.cpp
index 63ff5c2c0..966d8b91f 100644
--- a/applypatch/main.cpp
+++ b/applypatch/main.cpp
@@ -47,8 +47,8 @@ static int SpaceMode(int argc, char** argv) {
// "<sha1>:<filename>" into the new parallel arrays *sha1s and
// *patches (loading file contents into the patches). Returns true on
// success.
-static bool ParsePatchArgs(int argc, char** argv,
- char*** sha1s, Value*** patches, int* num_patches) {
+static bool ParsePatchArgs(int argc, char** argv, char*** sha1s,
+ Value*** patches, int* num_patches) {
*num_patches = argc;
*sha1s = reinterpret_cast<char**>(malloc(*num_patches * sizeof(char*)));
*patches = reinterpret_cast<Value**>(malloc(*num_patches * sizeof(Value*)));
@@ -98,7 +98,12 @@ static bool ParsePatchArgs(int argc, char** argv,
return false;
}
-int PatchMode(int argc, char** argv) {
+static int FlashMode(const char* src_filename, const char* tgt_filename,
+ const char* tgt_sha1, size_t tgt_size) {
+ return applypatch_flash(src_filename, tgt_filename, tgt_sha1, tgt_size);
+}
+
+static int PatchMode(int argc, char** argv) {
Value* bonus = NULL;
if (argc >= 3 && strcmp(argv[1], "-b") == 0) {
FileContents fc;
@@ -114,7 +119,7 @@ int PatchMode(int argc, char** argv) {
argv += 2;
}
- if (argc < 6) {
+ if (argc < 4) {
return 2;
}
@@ -125,6 +130,16 @@ int PatchMode(int argc, char** argv) {
return 1;
}
+ // If no <src-sha1>:<patch> is provided, it is in flash mode.
+ if (argc == 5) {
+ if (bonus != NULL) {
+ printf("bonus file not supported in flash mode\n");
+ return 1;
+ }
+ return FlashMode(argv[1], argv[2], argv[3], target_size);
+ }
+
+
char** sha1s;
Value** patches;
int num_patches;
@@ -162,6 +177,10 @@ int PatchMode(int argc, char** argv) {
// - if the sha1 hash of <tgt-file> is <tgt-sha1>, does nothing and exits
// successfully.
//
+// - otherwise, if no <src-sha1>:<patch> is provided, flashes <tgt-file> with
+// <src-file>. <tgt-file> must be a partition name, while <src-file> must
+// be a regular image file. <src-file> will not be deleted on success.
+//
// - otherwise, if the sha1 hash of <src-file> is <src-sha1>, applies the
// bsdiff <patch> to <src-file> to produce a new file (the type of patch
// is automatically detected from the file header). If that new