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

Side by Side Diff: courgette/third_party/bsdiff/bsdiff_create.cc

Issue 2031193002: [Courgette] Refactor BSDiff namespaces and bsdiff::search() interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix more gap; fix Installer confusion; update README.chromium. Created 4 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 bsdiff.c -- Binary patch generator. 2 bsdiff.c -- Binary patch generator.
3 3
4 Copyright 2003 Colin Percival 4 Copyright 2003 Colin Percival
5 5
6 For the terms under which this work may be distributed, please see 6 For the terms under which this work may be distributed, please see
7 the adjoining file "LICENSE". 7 the adjoining file "LICENSE".
8 8
9 ChangeLog: 9 ChangeLog:
10 2005-05-05 - Use the modified header struct from bspatch.h; use 32-bit 10 2005-05-05 - Use the modified header struct from bspatch.h; use 32-bit
11 values throughout. 11 values throughout.
12 --Benjamin Smedberg <benjamin@smedbergs.us> 12 --Benjamin Smedberg <benjamin@smedbergs.us>
13 2005-05-18 - Use the same CRC algorithm as bzip2, and leverage the CRC table 13 2005-05-18 - Use the same CRC algorithm as bzip2, and leverage the CRC table
14 provided by libbz2. 14 provided by libbz2.
15 --Darin Fisher <darin@meer.net> 15 --Darin Fisher <darin@meer.net>
16 2007-11-14 - Changed to use Crc from Lzma library instead of Bzip library 16 2007-11-14 - Changed to use Crc from Lzma library instead of Bzip library
17 --Rahul Kuchhal 17 --Rahul Kuchhal
18 2009-03-31 - Change to use Streams. Added lots of comments. 18 2009-03-31 - Change to use Streams. Added lots of comments.
19 --Stephen Adams <sra@chromium.org> 19 --Stephen Adams <sra@chromium.org>
20 2010-05-26 - Use a paged array for V and I. The address space may be too 20 2010-05-26 - Use a paged array for V and I. The address space may be too
21 fragmented for these big arrays to be contiguous. 21 fragmented for these big arrays to be contiguous.
22 --Stephen Adams <sra@chromium.org> 22 --Stephen Adams <sra@chromium.org>
23 2015-08-03 - Extract qsufsort portion to a separate file. 23 2015-08-03 - Extract qsufsort portion to a separate file.
24 --Samuel Huang <huangs@chromium.org> 24 --Samuel Huang <huangs@chromium.org>
25 2015-08-12 - Interface change to qsufsort search(). 25 2015-08-12 - Interface change to search().
26 --Samuel Huang <huangs@chromium.org> 26 --Samuel Huang <huangs@chromium.org>
27 */ 27 */
28 28
29 #include "courgette/third_party/bsdiff/bsdiff.h" 29 #include "courgette/third_party/bsdiff/bsdiff.h"
30 30
31 #include <stddef.h> 31 #include <stddef.h>
32 #include <stdint.h> 32 #include <stdint.h>
33 #include <stdlib.h> 33 #include <stdlib.h>
34 #include <algorithm> 34 #include <algorithm>
35 35
36 #include "base/logging.h" 36 #include "base/logging.h"
37 #include "base/strings/string_util.h" 37 #include "base/strings/string_util.h"
38 #include "base/time/time.h" 38 #include "base/time/time.h"
39 39
40 #include "courgette/crc.h" 40 #include "courgette/crc.h"
41 #include "courgette/streams.h" 41 #include "courgette/streams.h"
42 #include "courgette/third_party/bsdiff/bsdiff_search.h"
42 #include "courgette/third_party/bsdiff/paged_array.h" 43 #include "courgette/third_party/bsdiff/paged_array.h"
43 #include "courgette/third_party/bsdiff/qsufsort.h" 44 #include "courgette/third_party/bsdiff/qsufsort.h"
44 45
45 namespace courgette { 46 namespace {
47
48 using courgette::CalculateCrc;
49 using courgette::PagedArray;
50 using courgette::SinkStream;
51 using courgette::SinkStreamSet;
52 using courgette::SourceStream;
53 using courgette::SourceStreamSet;
54
55 } // namespace
56
57 namespace bsdiff {
46 58
47 static CheckBool WriteHeader(SinkStream* stream, MBSPatchHeader* header) { 59 static CheckBool WriteHeader(SinkStream* stream, MBSPatchHeader* header) {
48 bool ok = stream->Write(header->tag, sizeof(header->tag)); 60 bool ok = stream->Write(header->tag, sizeof(header->tag));
49 ok &= stream->WriteVarint32(header->slen); 61 ok &= stream->WriteVarint32(header->slen);
50 ok &= stream->WriteVarint32(header->scrc32); 62 ok &= stream->WriteVarint32(header->scrc32);
51 ok &= stream->WriteVarint32(header->dlen); 63 ok &= stream->WriteVarint32(header->dlen);
52 return ok; 64 return ok;
53 } 65 }
54 66
55 BSDiffStatus CreateBinaryPatch(SourceStream* old_stream, 67 BSDiffStatus CreateBinaryPatch(SourceStream* old_stream,
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 int scan = 0; 156 int scan = 0;
145 int match_length = 0; 157 int match_length = 0;
146 158
147 while (scan < newsize) { 159 while (scan < newsize) {
148 int pos = 0; 160 int pos = 0;
149 int oldscore = 0; // Count of how many bytes of the current match at |scan| 161 int oldscore = 0; // Count of how many bytes of the current match at |scan|
150 // extend the match at |lastscan|. 162 // extend the match at |lastscan|.
151 163
152 scan += match_length; 164 scan += match_length;
153 for (int scsc = scan; scan < newsize; ++scan) { 165 for (int scsc = scan; scan < newsize; ++scan) {
154 match_length = qsuf::search<PagedArray<int>&>( 166 match_length = search<PagedArray<int>&>(
155 I, old, oldsize, newbuf + scan, newsize - scan, &pos); 167 I, old, oldsize, newbuf + scan, newsize - scan, &pos);
156 168
157 for (; scsc < scan + match_length; scsc++) 169 for (; scsc < scan + match_length; scsc++)
158 if ((scsc + lastoffset < oldsize) && 170 if ((scsc + lastoffset < oldsize) &&
159 (old[scsc + lastoffset] == newbuf[scsc])) 171 (old[scsc + lastoffset] == newbuf[scsc]))
160 oldscore++; 172 oldscore++;
161 173
162 if ((match_length == oldscore) && (match_length != 0)) 174 if ((match_length == oldscore) && (match_length != 0))
163 break; // Good continuing match, case (1) 175 break; // Good continuing match, case (1)
164 if (match_length > oldscore + 8) 176 if (match_length > oldscore + 8)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 << " (skips: " << diff_skips_length << ")" 321 << " (skips: " << diff_skips_length << ")"
310 << " extra bytes: " << extra_bytes_length 322 << " extra bytes: " << extra_bytes_length
311 << "\nUncompressed bsdiff patch size " 323 << "\nUncompressed bsdiff patch size "
312 << patch_stream->Length() - initial_patch_stream_length 324 << patch_stream->Length() - initial_patch_stream_length
313 << "\nEnd bsdiff " 325 << "\nEnd bsdiff "
314 << (base::Time::Now() - start_bsdiff_time).InSecondsF(); 326 << (base::Time::Now() - start_bsdiff_time).InSecondsF();
315 327
316 return OK; 328 return OK;
317 } 329 }
318 330
319 } // namespace courgette 331 } // namespace bsdiff
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698