diff options
author | Doug Zongker <dougz@google.com> | 2012-08-20 15:28:02 -0700 |
---|---|---|
committer | Doug Zongker <dougz@google.com> | 2012-08-20 15:28:02 -0700 |
commit | a3ccba6d314cb29b02d1dbda9a71427b11da936d (patch) | |
tree | 5f2a722ebb6f9c7d58da206c04e077a7685c646c /applypatch/main.c | |
parent | 5585025814418e8b692a3a38b7cff495180a74f8 (diff) | |
download | bootable_recovery-a3ccba6d314cb29b02d1dbda9a71427b11da936d.zip bootable_recovery-a3ccba6d314cb29b02d1dbda9a71427b11da936d.tar.gz bootable_recovery-a3ccba6d314cb29b02d1dbda9a71427b11da936d.tar.bz2 |
add bonus data feature to imgdiff/imgpatch/applypatch
The bonus data option lets you give an additional blob of uncompressed
data to be used when constructing a patch for chunk #1 of an image.
The same blob must be available at patch time, and can be passed to
the command-line applypatch tool (this feature is not accessible from
edify scripts).
This will be used to reduce the size of recovery-from-boot patches by
storing parts of the recovery ramdisk (the UI images) on the system
partition.
Change-Id: Iac1959cdf7f5e4582f8d434e83456e483b64c02c
Diffstat (limited to 'applypatch/main.c')
-rw-r--r-- | applypatch/main.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/applypatch/main.c b/applypatch/main.c index 7025a2e..f61db5d 100644 --- a/applypatch/main.c +++ b/applypatch/main.c @@ -100,6 +100,21 @@ static int ParsePatchArgs(int argc, char** argv, } int PatchMode(int argc, char** argv) { + Value* bonus = NULL; + if (argc >= 3 && strcmp(argv[1], "-b") == 0) { + FileContents fc; + if (LoadFileContents(argv[2], &fc, RETOUCH_DONT_MASK) != 0) { + printf("failed to load bonus file %s\n", argv[2]); + return 1; + } + bonus = malloc(sizeof(Value)); + bonus->type = VAL_BLOB; + bonus->size = fc.size; + bonus->data = (char*)fc.data; + argc -= 2; + argv += 2; + } + if (argc < 6) { return 2; } @@ -120,7 +135,7 @@ int PatchMode(int argc, char** argv) { } int result = applypatch(argv[1], argv[2], argv[3], target_size, - num_patches, sha1s, patches); + num_patches, sha1s, patches, bonus); int i; for (i = 0; i < num_patches; ++i) { @@ -130,6 +145,10 @@ int PatchMode(int argc, char** argv) { free(p); } } + if (bonus) { + free(bonus->data); + free(bonus); + } free(sha1s); free(patches); @@ -163,7 +182,7 @@ int main(int argc, char** argv) { if (argc < 2) { usage: printf( - "usage: %s <src-file> <tgt-file> <tgt-sha1> <tgt-size> " + "usage: %s [-b <bonus-file>] <src-file> <tgt-file> <tgt-sha1> <tgt-size> " "[<src-sha1>:<patch> ...]\n" " or %s -c <file> [<sha1> ...]\n" " or %s -s <bytes>\n" |