15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implementation of the byte-level differential compression used internally by
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Courgette.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "courgette/simple_delta.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "courgette/third_party/bsdiff.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace courgette {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Status BSDiffStatusToStatus(BSDiffStatus status) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (status) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case OK: return C_OK;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CRC_ERROR: return C_BINARY_DIFF_CRC_ERROR;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default: return C_GENERAL_ERROR;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Status ApplySimpleDelta(SourceStream* old, SourceStream* delta,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SinkStream* target) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return BSDiffStatusToStatus(ApplyBinaryPatch(old, delta, target));
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Status GenerateSimpleDelta(SourceStream* old, SourceStream* target,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           SinkStream* delta) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VLOG(1) << "GenerateSimpleDelta " << old->Remaining()
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          << " " << target->Remaining();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return BSDiffStatusToStatus(CreateBinaryPatch(old, target, delta));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace courgette
42