Add a new internal API 02/283402/8
authorChanggyu Choi <changyu.choi@samsung.com>
Wed, 26 Oct 2022 02:40:37 +0000 (11:40 +0900)
committerChanggyu Choi <changyu.choi@samsung.com>
Tue, 1 Nov 2022 01:45:16 +0000 (10:45 +0900)
Adds:
 - package_manager_clear_user_data_with_path()

Change-Id: Id56fdbf613d823910d31315a1a61968295c5a780
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
include/package_manager_extension.h
src/package_manager.c

index e811d86..237f7e5 100644 (file)
@@ -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);
+
 /**
 * @}
 */
index 1408af3..7172fe0 100644 (file)
@@ -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;