Loading cmds/installd/InstalldNativeService.cpp +27 −24 Original line number Diff line number Diff line Loading @@ -941,6 +941,33 @@ binder::Status InstalldNativeService::snapshotAppData( auto scope_guard = android::base::make_scope_guard(deleter); if (storageFlags & FLAG_STORAGE_DE) { auto from = create_data_user_de_package_path(volume_uuid, user, package_name); auto to = create_data_misc_de_rollback_path(volume_uuid, user, snapshotId); auto rollback_package_path = create_data_misc_de_rollback_package_path(volume_uuid, user, snapshotId, package_name); int rc = create_dir_if_needed(to.c_str(), kRollbackFolderMode); if (rc != 0) { return error(rc, "Failed to create folder " + to); } rc = delete_dir_contents(rollback_package_path, true /* ignore_if_missing */); if (rc != 0) { return error(rc, "Failed clearing existing snapshot " + rollback_package_path); } // Check if we have data to copy. if (access(from.c_str(), F_OK) == 0) { rc = copy_directory_recursive(from.c_str(), to.c_str()); } if (rc != 0) { res = error(rc, "Failed copying " + from + " to " + to); clear_de_on_exit = true; return res; } } // The app may not have any data at all, in which case it's OK to skip here. auto from_ce = create_data_user_ce_package_path(volume_uuid, user, package_name); if (access(from_ce.c_str(), F_OK) != 0) { Loading @@ -966,30 +993,6 @@ binder::Status InstalldNativeService::snapshotAppData( LOG(WARNING) << "Failed to clear code_cache of app " << packageName; } if (storageFlags & FLAG_STORAGE_DE) { auto from = create_data_user_de_package_path(volume_uuid, user, package_name); auto to = create_data_misc_de_rollback_path(volume_uuid, user, snapshotId); auto rollback_package_path = create_data_misc_de_rollback_package_path(volume_uuid, user, snapshotId, package_name); int rc = create_dir_if_needed(to.c_str(), kRollbackFolderMode); if (rc != 0) { return error(rc, "Failed to create folder " + to); } rc = delete_dir_contents(rollback_package_path, true /* ignore_if_missing */); if (rc != 0) { return error(rc, "Failed clearing existing snapshot " + rollback_package_path); } rc = copy_directory_recursive(from.c_str(), to.c_str()); if (rc != 0) { res = error(rc, "Failed copying " + from + " to " + to); clear_de_on_exit = true; return res; } } if (storageFlags & FLAG_STORAGE_CE) { auto from = create_data_user_ce_package_path(volume_uuid, user, package_name); auto to = create_data_misc_ce_rollback_path(volume_uuid, user, snapshotId); Loading Loading
cmds/installd/InstalldNativeService.cpp +27 −24 Original line number Diff line number Diff line Loading @@ -941,6 +941,33 @@ binder::Status InstalldNativeService::snapshotAppData( auto scope_guard = android::base::make_scope_guard(deleter); if (storageFlags & FLAG_STORAGE_DE) { auto from = create_data_user_de_package_path(volume_uuid, user, package_name); auto to = create_data_misc_de_rollback_path(volume_uuid, user, snapshotId); auto rollback_package_path = create_data_misc_de_rollback_package_path(volume_uuid, user, snapshotId, package_name); int rc = create_dir_if_needed(to.c_str(), kRollbackFolderMode); if (rc != 0) { return error(rc, "Failed to create folder " + to); } rc = delete_dir_contents(rollback_package_path, true /* ignore_if_missing */); if (rc != 0) { return error(rc, "Failed clearing existing snapshot " + rollback_package_path); } // Check if we have data to copy. if (access(from.c_str(), F_OK) == 0) { rc = copy_directory_recursive(from.c_str(), to.c_str()); } if (rc != 0) { res = error(rc, "Failed copying " + from + " to " + to); clear_de_on_exit = true; return res; } } // The app may not have any data at all, in which case it's OK to skip here. auto from_ce = create_data_user_ce_package_path(volume_uuid, user, package_name); if (access(from_ce.c_str(), F_OK) != 0) { Loading @@ -966,30 +993,6 @@ binder::Status InstalldNativeService::snapshotAppData( LOG(WARNING) << "Failed to clear code_cache of app " << packageName; } if (storageFlags & FLAG_STORAGE_DE) { auto from = create_data_user_de_package_path(volume_uuid, user, package_name); auto to = create_data_misc_de_rollback_path(volume_uuid, user, snapshotId); auto rollback_package_path = create_data_misc_de_rollback_package_path(volume_uuid, user, snapshotId, package_name); int rc = create_dir_if_needed(to.c_str(), kRollbackFolderMode); if (rc != 0) { return error(rc, "Failed to create folder " + to); } rc = delete_dir_contents(rollback_package_path, true /* ignore_if_missing */); if (rc != 0) { return error(rc, "Failed clearing existing snapshot " + rollback_package_path); } rc = copy_directory_recursive(from.c_str(), to.c_str()); if (rc != 0) { res = error(rc, "Failed copying " + from + " to " + to); clear_de_on_exit = true; return res; } } if (storageFlags & FLAG_STORAGE_CE) { auto from = create_data_user_ce_package_path(volume_uuid, user, package_name); auto to = create_data_misc_ce_rollback_path(volume_uuid, user, snapshotId); Loading