summaryrefslogtreecommitdiffstats
path: root/cmds
diff options
context:
space:
mode:
authorPawit Pornkitprasan <p.pawit@gmail.com>2011-12-25 17:37:53 +0700
committerPawit Pornkitprasan <p.pawit@gmail.com>2013-01-10 17:01:17 +0700
commit0e7f769089a7208b0d719c8e5f48fa22a338737c (patch)
tree957ba80d565b1aa7f22145e1d4692896419ce0a0 /cmds
parent6bbe7b78b9cd97d83dd4fb9726e3c6e4bc0207eb (diff)
downloadframeworks_base-0e7f769089a7208b0d719c8e5f48fa22a338737c.zip
frameworks_base-0e7f769089a7208b0d719c8e5f48fa22a338737c.tar.gz
frameworks_base-0e7f769089a7208b0d719c8e5f48fa22a338737c.tar.bz2
installd: Delete cache properly for devices using datadata partition
The java side already checks /data/data for free space but installd still checks /data causing it to never reap the cache (because it thinks that enough free space is available.) Change-Id: I736af6ff7ea0c8ae07900168f6b8ac2f7a4dbe0b
Diffstat (limited to 'cmds')
-rw-r--r--cmds/installd/commands.c1
-rw-r--r--cmds/installd/installd.c5
-rw-r--r--cmds/installd/installd.h3
-rw-r--r--cmds/installd/utils.c6
4 files changed, 14 insertions, 1 deletions
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c
index a44d626..d19db32 100644
--- a/cmds/installd/commands.c
+++ b/cmds/installd/commands.c
@@ -24,6 +24,7 @@
/* Directory records that are used in execution of commands. */
dir_rec_t android_data_dir;
+dir_rec_t android_datadata_dir;
dir_rec_t android_asec_dir;
dir_rec_t android_app_dir;
dir_rec_t android_app_private_dir;
diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c
index 21d674a..17a1a1f 100644
--- a/cmds/installd/installd.c
+++ b/cmds/installd/installd.c
@@ -274,6 +274,11 @@ int initialize_globals() {
return -1;
}
+ // Get the android datadata directory.
+ if (copy_and_append(&android_datadata_dir, &android_data_dir, DATA_SUBDIR) < 0) {
+ return -1;
+ }
+
// Get the android app directory.
if (copy_and_append(&android_app_dir, &android_data_dir, APP_SUBDIR) < 0) {
return -1;
diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h
index c352b60..a8461eb 100644
--- a/cmds/installd/installd.h
+++ b/cmds/installd/installd.h
@@ -60,6 +60,8 @@
#define CACHE_DIR_POSTFIX "/cache"
+#define DATA_SUBDIR "data/" // sub-directory under ANDROID_DATA
+
#define APP_SUBDIR "app/" // sub-directory under ANDROID_DATA
#define APP_LIB_SUBDIR "app-lib/" // sub-directory under ANDROID_DATA
@@ -98,6 +100,7 @@ extern dir_rec_t android_app_dir;
extern dir_rec_t android_app_private_dir;
extern dir_rec_t android_app_lib_dir;
extern dir_rec_t android_data_dir;
+extern dir_rec_t android_datadata_dir;
extern dir_rec_t android_asec_dir;
extern dir_rec_t android_media_dir;
extern dir_rec_array_t android_system_dirs;
diff --git a/cmds/installd/utils.c b/cmds/installd/utils.c
index 625a35e..154a2f8 100644
--- a/cmds/installd/utils.c
+++ b/cmds/installd/utils.c
@@ -362,7 +362,11 @@ int lookup_media_dir(char basepath[PATH_MAX], const char *dir)
int64_t data_disk_free()
{
struct statfs sfs;
- if (statfs(android_data_dir.path, &sfs) == 0) {
+ /* Scanning /data/data because on some devices, it's on a different partition
+ * and scanning /data will yield the incorrect result. (This function is only
+ * used for freeing space on /data/data so it is okay to be more specific.)
+ */
+ if (statfs(android_datadata_dir.path, &sfs) == 0) {
return sfs.f_bavail * sfs.f_bsize;
} else {
ALOGE("Couldn't statfs %s: %s\n", android_data_dir.path, strerror(errno));