1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Implementation of the byte-level differential compression used internally by
6// Courgette.
7
8#include "courgette/simple_delta.h"
9
10#include "base/basictypes.h"
11#include "base/logging.h"
12
13#include "courgette/third_party/bsdiff.h"
14
15namespace courgette {
16
17namespace {
18
19Status BSDiffStatusToStatus(BSDiffStatus status) {
20  switch (status) {
21    case OK: return C_OK;
22    case CRC_ERROR: return C_BINARY_DIFF_CRC_ERROR;
23    default: return C_GENERAL_ERROR;
24  }
25}
26
27}
28
29Status ApplySimpleDelta(SourceStream* old, SourceStream* delta,
30                        SinkStream* target) {
31  return BSDiffStatusToStatus(ApplyBinaryPatch(old, delta, target));
32}
33
34Status GenerateSimpleDelta(SourceStream* old, SourceStream* target,
35                           SinkStream* delta) {
36  VLOG(1) << "GenerateSimpleDelta " << old->Remaining()
37          << " " << target->Remaining();
38  return BSDiffStatusToStatus(CreateBinaryPatch(old, target, delta));
39}
40
41}  // namespace courgette
42