Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3263)

Unified Diff: courgette/third_party/bsdiff_apply.cc

Issue 15908002: Differential updates for components. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Sync to LKGR revision 207804. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « courgette/third_party/bsdiff.h ('k') | extensions/common/crx_file.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: courgette/third_party/bsdiff_apply.cc
diff --git a/courgette/third_party/bsdiff_apply.cc b/courgette/third_party/bsdiff_apply.cc
index 762c12cf7c8bf7c09787060d4ff09c0cd3c6e9da..3ed346e79af925d0fbcd941d922337f7774127a2 100644
--- a/courgette/third_party/bsdiff_apply.cc
+++ b/courgette/third_party/bsdiff_apply.cc
@@ -26,6 +26,8 @@
* Changelog:
* 2009-03-31 - Change to use Streams. Move CRC code to crc.{h,cc}
* --Stephen Adams <sra@chromium.org>
+ * 2013-04-10 - Add wrapper method to apply a patch to files directly.
+ * --Joshua Pawlicki <waffles@chromium.org>
*/
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
@@ -34,6 +36,7 @@
#include "courgette/third_party/bsdiff.h"
+#include "base/files/memory_mapped_file.h"
#include "courgette/crc.h"
#include "courgette/streams.h"
@@ -168,4 +171,42 @@ BSDiffStatus ApplyBinaryPatch(SourceStream* old_stream,
return OK;
}
+BSDiffStatus ApplyBinaryPatch(const base::FilePath& old_file_path,
+ const base::FilePath& patch_file_path,
+ const base::FilePath& new_file_path) {
+ // Set up the old stream.
+ base::MemoryMappedFile old_file;
+ if (!old_file.Initialize(old_file_path)) {
+ return READ_ERROR;
+ }
+ SourceStream old_file_stream;
+ old_file_stream.Init(old_file.data(), old_file.length());
+
+ // Set up the patch stream.
+ base::MemoryMappedFile patch_file;
+ if (!patch_file.Initialize(patch_file_path)) {
+ return READ_ERROR;
+ }
+ SourceStream patch_file_stream;
+ patch_file_stream.Init(patch_file.data(), patch_file.length());
+
+ // Set up the new stream and apply the patch.
+ SinkStream new_sink_stream;
+ BSDiffStatus status = ApplyBinaryPatch(&old_file_stream,
+ &patch_file_stream,
+ &new_sink_stream);
+ if (status != OK) {
+ return status;
+ }
+
+ // Write the stream to disk.
+ int written = file_util::WriteFile(
+ new_file_path,
+ reinterpret_cast<const char*>(new_sink_stream.Buffer()),
+ static_cast<int>(new_sink_stream.Length()));
+ if (written != static_cast<int>(new_sink_stream.Length()))
+ return WRITE_ERROR;
+ return OK;
+}
+
} // namespace
« no previous file with comments | « courgette/third_party/bsdiff.h ('k') | extensions/common/crx_file.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698