blob: 3d0a8f26adcccb64aa1fb1c7b412e3a6cc04efe9 [file] [log] [blame]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "patchmaker/patch_util.h"
#include <memory>
#include <base/files/file_util.h>
#include <base/logging.h>
#include <brillo/secure_blob.h>
#include <bsdiff/bsdiff.h>
#include <bsdiff/bspatch.h>
#include <bsdiff/patch_writer_factory.h>
#include "patchmaker/file_util.h"
namespace util {
bool DoBsDiff(const base::FilePath& old_file,
const base::FilePath& new_file,
const base::FilePath& patch_file) {
std::optional<brillo::Blob> old_data, new_data;
std::unique_ptr<bsdiff::PatchWriterInterface> bsdiff_patch_writer =
bsdiff::CreateBsdiffPatchWriter(patch_file.value());
old_data = ReadFileToBlob(old_file);
if (!old_data.has_value()) {
LOG(ERROR) << "Failed to read old file for bsdiff";
return false;
}
new_data = ReadFileToBlob(new_file);
if (!new_data.has_value()) {
LOG(ERROR) << "Failed to read new file for bsdiff";
return false;
}
return 0 == bsdiff::bsdiff(old_data->data(), old_data->size(),
new_data->data(), new_data->size(),
bsdiff_patch_writer.get(), nullptr);
}
bool DoBsPatch(const base::FilePath& old_file,
const base::FilePath& new_file,
const base::FilePath& patch_file) {
return 0 == bsdiff::bspatch(old_file.value().c_str(),
new_file.value().c_str(),
patch_file.value().c_str(), nullptr, nullptr);
}
} // namespace util