summaryrefslogtreecommitdiff
path: root/cmds/installd/InstalldNativeService.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cmds/installd/InstalldNativeService.cpp')
-rw-r--r--cmds/installd/InstalldNativeService.cpp34
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