From b6de993c4527c7601c5b3243e69700da13c4ddc5 Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Wed, 26 Oct 2022 11:40:37 +0900 Subject: [PATCH] Add a new internal API Adds: - package_manager_clear_user_data_with_path() Change-Id: Id56fdbf613d823910d31315a1a61968295c5a780 Signed-off-by: Changgyu Choi --- include/package_manager_extension.h | 22 +++++++++++++++++++ src/package_manager.c | 44 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/include/package_manager_extension.h b/include/package_manager_extension.h index e811d86..237f7e5 100644 --- a/include/package_manager_extension.h +++ b/include/package_manager_extension.h @@ -136,6 +136,28 @@ int package_manager_request_mount_install_packages_with_cb(package_manager_reque void *user_data, int *id); + +/** + * @platform + * @brief Clears a data in given relative file path of user directories used by applications in the given package. + * @details A file or directory specified with the @a file_path stored in data directories used by applications in the package specified with the @a package_id are removed. + * @since_tizen 7.5 + * @privlevel platform + * @privilege %http://tizen.org/privilege/packagemanager.admin + * @param[in] package_id The package ID + * @param[in] file_path The file path that is relative path from the given package user data directory. + * @return @c 0 on success, + * otherwise a negative error value + * @retval #PACKAGE_MANAGER_ERROR_NONE Successful + * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied + * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE No such package + * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory + * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR I/O error + * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error + */ +int package_manager_clear_user_data_with_path(const char *package_id, const char *file_path); + /** * @} */ diff --git a/src/package_manager.c b/src/package_manager.c index 1408af3..7172fe0 100644 --- a/src/package_manager.c +++ b/src/package_manager.c @@ -1905,6 +1905,50 @@ API int package_manager_clear_data_dir(const char *package_id) return PACKAGE_MANAGER_ERROR_NONE; } + +API int package_manager_clear_user_data_with_path(const char *package_id, + const char *file_path) +{ + int retval; + pkgmgr_client *pc = NULL; + char *pkg_type = NULL; + pkgmgrinfo_pkginfo_h pkginfo = NULL; + + if (package_id == NULL || file_path == NULL) + return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER; + + retval = pkgmgrinfo_pkginfo_get_pkginfo(package_id, &pkginfo); + if (retval == PMINFO_R_ENOENT) + return PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE; + if (retval != PMINFO_R_OK || pkginfo == NULL) + return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR; + + retval = pkgmgrinfo_pkginfo_get_type(pkginfo, &pkg_type); + if (retval != PMINFO_R_OK || pkg_type == NULL) { + pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo); + return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR; + } + + pc = pkgmgr_client_new(PC_REQUEST); + if (pc == NULL) { + _LOGE("Out of memory"); + pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo); + return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY; + } + + retval = pkgmgr_client_clear_user_data_with_path(pc, pkg_type, + package_id, file_path, PM_QUIET); + pkgmgr_client_free(pc); + pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo); + + if (retval < 0) { + retval = package_manager_convert_internal_error(retval); + return package_manager_error(retval, __FUNCTION__, NULL); + } + + return PACKAGE_MANAGER_ERROR_NONE; +} + API int package_manager_clear_all_cache_dir(void) { int retval; -- 2.7.4