* commit '9bc8c62ea4d86d948af7a2aade8b0b5502a84b6a': Exclude subdirectories when pruning the dex cache.
This commit is contained in:
commit
b410863d6a
@ -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)
|
static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir)
|
||||||
{
|
{
|
||||||
// Don't exclude any directories, we want to inspect them
|
// Exclude all directories. The top level command will be
|
||||||
// recusively for files.
|
// given a list of ISA specific directories that are assumed
|
||||||
|
// to be flat.
|
||||||
if (is_dir) {
|
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;
|
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);
|
return delete_dir_contents(DALVIK_CACHE_PREFIX, 0, &prune_dex_exclusion_predicate);
|
||||||
}
|
}
|
||||||
|
@ -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)),
|
static int do_prune_dex_cache(char **arg __attribute__((unused)),
|
||||||
char reply[REPLY_MAX] __attribute__((unused)))
|
char reply[REPLY_MAX] __attribute__((unused)))
|
||||||
{
|
{
|
||||||
return prune_dex_cache();
|
return prune_dex_cache(arg[0] /* subdirectory name */);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cmdinfo {
|
struct cmdinfo {
|
||||||
@ -172,7 +172,7 @@ struct cmdinfo cmds[] = {
|
|||||||
{ "rmuser", 1, do_rm_user },
|
{ "rmuser", 1, do_rm_user },
|
||||||
{ "idmap", 3, do_idmap },
|
{ "idmap", 3, do_idmap },
|
||||||
{ "restorecondata", 3, do_restorecon_data },
|
{ "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)
|
static int readx(int s, void *_buf, int count)
|
||||||
|
@ -220,4 +220,4 @@ int movefiles();
|
|||||||
int linklib(const char* target, const char* source, int userId);
|
int linklib(const char* target, const char* source, int userId);
|
||||||
int idmap(const char *target_path, const char *overlay_path, uid_t uid);
|
int idmap(const char *target_path, const char *overlay_path, uid_t uid);
|
||||||
int restorecon_data();
|
int restorecon_data();
|
||||||
int prune_dex_cache();
|
int prune_dex_cache(const char* subdir);
|
||||||
|
Loading…
Reference in New Issue
Block a user