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

Commit 357df19b authored by Narayan Kamath's avatar Narayan Kamath Committed by Gerrit Code Review
Browse files

Merge "Exclude subdirectories when pruning the dex cache."

parents 71f9956a 1e57e4af
Loading
Loading
Loading
Loading
+26 −5
Original line number Diff line number Diff line
@@ -1384,10 +1384,11 @@ int restorecon_data(const char* pkgName, const char* seinfo, uid_t uid)

static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir)
{
    // Don't exclude any directories, we want to inspect them
    // recusively for files.
    // Exclude all directories. The top level command will be
    // given a list of ISA specific directories that are assumed
    // to be flat.
    if (is_dir) {
      return 0;
      return 1;
    }


@@ -1405,6 +1406,26 @@ static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir
    return 1;
}

int prune_dex_cache() {
int prune_dex_cache(const char* subdir) {
    // "." is handled as a special case, and refers to
    // DALVIK_CACHE_PREFIX (usually /data/dalvik-cache).
    const bool is_dalvik_cache_root = !strcmp(subdir, ".");

    // Don't allow the path to contain "." or ".." except for the
    // special case above. This is much stricter than we need to be,
    // but there's no good reason to support them.
    if (strchr(subdir, '.' ) != NULL && !is_dalvik_cache_root) {
        return -1;
    }

    if (!is_dalvik_cache_root) {
        char full_path[PKG_PATH_MAX];
        snprintf(full_path, sizeof(full_path), "%s%s", DALVIK_CACHE_PREFIX, subdir);
        return delete_dir_contents(full_path, 0, &prune_dex_exclusion_predicate);
    }


    // When subdir == ".", clean the contents of the top level
    // dalvik-cache directory.
    return delete_dir_contents(DALVIK_CACHE_PREFIX, 0, &prune_dex_exclusion_predicate);
}
+2 −2
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@ static int do_restorecon_data(char **arg, char reply[REPLY_MAX] __attribute__((u
static int do_prune_dex_cache(char **arg __attribute__((unused)),
                              char reply[REPLY_MAX] __attribute__((unused)))
{
    return prune_dex_cache();
    return prune_dex_cache(arg[0] /* subdirectory name */);
}

struct cmdinfo {
@@ -172,7 +172,7 @@ struct cmdinfo cmds[] = {
    { "rmuser",               1, do_rm_user },
    { "idmap",                3, do_idmap },
    { "restorecondata",       3, do_restorecon_data },
    { "prunedexcache",        0, do_prune_dex_cache },
    { "prunedexcache",        1, do_prune_dex_cache },
};

static int readx(int s, void *_buf, int count)
+1 −1
Original line number Diff line number Diff line
@@ -220,4 +220,4 @@ 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 prune_dex_cache();
int prune_dex_cache(const char* subdir);