From 19803807cd7ae01868fcfa50305f4a7dd13765e2 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 7 Apr 2015 12:44:51 -0700 Subject: [PATCH] Switch installd to compile as C++. This is the minimal change needed to switch it over to C++, which paves the way for using more robust utilities like std::string. Change-Id: I80ed6280146875eb6ddbbb340c05450388ca13f0 --- cmds/installd/Android.mk | 4 +-- cmds/installd/{commands.c => commands.cpp} | 0 cmds/installd/{installd.c => installd.cpp} | 30 ++++++++++----------- cmds/installd/installd.h | 6 ++--- cmds/installd/tests/installd_utils_test.cpp | 28 ++++++++++--------- cmds/installd/{utils.c => utils.cpp} | 16 +++++------ 6 files changed, 43 insertions(+), 41 deletions(-) rename cmds/installd/{commands.c => commands.cpp} (100%) rename cmds/installd/{installd.c => installd.cpp} (98%) rename cmds/installd/{utils.c => utils.cpp} (98%) diff --git a/cmds/installd/Android.mk b/cmds/installd/Android.mk index 8224e94b3..2d90ff377 100644 --- a/cmds/installd/Android.mk +++ b/cmds/installd/Android.mk @@ -1,6 +1,6 @@ LOCAL_PATH := $(call my-dir) -common_src_files := commands.c utils.c +common_src_files := commands.cpp utils.cpp common_cflags := -Wall -Werror # @@ -23,7 +23,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := installd LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS := $(common_cflags) -LOCAL_SRC_FILES := installd.c $(common_src_files) +LOCAL_SRC_FILES := installd.cpp $(common_src_files) LOCAL_SHARED_LIBRARIES := libcutils liblog libselinux LOCAL_STATIC_LIBRARIES := libdiskusage LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk diff --git a/cmds/installd/commands.c b/cmds/installd/commands.cpp similarity index 100% rename from cmds/installd/commands.c rename to cmds/installd/commands.cpp diff --git a/cmds/installd/installd.c b/cmds/installd/installd.cpp similarity index 98% rename from cmds/installd/installd.c rename to cmds/installd/installd.cpp index 930ba2ff3..ad2478bbf 100644 --- a/cmds/installd/installd.c +++ b/cmds/installd/installd.cpp @@ -1,16 +1,16 @@ /* ** Copyright 2008, 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 +** 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 +** 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 +** 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. */ @@ -40,7 +40,7 @@ static int do_dexopt(char **arg, char reply[REPLY_MAX] __unused) { /* apk_path, uid, is_public, pkgname, instruction_set, vm_safe_mode, should_relocate debuggable, outputPath */ - return dexopt(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3], arg[4], atoi(arg[5]), 0, + return dexopt(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3], arg[4], atoi(arg[5]), 0, atoi(arg[6]), arg[7]); } @@ -205,7 +205,7 @@ struct cmdinfo cmds[] = { static int readx(int s, void *_buf, int count) { - char *buf = _buf; + char *buf = (char *) _buf; int n = 0, r; if (count < 0) return -1; while (n < count) { @@ -226,7 +226,7 @@ static int readx(int s, void *_buf, int count) static int writex(int s, const void *_buf, int count) { - const char *buf = _buf; + const char *buf = (const char *) _buf; int n = 0, r; if (count < 0) return -1; while (n < count) { @@ -353,14 +353,14 @@ int initialize_globals() { } // Get the android external app directory. - if (get_path_from_string(&android_mnt_expand_dir, "/mnt/expand") < 0) { + if (get_path_from_string(&android_mnt_expand_dir, "/mnt/expand/") < 0) { return -1; } // Take note of the system and vendor directories. android_system_dirs.count = 4; - android_system_dirs.dirs = calloc(android_system_dirs.count, sizeof(dir_rec_t)); + android_system_dirs.dirs = (dir_rec_t*) calloc(android_system_dirs.count, sizeof(dir_rec_t)); if (android_system_dirs.dirs == NULL) { ALOGE("Couldn't allocate array for dirs; aborting\n"); return -1; @@ -378,10 +378,10 @@ int initialize_globals() { android_system_dirs.dirs[1].path = build_string2(android_root_dir.path, PRIV_APP_SUBDIR); android_system_dirs.dirs[1].len = strlen(android_system_dirs.dirs[1].path); - android_system_dirs.dirs[2].path = "/vendor/app/"; + android_system_dirs.dirs[2].path = strdup("/vendor/app/"); android_system_dirs.dirs[2].len = strlen(android_system_dirs.dirs[2].path); - android_system_dirs.dirs[3].path = "/oem/app/"; + android_system_dirs.dirs[3].path = strdup("/oem/app/"); android_system_dirs.dirs[3].len = strlen(android_system_dirs.dirs[3].path); return 0; diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h index 7c52b782e..0ebc0ba85 100644 --- a/cmds/installd/installd.h +++ b/cmds/installd/installd.h @@ -192,8 +192,8 @@ int validate_apk_path(const char *path); int append_and_increment(char** dst, const char* src, size_t* dst_size); -char *build_string2(char *s1, char *s2); -char *build_string3(char *s1, char *s2, char *s3); +char *build_string2(const char *s1, const char *s2); +char *build_string3(const char *s1, const char *s2, const char *s3); int ensure_dir(const char* path, mode_t mode, uid_t uid, gid_t gid); int ensure_media_user_dirs(userid_t userid); @@ -227,7 +227,7 @@ int mark_boot_complete(const char *instruction_set); int movefiles(); int linklib(const char* target, const char* source, int userId); int idmap(const char *target_path, const char *overlay_path, uid_t uid); -int restorecon_data(); +int restorecon_data(const char* pkgName, const char* seinfo, uid_t uid); int create_oat_dir(const char* oat_dir, const char *instruction_set); int rm_package_dir(const char* apk_path); int calculate_oat_file_path(char path[PKG_PATH_MAX], const char *oat_dir, const char *apk_path, diff --git a/cmds/installd/tests/installd_utils_test.cpp b/cmds/installd/tests/installd_utils_test.cpp index 94e479282..68d150b76 100644 --- a/cmds/installd/tests/installd_utils_test.cpp +++ b/cmds/installd/tests/installd_utils_test.cpp @@ -17,19 +17,18 @@ #include #include -#define LOG_TAG "utils_test" -#include - #include -extern "C" { #include "installd.h" -} + +#undef LOG_TAG +#define LOG_TAG "utils_test" #define TEST_DATA_DIR "/data/" #define TEST_APP_DIR "/data/app/" #define TEST_APP_PRIVATE_DIR "/data/app-private/" #define TEST_ASEC_DIR "/mnt/asec/" +#define TEST_EXPAND_DIR "/mnt/expand/" #define TEST_SYSTEM_DIR1 "/system/app/" #define TEST_SYSTEM_DIR2 "/vendor/app/" @@ -49,25 +48,28 @@ namespace android { class UtilsTest : public testing::Test { protected: virtual void SetUp() { - android_app_dir.path = TEST_APP_DIR; + android_app_dir.path = (char*) TEST_APP_DIR; android_app_dir.len = strlen(TEST_APP_DIR); - android_app_private_dir.path = TEST_APP_PRIVATE_DIR; + android_app_private_dir.path = (char*) TEST_APP_PRIVATE_DIR; android_app_private_dir.len = strlen(TEST_APP_PRIVATE_DIR); - android_data_dir.path = TEST_DATA_DIR; + android_data_dir.path = (char*) TEST_DATA_DIR; android_data_dir.len = strlen(TEST_DATA_DIR); - android_asec_dir.path = TEST_ASEC_DIR; + android_asec_dir.path = (char*) TEST_ASEC_DIR; android_asec_dir.len = strlen(TEST_ASEC_DIR); + android_mnt_expand_dir.path = (char*) TEST_EXPAND_DIR; + android_mnt_expand_dir.len = strlen(TEST_EXPAND_DIR); + android_system_dirs.count = 2; android_system_dirs.dirs = (dir_rec_t*) calloc(android_system_dirs.count, sizeof(dir_rec_t)); - android_system_dirs.dirs[0].path = TEST_SYSTEM_DIR1; + android_system_dirs.dirs[0].path = (char*) TEST_SYSTEM_DIR1; android_system_dirs.dirs[0].len = strlen(TEST_SYSTEM_DIR1); - android_system_dirs.dirs[1].path = TEST_SYSTEM_DIR2; + android_system_dirs.dirs[1].path = (char*) TEST_SYSTEM_DIR2; android_system_dirs.dirs[1].len = strlen(TEST_SYSTEM_DIR2); } @@ -373,7 +375,7 @@ TEST_F(UtilsTest, CreatePkgPathInDir_ProtectedDir) { char path[PKG_PATH_MAX]; dir_rec_t dir; - dir.path = "/data/app-private/"; + dir.path = (char*) "/data/app-private/"; dir.len = strlen(dir.path); EXPECT_EQ(0, create_pkg_path_in_dir(path, &dir, "com.example.package", ".apk")) @@ -432,7 +434,7 @@ TEST_F(UtilsTest, CopyAndAppend_Normal) { dir_rec_t dst; dir_rec_t src; - src.path = "/data/"; + src.path = (char*) "/data/"; src.len = strlen(src.path); EXPECT_EQ(0, copy_and_append(&dst, &src, "app/")) diff --git a/cmds/installd/utils.c b/cmds/installd/utils.cpp similarity index 98% rename from cmds/installd/utils.c rename to cmds/installd/utils.cpp index 54f90abe0..df2bbced8 100644 --- a/cmds/installd/utils.c +++ b/cmds/installd/utils.cpp @@ -61,7 +61,7 @@ int create_pkg_path(char path[PKG_PATH_MAX], userid_t userid) { size_t userid_len; - char* userid_prefix; + const char* userid_prefix; if (userid == 0) { userid_prefix = PRIMARY_USER_PREFIX; userid_len = 0; @@ -106,7 +106,7 @@ int create_user_path(char path[PKG_PATH_MAX], userid_t userid) { size_t userid_len; - char* userid_prefix; + const char* userid_prefix; if (userid == 0) { userid_prefix = PRIMARY_USER_PREFIX; userid_len = 0; @@ -516,7 +516,7 @@ static void* _cache_malloc(cache_t* cache, size_t len) int8_t* res = cache->curMemBlockAvail; int8_t* nextPos = res + len; if (cache->memBlocks == NULL || nextPos > cache->curMemBlockEnd) { - int8_t* newBlock = malloc(CACHE_BLOCK_SIZE); + int8_t* newBlock = (int8_t*) malloc(CACHE_BLOCK_SIZE); if (newBlock == NULL) { return NULL; } @@ -1000,7 +1000,7 @@ int get_path_from_string(dir_rec_t* rec, const char* path) { // Add space for slash and terminating null. size_t dst_size = path_len + 2; - rec->path = malloc(dst_size); + rec->path = (char*) malloc(dst_size); if (rec->path == NULL) { return -1; } @@ -1070,13 +1070,13 @@ int append_and_increment(char** dst, const char* src, size_t* dst_size) { return 0; } -char *build_string2(char *s1, char *s2) { +char *build_string2(const char *s1, const char *s2) { if (s1 == NULL || s2 == NULL) return NULL; int len_s1 = strlen(s1); int len_s2 = strlen(s2); int len = len_s1 + len_s2 + 1; - char *result = malloc(len); + char *result = (char *) malloc(len); if (result == NULL) return NULL; strcpy(result, s1); @@ -1085,14 +1085,14 @@ char *build_string2(char *s1, char *s2) { return result; } -char *build_string3(char *s1, char *s2, char *s3) { +char *build_string3(const char *s1, const char *s2, const char *s3) { if (s1 == NULL || s2 == NULL || s3 == NULL) return NULL; int len_s1 = strlen(s1); int len_s2 = strlen(s2); int len_s3 = strlen(s3); int len = len_s1 + len_s2 + len_s3 + 1; - char *result = malloc(len); + char *result = (char *) malloc(len); if (result == NULL) return NULL; strcpy(result, s1);