blob: b6475f4b30d5088ee73aa123a733f8e05d1cde55 [file] [log] [blame]
// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef _BSDIFF_BSDIFF_H_
#define _BSDIFF_BSDIFF_H_
#include <stddef.h>
#include <stdint.h>
#include "bsdiff/common.h"
#include "bsdiff/patch_writer_interface.h"
#include "bsdiff/suffix_array_index_interface.h"
namespace bsdiff {
// Generate bsdiff patch from |old_buf| to |new_buf|, save the patch file to
// |patch_filename|. Returns 0 on success.
// |sai_cache| can be used to cache the suffix array if the same |old_buf| is
// used repeatedly, pass nullptr if not needed.
BSDIFF_EXPORT
int bsdiff(const uint8_t* old_buf,
size_t oldsize,
const uint8_t* new_buf,
size_t newsize,
const char* patch_filename,
SuffixArrayIndexInterface** sai_cache);
BSDIFF_EXPORT
int bsdiff(const uint8_t* old_buf,
size_t oldsize,
const uint8_t* new_buf,
size_t newsize,
PatchWriterInterface* patch,
SuffixArrayIndexInterface** sai_cache);
// The |min_length| parameter determines the required minimum length of a match
// to be considered instead of emitting mismatches. The minimum value is 9,
// since smaller matches are always ignored. If a smaller value is passed, the
// minimum value of 9 will be used instead. A very large value (past 30) will
// give increasingly bad results as you increase the minimum length since legit
// matches between the old and new data will be ignored. The exact best value
// depends on the data, but the sweet spot should be between 9 and 20 for the
// examples tested.
BSDIFF_EXPORT
int bsdiff(const uint8_t* old_buf,
size_t oldsize,
const uint8_t* new_buf,
size_t newsize,
size_t min_length,
PatchWriterInterface* patch,
SuffixArrayIndexInterface** sai_cache);
} // namespace bsdiff
#endif // _BSDIFF_BSDIFF_H_