diff options
Diffstat (limited to 'cmds')
-rw-r--r-- | cmds/installd/commands.c | 1 | ||||
-rw-r--r-- | cmds/installd/installd.c | 5 | ||||
-rw-r--r-- | cmds/installd/installd.h | 3 | ||||
-rw-r--r-- | cmds/installd/utils.c | 6 |
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)); |