Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75d4e57d authored by cjbao's avatar cjbao
Browse files

installd create_data_user_ce_path uses dir instead of symlink



Select whichever is real dir instead of symbolic link from either
/data/data or /data/user/0. This is to minimize path walking overhead
in kernel.

Test: Manual test
Change-Id: Ie06640624746ff40a2b5b47ead50a7f10eb2db3e
Signed-off-by: default avatarcjbao <cathy.bao@intel.com>
parent cf617abc
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -170,18 +170,19 @@ std::string create_data_app_path(const char* volume_uuid) {

/**
 * Create the path name for user data for a certain userid.
 * Keep same implementation as vold to minimize path walking overhead
 */
std::string create_data_user_ce_path(const char* volume_uuid, userid_t userid) {
    std::string data(create_data_path(volume_uuid));
    if (volume_uuid == nullptr) {
        if (userid == 0) {
            return StringPrintf("%s/data", data.c_str());
        } else {
            return StringPrintf("%s/user/%u", data.c_str(), userid);
    if (volume_uuid == nullptr && userid == 0) {
        std::string legacy = StringPrintf("%s/data", data.c_str());
        struct stat sb;
        if (lstat(legacy.c_str(), &sb) == 0 && S_ISDIR(sb.st_mode)) {
            /* /data/data is dir, return /data/data for legacy system */
            return legacy;
        }
    } else {
        return StringPrintf("%s/user/%u", data.c_str(), userid);
    }
    return StringPrintf("%s/user/%u", data.c_str(), userid);
}

/**