summaryrefslogtreecommitdiff
path: root/bspatch.cc
diff options
context:
space:
mode:
authorSen Jiang <senj@google.com>2017-01-24 16:25:25 -0800
committerSen Jiang <senj@google.com>2017-02-02 14:54:51 -0800
commit62d5e48122519abcc89837d99fc60a09fc8ba405 (patch)
tree15cf0bcb6eab21a76302345d79d80e5c8caf4c09 /bspatch.cc
parentb552c79a0d681f17ba19ff55e2062c483c236cc4 (diff)
downloadbsdiff-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.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/bspatch.cc b/bspatch.cc
index 0d90676..058f9d0 100644
--- a/bspatch.cc
+++ b/bspatch.cc
@@ -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.