applypatch: Support flash mode.
We may carry a full copy of recovery image in the /system, and use
/system/bin/install-recovery.sh to install the recovery. This CL adds
support to flash the recovery partition with the given image.
Bug: 22641135
Change-Id: I7a275b62fdd1bf41f97f6aab62d0200f7dae5aa1
(cherry picked from commit 68c5a67967)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user