From 723f1a2b318a455983d21ccf3598885f766bb8c9 Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Thu, 4 May 2017 16:54:53 +0800 Subject: [PATCH] Load {default,build}.prop from /{system,vendor,odm}/etc/ /default.prop may be moved to /system/etc/ and renamed as prop.default. /{system,vendor,odm}/build.prop may be moved to /{system,vendor,odm}/etc/ and renamed as prop.build. This patch makes property_service load prop.* from the new locations first. Also replaces NULL with nullptr for C++ cleanup. Bug: 37815285 Test: Booted pixel phones, checked the locations of prop.*, verified symlinks, checked a few properties (via adb shell getprop) and manually tested a few apps (Camera, Maps etc). ODM is not tested as it does not exist on the tested device. Change-Id: Id8eeb3c1a5728dd04005dfad4733b8e6336f9093 --- init/property_service.cpp | 34 +++++++++++++++++++++++----------- libcutils/fs_config.cpp | 15 +++++++++------ 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/init/property_service.cpp b/init/property_service.cpp index 18e47e3df..7fa37c8a9 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp @@ -443,7 +443,7 @@ static void handle_property_set_fd() { } } -static void load_properties_from_file(const char *, const char *); +static bool load_properties_from_file(const char *, const char *); /* * Filter is used to decide which properties to load: NULL loads all keys, @@ -507,17 +507,18 @@ static void load_properties(char *data, const char *filter) // Filter is used to decide which properties to load: NULL loads all keys, // "ro.foo.*" is a prefix match, and "ro.foo.bar" is an exact match. -static void load_properties_from_file(const char* filename, const char* filter) { +static bool load_properties_from_file(const char* filename, const char* filter) { Timer t; std::string data; std::string err; if (!ReadFile(filename, &data, &err)) { - PLOG(WARNING) << "Couldn't load property file: " << err; - return; + PLOG(WARNING) << "Couldn't load property file: " << filename << ": " << err; + return false; } data.push_back('\n'); load_properties(&data[0], filter); LOG(VERBOSE) << "(Loading properties from " << filename << " took " << t << ".)"; + return true; } static void load_persistent_properties() { @@ -592,16 +593,21 @@ static void update_sys_usb_config() { } void property_load_boot_defaults() { - load_properties_from_file("/default.prop", NULL); - load_properties_from_file("/odm/default.prop", NULL); - load_properties_from_file("/vendor/default.prop", NULL); + if (!load_properties_from_file("/system/etc/prop.default", nullptr)) { + // for legacy devices + if (!load_properties_from_file("/default.prop", nullptr)) { + PLOG(ERROR) << "Failed to load default prop"; + } + } + load_properties_from_file("/odm/etc/prop.default", nullptr); + load_properties_from_file("/vendor/etc/prop.default", nullptr); update_sys_usb_config(); } static void load_override_properties() { if (ALLOW_LOCAL_PROP_OVERRIDE) { - load_properties_from_file("/data/local.prop", NULL); + load_properties_from_file("/data/local.prop", nullptr); } } @@ -649,9 +655,15 @@ void load_recovery_id_prop() { } void load_system_props() { - load_properties_from_file("/system/build.prop", NULL); - load_properties_from_file("/odm/build.prop", NULL); - load_properties_from_file("/vendor/build.prop", NULL); + if (!load_properties_from_file("/system/etc/prop.build", nullptr)) { + // for legacy devices + load_properties_from_file("/system/build.prop", nullptr); + } + load_properties_from_file("/odm/etc/prop.build", nullptr); + if (!load_properties_from_file("/vendor/etc/prop.build", nullptr)) { + // for legacy devices + load_properties_from_file("/vendor/build.prop", nullptr); + } load_properties_from_file("/factory/factory.prop", "ro.*"); load_recovery_id_prop(); } diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp index 919b65bc3..dd1ad3a38 100644 --- a/libcutils/fs_config.cpp +++ b/libcutils/fs_config.cpp @@ -134,9 +134,10 @@ static const struct fs_path_config android_files[] = { { 00640, AID_ROOT, AID_SHELL, 0, "data/nativetest64/tests.txt" }, { 00750, AID_ROOT, AID_SHELL, 0, "data/nativetest/*" }, { 00750, AID_ROOT, AID_SHELL, 0, "data/nativetest64/*" }, - { 00600, AID_ROOT, AID_ROOT, 0, "default.prop" }, - { 00600, AID_ROOT, AID_ROOT, 0, "odm/build.prop" }, - { 00600, AID_ROOT, AID_ROOT, 0, "odm/default.prop" }, + { 00600, AID_ROOT, AID_ROOT, 0, "default.prop" }, // legacy + { 00600, AID_ROOT, AID_ROOT, 0, "system/etc/prop.default" }, + { 00600, AID_ROOT, AID_ROOT, 0, "odm/etc/prop.build" }, + { 00600, AID_ROOT, AID_ROOT, 0, "odm/etc/prop.default" }, { 00444, AID_ROOT, AID_ROOT, 0, odm_conf_dir + 1 }, { 00444, AID_ROOT, AID_ROOT, 0, odm_conf_file + 1 }, { 00444, AID_ROOT, AID_ROOT, 0, oem_conf_dir + 1 }, @@ -148,7 +149,8 @@ static const struct fs_path_config android_files[] = { { 00750, AID_ROOT, AID_ROOT, 0, "system/bin/install-recovery.sh" }, { 00700, AID_ROOT, AID_ROOT, 0, "system/bin/secilc" }, { 00750, AID_ROOT, AID_ROOT, 0, "system/bin/uncrypt" }, - { 00600, AID_ROOT, AID_ROOT, 0, "system/build.prop" }, + { 00600, AID_ROOT, AID_ROOT, 0, "system/build.prop" }, // legacy + { 00600, AID_ROOT, AID_ROOT, 0, "system/etc/prop.build" }, { 00444, AID_ROOT, AID_ROOT, 0, sys_conf_dir + 1 }, { 00444, AID_ROOT, AID_ROOT, 0, sys_conf_file + 1 }, { 00440, AID_ROOT, AID_SHELL, 0, "system/etc/init.goldfish.rc" }, @@ -157,8 +159,9 @@ static const struct fs_path_config android_files[] = { { 00555, AID_ROOT, AID_ROOT, 0, "system/etc/ppp/*" }, { 00555, AID_ROOT, AID_ROOT, 0, "system/etc/rc.*" }, { 00440, AID_ROOT, AID_ROOT, 0, "system/etc/recovery.img" }, - { 00600, AID_ROOT, AID_ROOT, 0, "vendor/build.prop" }, - { 00600, AID_ROOT, AID_ROOT, 0, "vendor/default.prop" }, + { 00600, AID_ROOT, AID_ROOT, 0, "vendor/build.prop" }, // legacy + { 00600, AID_ROOT, AID_ROOT, 0, "vendor/etc/prop.build" }, + { 00600, AID_ROOT, AID_ROOT, 0, "vendor/etc/prop.default" }, { 00444, AID_ROOT, AID_ROOT, 0, ven_conf_dir + 1 }, { 00444, AID_ROOT, AID_ROOT, 0, ven_conf_file + 1 },