Merge "Load {default,build}.prop from /{system,vendor,odm}/etc/" am: a9aa77d259 am: 26c4bcfadd
am: 0cd0d52147

Change-Id: Ide638286886cef323e8bb049f5baf4bbe659c47a
diff --git a/init/property_service.cpp b/init/property_service.cpp
index 18e47e3..7fa37c8 100644
--- a/init/property_service.cpp
+++ b/init/property_service.cpp
@@ -443,7 +443,7 @@
     }
 }
 
-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 @@
 
 // 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 @@
 }
 
 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_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 221dea2..5defb69 100644
--- a/libcutils/fs_config.cpp
+++ b/libcutils/fs_config.cpp
@@ -134,9 +134,10 @@
     { 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 @@
     { 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 @@
     { 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 },