diff options
Diffstat (limited to 'cmds/installd')
-rw-r--r-- | cmds/installd/commands.c | 20 | ||||
-rw-r--r-- | cmds/installd/installd.c | 6 | ||||
-rw-r--r-- | cmds/installd/installd.h | 2 |
3 files changed, 21 insertions, 7 deletions
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c index a347fa8..e06cddd 100644 --- a/cmds/installd/commands.c +++ b/cmds/installd/commands.c @@ -177,10 +177,6 @@ int fix_uid(const char *pkgname, uid_t uid, gid_t gid) return 0; } -static int lib_dir_matcher(const char* file_name, const int is_dir) { - return is_dir && !strcmp(file_name, "lib"); -} - int delete_user_data(const char *pkgname, userid_t userid) { char pkgdir[PKG_PATH_MAX]; @@ -188,8 +184,7 @@ int delete_user_data(const char *pkgname, userid_t userid) if (create_pkg_path(pkgdir, pkgname, PKG_DIR_POSTFIX, userid)) return -1; - /* delete contents, excluding "lib", but not the directory itself */ - return delete_dir_contents(pkgdir, 0, &lib_dir_matcher); + return delete_dir_contents(pkgdir, 0, NULL); } int make_user_data(const char *pkgname, uid_t uid, userid_t userid, const char* seinfo) @@ -311,10 +306,21 @@ int delete_cache(const char *pkgname, userid_t userid) if (create_pkg_path(cachedir, pkgname, CACHE_DIR_POSTFIX, userid)) return -1; - /* delete contents, not the directory, no exceptions */ + /* delete contents, not the directory, no exceptions */ return delete_dir_contents(cachedir, 0, NULL); } +int delete_code_cache(const char *pkgname, userid_t userid) +{ + char codecachedir[PKG_PATH_MAX]; + + if (create_pkg_path(codecachedir, pkgname, CODE_CACHE_DIR_POSTFIX, userid)) + return -1; + + /* delete contents, not the directory, no exceptions */ + return delete_dir_contents(codecachedir, 0, NULL); +} + /* Try to ensure free_size bytes of storage are available. * Returns 0 on success. * This is rather simple-minded because doing a full LRU would diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c index 4ebe803..c7fdf7a 100644 --- a/cmds/installd/installd.c +++ b/cmds/installd/installd.c @@ -77,6 +77,11 @@ static int do_rm_cache(char **arg, char reply[REPLY_MAX]) return delete_cache(arg[0], atoi(arg[1])); /* pkgname, userid */ } +static int do_rm_code_cache(char **arg, char reply[REPLY_MAX]) +{ + return delete_code_cache(arg[0], atoi(arg[1])); /* pkgname, userid */ +} + static int do_get_size(char **arg, char reply[REPLY_MAX]) { int64_t codesize = 0; @@ -162,6 +167,7 @@ struct cmdinfo cmds[] = { { "fixuid", 3, do_fixuid }, { "freecache", 1, do_free_cache }, { "rmcache", 2, do_rm_cache }, + { "rmcodecache", 2, do_rm_code_cache }, { "getsize", 7, do_get_size }, { "rmuserdata", 2, do_rm_user_data }, { "movefiles", 0, do_movefiles }, diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h index 0faff4b..99f037c 100644 --- a/cmds/installd/installd.h +++ b/cmds/installd/installd.h @@ -59,6 +59,7 @@ #define PKG_LIB_POSTFIX "/lib" #define CACHE_DIR_POSTFIX "/cache" +#define CODE_CACHE_DIR_POSTFIX "/code_cache" #define APP_SUBDIR "app/" // sub-directory under ANDROID_DATA @@ -207,6 +208,7 @@ int make_user_data(const char *pkgname, uid_t uid, userid_t userid, const char* int make_user_config(userid_t userid); int delete_user(userid_t userid); int delete_cache(const char *pkgname, userid_t userid); +int delete_code_cache(const char *pkgname, userid_t userid); int move_dex(const char *src, const char *dst, const char *instruction_set); int rm_dex(const char *path, const char *instruction_set); int protect(char *pkgname, gid_t gid); |