diff options
author | Sen Jiang <senj@google.com> | 2017-01-24 16:25:25 -0800 |
---|---|---|
committer | Sen Jiang <senj@google.com> | 2017-02-02 14:54:51 -0800 |
commit | 62d5e48122519abcc89837d99fc60a09fc8ba405 (patch) | |
tree | 15cf0bcb6eab21a76302345d79d80e5c8caf4c09 /bspatch.cc | |
parent | b552c79a0d681f17ba19ff55e2062c483c236cc4 (diff) | |
download | bsdiff-62d5e48122519abcc89837d99fc60a09fc8ba405.tar.gz |
Add another overload of bspatch().
It accepts old and new filenames with extents and patch data and size.
Bug: 26982501
Test: mma
Change-Id: I812fe7441fe2ae768bbfc48c65c097af991c105b
Diffstat (limited to 'bspatch.cc')
-rw-r--r-- | bspatch.cc | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -201,6 +201,20 @@ int bspatch(const char* old_filename, } patch_file.reset(); + return bspatch(old_filename, new_filename, patch.data(), patch_size, + old_extents, new_extents); +} + +// Patch |old_filename| with |patch_data| and save it to |new_filename|. +// |old_extents| and |new_extents| are comma-separated lists of "offset:length" +// extents of |old_filename| and |new_filename|. +// Returns 0 on success, 1 on I/O error and 2 on data error. +int bspatch(const char* old_filename, + const char* new_filename, + const uint8_t* patch_data, + size_t patch_size, + const char* old_extents, + const char* new_extents) { int using_extents = (old_extents != NULL || new_extents != NULL); // Open input file for reading. @@ -242,11 +256,11 @@ int bspatch(const char* old_filename, parsed_new_extents)) { // New and old file is overlapping, we can not stream output to new file, // cache it in a buffer and write to the file at the end. - uint64_t newsize = ParseInt64(patch.data() + 24); + uint64_t newsize = ParseInt64(patch_data + 24); new_file.reset(new BufferFile(std::move(new_file), newsize)); } - return bspatch(old_file, new_file, patch.data(), patch_size); + return bspatch(old_file, new_file, patch_data, patch_size); } // Patch |old_data| with |patch_data| and save it by calling sink function. |