Refactor libupdater into a seperate module.

am: 0c7839ac14

Change-Id: I5ff4c438daa6df248cee38b62251c78baac67a76
This commit is contained in:
Tao Bao
2016-10-11 03:44:00 +00:00
committed by android-build-merger
9 changed files with 196 additions and 85 deletions
+22 -6
View File
@@ -41,25 +41,41 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
LOCAL_MODULE := recovery_component_test LOCAL_MODULE := recovery_component_test
LOCAL_C_INCLUDES := bootable/recovery LOCAL_C_INCLUDES := bootable/recovery
LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \
component/applypatch_test.cpp \
component/edify_test.cpp \ component/edify_test.cpp \
component/verifier_test.cpp \ component/updater_test.cpp \
component/applypatch_test.cpp component/verifier_test.cpp
LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_FORCE_STATIC_EXECUTABLE := true
tune2fs_static_libraries := \
libext2_com_err \
libext2_blkid \
libext2_quota \
libext2_uuid_static \
libext2_e2p \
libext2fs
LOCAL_STATIC_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := \
libapplypatch \ libapplypatch \
libedify \ libedify \
libotafault \ libotafault \
libupdater \
libverifier \ libverifier \
libcrypto_utils \
libcrypto \
libminui \ libminui \
libminzip \ libminzip \
libmounts \
liblog \
libselinux \
libext4_utils_static \
libsparse_static \
libcrypto_utils \
libcrypto \
libcutils \ libcutils \
libbz \ libbz \
libz \ libz \
libc \
libbase \ libbase \
liblog libtune2fs \
$(tune2fs_static_libraries)
testdata_out_path := $(TARGET_OUT_DATA_NATIVE_TESTS)/recovery testdata_out_path := $(TARGET_OUT_DATA_NATIVE_TESTS)/recovery
testdata_files := $(call find-subdir-files, testdata/*) testdata_files := $(call find-subdir-files, testdata/*)
+71
View File
@@ -0,0 +1,71 @@
/*
* Copyright (C) 2016 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.
*/
#include <string>
#include <android-base/properties.h>
#include <gtest/gtest.h>
#include "edify/expr.h"
#include "error_code.h"
#include "updater/install.h"
struct selabel_handle *sehandle = nullptr;
static void expect(const char* expected, const char* expr_str,
ErrorCode error_code, CauseCode cause_code) {
Expr* e;
int error_count;
EXPECT_EQ(parse_string(expr_str, &e, &error_count), 0);
State state(expr_str, nullptr);
char* result = Evaluate(&state, e);
if (expected == nullptr) {
EXPECT_EQ(nullptr, result);
} else {
EXPECT_STREQ(expected, result);
}
EXPECT_EQ(error_code, state.error_code);
EXPECT_EQ(cause_code, state.cause_code);
free(result);
}
class UpdaterTest : public ::testing::Test {
protected:
virtual void SetUp() {
RegisterBuiltins();
RegisterInstallFunctions();
FinishRegistration();
}
};
TEST_F(UpdaterTest, getprop) {
expect(android::base::GetProperty("ro.product.device", "").c_str(),
"getprop(\"ro.product.device\")",
kNoError, kNoCause);
expect(android::base::GetProperty("ro.build.fingerprint", "").c_str(),
"getprop(\"ro.build.fingerprint\")",
kNoError, kNoCause);
// getprop() accepts only one parameter.
expect(nullptr, "getprop()", kNoError, kArgsParsingFailure);
expect(nullptr, "getprop(\"arg1\", \"arg2\")", kNoError, kArgsParsingFailure);
}
+67 -44
View File
@@ -14,41 +14,6 @@
LOCAL_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir)
# updater (static executable)
# ===============================
# Build a statically-linked binary to include in OTA packages.
include $(CLEAR_VARS)
updater_src_files := \
install.cpp \
blockimg.cpp \
updater.cpp
LOCAL_CLANG := true
LOCAL_SRC_FILES := $(updater_src_files)
LOCAL_STATIC_LIBRARIES += \
$(TARGET_RECOVERY_UPDATER_LIBS) \
$(TARGET_RECOVERY_UPDATER_EXTRA_LIBS) \
libfec \
libfec_rs \
libext4_utils_static \
libsquashfs_utils \
libcrypto_utils \
libcrypto \
libapplypatch \
libotafault \
libedify \
libminzip \
libmounts \
libz \
libbz \
libcutils \
liblog \
libselinux \
libbase \
liblog
tune2fs_static_libraries := \ tune2fs_static_libraries := \
libext2_com_err \ libext2_com_err \
libext2_blkid \ libext2_blkid \
@@ -57,17 +22,77 @@ tune2fs_static_libraries := \
libext2_e2p \ libext2_e2p \
libext2fs libext2fs
LOCAL_STATIC_LIBRARIES += \ updater_common_static_libraries := \
libapplypatch \
libedify \
libminzip \
libmounts \
libotafault \
libext4_utils_static \
libfec \
libfec_rs \
liblog \
libselinux \
libsparse_static \
libsquashfs_utils \
libbz \
libz \
libbase \
libcrypto \
libcrypto_utils \
libcutils \
libtune2fs \ libtune2fs \
$(tune2fs_static_libraries) $(tune2fs_static_libraries)
LOCAL_CFLAGS += -Wno-unused-parameter -Werror # libupdater (static library)
LOCAL_STATIC_LIBRARIES += \ # ===============================
libsparse_static \ include $(CLEAR_VARS)
libz
LOCAL_C_INCLUDES += external/e2fsprogs/misc LOCAL_MODULE := libupdater
LOCAL_C_INCLUDES += $(LOCAL_PATH)/..
LOCAL_SRC_FILES := \
install.cpp \
blockimg.cpp
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/.. \
$(LOCAL_PATH)/include \
external/e2fsprogs/misc
LOCAL_CFLAGS := \
-Wno-unused-parameter \
-Werror
LOCAL_EXPORT_C_INCLUDE_DIRS := \
$(LOCAL_PATH)/include
LOCAL_STATIC_LIBRARIES := \
$(updater_common_static_libraries)
include $(BUILD_STATIC_LIBRARY)
# updater (static executable)
# ===============================
include $(CLEAR_VARS)
LOCAL_MODULE := updater
LOCAL_SRC_FILES := \
updater.cpp
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/.. \
$(LOCAL_PATH)/include
LOCAL_CFLAGS := \
-Wno-unused-parameter \
-Werror
LOCAL_STATIC_LIBRARIES := \
libupdater \
$(TARGET_RECOVERY_UPDATER_LIBS) \
$(TARGET_RECOVERY_UPDATER_EXTRA_LIBS) \
$(updater_common_static_libraries)
# Each library in TARGET_RECOVERY_UPDATER_LIBS should have a function # Each library in TARGET_RECOVERY_UPDATER_LIBS should have a function
# named "Register_<libname>()". Here we emit a little C function that # named "Register_<libname>()". Here we emit a little C function that
@@ -108,8 +133,6 @@ LOCAL_C_INCLUDES += $(dir $(inc))
inc := inc :=
inc_dep_file := inc_dep_file :=
LOCAL_MODULE := updater
LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_FORCE_STATIC_EXECUTABLE := true
include $(BUILD_EXECUTABLE) include $(BUILD_EXECUTABLE)
+2 -2
View File
@@ -45,12 +45,12 @@
#include "applypatch/applypatch.h" #include "applypatch/applypatch.h"
#include "edify/expr.h" #include "edify/expr.h"
#include "error_code.h" #include "error_code.h"
#include "install.h" #include "updater/install.h"
#include "openssl/sha.h" #include "openssl/sha.h"
#include "minzip/Hash.h" #include "minzip/Hash.h"
#include "ota_io.h" #include "ota_io.h"
#include "print_sha1.h" #include "print_sha1.h"
#include "updater.h" #include "updater/updater.h"
#define BLOCKSIZE 4096 #define BLOCKSIZE 4096
@@ -17,11 +17,12 @@
#ifndef _UPDATER_INSTALL_H_ #ifndef _UPDATER_INSTALL_H_
#define _UPDATER_INSTALL_H_ #define _UPDATER_INSTALL_H_
struct State;
void RegisterInstallFunctions(); void RegisterInstallFunctions();
// uiPrintf function prints msg to screen as well as logs // uiPrintf function prints msg to screen as well as logs
void uiPrintf(State* _Nonnull state, const char* _Nonnull format, ...) __attribute__((__format__(printf, 2, 3))); void uiPrintf(State* _Nonnull state, const char* _Nonnull format, ...)
__attribute__((__format__(printf, 2, 3)));
static int make_parents(char* _Nonnull name);
#endif #endif
+26 -26
View File
@@ -14,6 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
#include "updater/install.h"
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <stdarg.h> #include <stdarg.h>
@@ -40,24 +42,22 @@
#include <android-base/properties.h> #include <android-base/properties.h>
#include <android-base/strings.h> #include <android-base/strings.h>
#include <android-base/stringprintf.h> #include <android-base/stringprintf.h>
#include <cutils/android_reboot.h>
#include <ext4_utils/make_ext4fs.h> #include <ext4_utils/make_ext4fs.h>
#include <ext4_utils/wipe.h> #include <ext4_utils/wipe.h>
#include <selinux/label.h> #include <selinux/label.h>
#include <selinux/selinux.h> #include <selinux/selinux.h>
#include "bootloader.h"
#include "applypatch/applypatch.h" #include "applypatch/applypatch.h"
#include "cutils/android_reboot.h" #include "bootloader.h"
#include "cutils/misc.h"
#include "edify/expr.h" #include "edify/expr.h"
#include "error_code.h" #include "error_code.h"
#include "minzip/DirUtil.h" #include "minzip/DirUtil.h"
#include "mounts.h" #include "mounts.h"
#include "openssl/sha.h" #include "openssl/sha.h"
#include "ota_io.h" #include "ota_io.h"
#include "updater.h"
#include "install.h"
#include "tune2fs.h" #include "tune2fs.h"
#include "updater/updater.h"
// Send over the buffer to recovery though the command pipe. // Send over the buffer to recovery though the command pipe.
static void uiPrint(State* state, const std::string& buffer) { static void uiPrint(State* state, const std::string& buffer) {
@@ -90,6 +90,27 @@ void uiPrintf(State* _Nonnull state, const char* _Nonnull format, ...) {
uiPrint(state, error_msg); uiPrint(state, error_msg);
} }
// Create all parent directories of name, if necessary.
static int make_parents(char* name) {
char* p;
for (p = name + (strlen(name)-1); p > name; --p) {
if (*p != '/') continue;
*p = '\0';
if (make_parents(name) < 0) return -1;
int result = mkdir(name, 0700);
if (result == 0) printf("created [%s]\n", name);
*p = '/';
if (result == 0 || errno == EEXIST) {
// successfully created or already existed; we're done
return 0;
} else {
printf("failed to mkdir %s: %s\n", name, strerror(errno));
return -1;
}
}
return 0;
}
// Take a sha-1 digest and return it as a newly-allocated hex string. // Take a sha-1 digest and return it as a newly-allocated hex string.
char* PrintSha1(const uint8_t* digest) { char* PrintSha1(const uint8_t* digest) {
char* buffer = reinterpret_cast<char*>(malloc(SHA_DIGEST_LENGTH*2 + 1)); char* buffer = reinterpret_cast<char*>(malloc(SHA_DIGEST_LENGTH*2 + 1));
@@ -569,27 +590,6 @@ Value* PackageExtractFileFn(const char* name, State* state,
} }
} }
// Create all parent directories of name, if necessary.
static int make_parents(char* name) {
char* p;
for (p = name + (strlen(name)-1); p > name; --p) {
if (*p != '/') continue;
*p = '\0';
if (make_parents(name) < 0) return -1;
int result = mkdir(name, 0700);
if (result == 0) printf("created [%s]\n", name);
*p = '/';
if (result == 0 || errno == EEXIST) {
// successfully created or already existed; we're done
return 0;
} else {
printf("failed to mkdir %s: %s\n", name, strerror(errno));
return -1;
}
}
return 0;
}
// symlink target src1 src2 ... // symlink target src1 src2 ...
// unlinks any previously existing src1, src2, etc before creating symlinks. // unlinks any previously existing src1, src2, etc before creating symlinks.
Value* SymlinkFn(const char* name, State* state, int argc, Expr* argv[]) { Value* SymlinkFn(const char* name, State* state, int argc, Expr* argv[]) {
+4 -4
View File
@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
#include "updater.h" #include "updater/updater.h"
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@@ -27,10 +27,10 @@
#include "config.h" #include "config.h"
#include "edify/expr.h" #include "edify/expr.h"
#include "blockimg.h"
#include "install.h"
#include "minzip/Zip.h"
#include "minzip/SysUtil.h" #include "minzip/SysUtil.h"
#include "minzip/Zip.h"
#include "updater/blockimg.h"
#include "updater/install.h"
// Generated by the makefile, this function defines the // Generated by the makefile, this function defines the
// RegisterDeviceExtensions() function, which calls all the // RegisterDeviceExtensions() function, which calls all the