summaryrefslogtreecommitdiffstats
path: root/cmds/installd
diff options
context:
space:
mode:
Diffstat (limited to 'cmds/installd')
-rw-r--r--cmds/installd/commands.c20
-rw-r--r--cmds/installd/installd.c6
-rw-r--r--cmds/installd/installd.h2
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);