diff options
Diffstat (limited to 'cmds/installd/InstalldNativeService.cpp')
-rw-r--r-- | cmds/installd/InstalldNativeService.cpp | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp index b20c90850b..505113248c 100644 --- a/cmds/installd/InstalldNativeService.cpp +++ b/cmds/installd/InstalldNativeService.cpp @@ -957,13 +957,13 @@ binder::Status InstalldNativeService::destroyAppData(const std::optional<std::st binder::Status res = ok(); if (flags & FLAG_STORAGE_CE) { auto path = create_data_user_ce_package_path(uuid_, userId, pkgname, ceDataInode); - if (delete_dir_contents_and_dir(path) != 0) { + if (rename_delete_dir_contents_and_dir(path) != 0) { res = error("Failed to delete " + path); } } if (flags & FLAG_STORAGE_DE) { auto path = create_data_user_de_package_path(uuid_, userId, pkgname); - if (delete_dir_contents_and_dir(path) != 0) { + if (rename_delete_dir_contents_and_dir(path) != 0) { res = error("Failed to delete " + path); } if ((flags & FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES) == 0) { @@ -994,16 +994,15 @@ binder::Status InstalldNativeService::destroyAppData(const std::optional<std::st } auto path = StringPrintf("%s/Android/data/%s", extPath.c_str(), pkgname); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); } - path = StringPrintf("%s/Android/media/%s", extPath.c_str(), pkgname); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); } path = StringPrintf("%s/Android/obb/%s", extPath.c_str(), pkgname); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); } } @@ -1551,27 +1550,27 @@ binder::Status InstalldNativeService::destroyUserData(const std::optional<std::s binder::Status res = ok(); if (flags & FLAG_STORAGE_DE) { auto path = create_data_user_de_path(uuid_, userId); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete " + path); } if (uuid_ == nullptr) { path = create_data_misc_legacy_path(userId); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete " + path); } path = create_primary_cur_profile_dir_path(userId); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete " + path); } } } if (flags & FLAG_STORAGE_CE) { auto path = create_data_user_ce_path(uuid_, userId); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete " + path); } path = findDataMediaPath(uuid, userId); - if (delete_dir_contents_and_dir(path, true) != 0) { + if (rename_delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete " + path); } } @@ -3177,5 +3176,18 @@ binder::Status InstalldNativeService::migrateLegacyObbData() { return ok(); } +binder::Status InstalldNativeService::cleanupDeletedDirs(const std::optional<std::string>& uuid) { + const char* uuid_cstr = uuid ? uuid->c_str() : nullptr; + const auto users = get_known_users(uuid_cstr); + for (auto userId : users) { + auto ce_path = create_data_user_ce_path(uuid_cstr, userId); + auto de_path = create_data_user_de_path(uuid_cstr, userId); + + find_and_delete_renamed_deleted_dirs_under_path(ce_path); + find_and_delete_renamed_deleted_dirs_under_path(de_path); + } + return ok(); +} + } // namespace installd } // namespace android |