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

Commit bb54a7df authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Newly create idmap only when it is outdated" into oc-dev

parents 35c1e696 1d091465
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -1983,6 +1983,8 @@ binder::Status InstalldNativeService::idmap(const std::string& targetApkPath,

    int idmap_fd = -1;
    char idmap_path[PATH_MAX];
    struct stat target_apk_stat, overlay_apk_stat, idmap_stat;
    bool outdated = false;

    if (flatten_path(IDMAP_PREFIX, IDMAP_SUFFIX, overlay_apk,
                idmap_path, sizeof(idmap_path)) == -1) {
@@ -1990,8 +1992,22 @@ binder::Status InstalldNativeService::idmap(const std::string& targetApkPath,
        goto fail;
    }

    if (stat(idmap_path, &idmap_stat) < 0 ||
            stat(target_apk, &target_apk_stat) < 0 ||
            stat(overlay_apk, &overlay_apk_stat) < 0) {
        outdated = true;
    } else if (idmap_stat.st_mtime < target_apk_stat.st_mtime ||
            idmap_stat.st_mtime < overlay_apk_stat.st_mtime) {
        outdated = true;
    }

    if (outdated) {
        unlink(idmap_path);
        idmap_fd = open(idmap_path, O_RDWR | O_CREAT | O_EXCL, 0644);
    } else {
        idmap_fd = open(idmap_path, O_RDWR);
    }

    if (idmap_fd < 0) {
        ALOGE("idmap cannot open '%s' for output: %s\n", idmap_path, strerror(errno));
        goto fail;
@@ -2005,6 +2021,11 @@ binder::Status InstalldNativeService::idmap(const std::string& targetApkPath,
        goto fail;
    }

    if (!outdated) {
        close(idmap_fd);
        return ok();
    }

    pid_t pid;
    pid = fork();
    if (pid == 0) {