diff options
-rw-r--r-- | Android.bp | 34 | ||||
-rw-r--r-- | mapped_file.cc | 2 | ||||
-rw-r--r-- | zucchini_main_aosp.cc | 69 |
3 files changed, 103 insertions, 2 deletions
@@ -24,6 +24,7 @@ filegroup { "image_index.cc", "imposed_ensemble_matcher.cc", "io_utils.cc", + "mapped_file.cc", "patch_reader.cc", "patch_writer.cc", "reference_bytes_mixer.cc", @@ -41,6 +42,16 @@ filegroup { } filegroup { + name: "zucchini_srcs", + srcs: [ + "main_utils.cc", + "zucchini_commands.cc", + "zucchini_integration.cc", + "zucchini_main_aosp.cc", + ], +} + +filegroup { name: "libzucchini_headers", srcs: [ "abs32_utils.h", @@ -108,7 +119,7 @@ cc_library { include_build_directory: false, srcs: [":libzucchini_srcs"], local_include_dirs: ["aosp/include"], - export_include_dirs: ["aosp/include"], + export_include_dirs: ["aosp/include/components"], static_libs: [ "libchrome", "libcutils", @@ -122,3 +133,24 @@ cc_library { ], visibility: ["//system/update_engine:__subpackages__"], } + +cc_binary { + name: "zucchini", + host_supported: true, + device_supported: true, + srcs: [":zucchini_srcs"], + include_build_directory: false, + local_include_dirs: ["aosp/include"], + static_libs: [ + "libchrome", + "libcutils", + "libzucchini", + ], + shared_libs: [ + "liblog", + "libbase", + ], + cflags: [ + "-Wno-unused-parameter", + ], +} diff --git a/mapped_file.cc b/mapped_file.cc index a742414..2ea973c 100644 --- a/mapped_file.cc +++ b/mapped_file.cc @@ -49,7 +49,7 @@ MappedFileWriter::MappedFileWriter(const base::FilePath& file_path, MappedFileWriter::~MappedFileWriter() { if (!HasError() && delete_behavior_ == kManualDeleteOnClose && - !file_path_.empty() && !base::DeleteFile(file_path_)) { + !file_path_.empty() && !base::DeleteFile(file_path_, false)) { error_ = "Failed to delete file."; } } diff --git a/zucchini_main_aosp.cc b/zucchini_main_aosp.cc new file mode 100644 index 0000000..4e410a5 --- /dev/null +++ b/zucchini_main_aosp.cc @@ -0,0 +1,69 @@ +// +// Copyright (C) 2021 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// This file is exactly the same as zucchini_main.cc, except with a few fixes +// that make it compatible with AOSP version of liblog + +#include <iostream> + +#include "base/command_line.h" +#include "base/logging.h" +#include "base/process/memory.h" +#include "build/build_config.h" +#include "main_utils.h" + +#if defined(OS_WIN) +#include "base/win/process_startup_helper.h" +#endif // defined(OS_WIN) + +namespace { + +void InitLogging() { + logging::LoggingSettings settings; + settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; + // settings.log_file_path = nullptr; + settings.lock_log = logging::DONT_LOCK_LOG_FILE; + settings.delete_old = logging::APPEND_TO_OLD_LOG_FILE; + bool logging_res = logging::InitLogging(settings); + CHECK(logging_res); +} + +void InitErrorHandling(const base::CommandLine &command_line) { + base::EnableTerminationOnHeapCorruption(); + base::EnableTerminationOnOutOfMemory(); +#if defined(OS_WIN) + base::win::RegisterInvalidParamHandler(); + base::win::SetupCRT(command_line); +#endif // defined(OS_WIN) +} + +} // namespace + +int main(int argc, const char *argv[]) { + // Initialize infrastructure from base. + base::CommandLine::Init(argc, argv); + const base::CommandLine &command_line = + *base::CommandLine::ForCurrentProcess(); + InitLogging(); + InitErrorHandling(command_line); + zucchini::status::Code status = + RunZucchiniCommand(command_line, std::cout, std::cerr); + if (!(status == zucchini::status::kStatusSuccess || + status == zucchini::status::kStatusInvalidParam)) { + std::cerr << "Failed with code " << static_cast<int>(status) << std::endl; + } + return static_cast<int>(status); +} |