return ret;
}
-static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir)
-{
- // 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 1;
- }
-
-
- // Don't exclude regular files that start with the list
- // of prefixes.
- static const char data_app_prefix[] = "data@app@";
- static const char data_priv_app_prefix[] = "data@priv-app@";
- if (!strncmp(file_name, data_app_prefix, sizeof(data_app_prefix) - 1) ||
- !strncmp(file_name, data_priv_app_prefix, sizeof(data_priv_app_prefix) - 1)) {
- return 0;
- }
-
- // Exclude all regular files that don't start with the prefix "data@app@" or
- // "data@priv-app@".
- return 1;
-}
-
-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);
-}
/* pkgName, seinfo, uid*/
}
-static int do_prune_dex_cache(char **arg __attribute__((unused)),
- char reply[REPLY_MAX] __attribute__((unused)))
-{
- return prune_dex_cache(arg[0] /* subdirectory name */);
-}
-
static int do_patchoat(char **arg, char reply[REPLY_MAX]) {
/* apk_path, uid, is_public, pkgname, instruction_set, vm_safe_mode, should_relocate */
return dexopt(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3], arg[4], 0, 1);
{ "rmuser", 1, do_rm_user },
{ "idmap", 3, do_idmap },
{ "restorecondata", 3, do_restorecon_data },
- { "prunedexcache", 1, do_prune_dex_cache },
{ "patchoat", 5, do_patchoat },
};