+
+API int package_manager_request_add_res_copy_path(
+ package_manager_request_h request,
+ const char *src_path, const char *dest_path)
+{
+ int retval = 0;
+
+ if (package_manager_client_validate_handle(request)
+ || src_path == NULL || dest_path == NULL) {
+ return
+ package_manager_error
+ (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
+ NULL);
+ }
+
+ retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (retval != PACKAGE_MANAGER_ERROR_NONE)
+ return retval;
+
+ if (pkgmgr_client_add_res_copy_path(request->pc, src_path, dest_path))
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_request_res_copy_with_cb(package_manager_request_h request,
+ package_manager_request_res_event_cb callback,
+ void *user_data, int *id)
+{
+ int ret;
+ int req_id = 0;
+
+ ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return ret;
+
+ if (request->request_cb_table == NULL)
+ __initialize_request_cb_table(request);
+
+ ret = __request_res_copy(request, internal_res_request_callback, &req_id);
+
+ if (req_id > 0) {
+ ret = __insert_res_request_cb_info(request, req_id,
+ callback, user_data);
+ if (ret < 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
+ __FUNCTION__, "failed to create request cb info");
+ if (id)
+ *id = req_id;
+ }
+
+ return ret;
+}
+
+API int package_manager_request_add_res_create_dir_path(
+ package_manager_request_h request, const char *dir_path)
+{
+ int retval = 0;
+
+ if (package_manager_client_validate_handle(request)
+ || dir_path == NULL) {
+ return
+ package_manager_error
+ (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
+ NULL);
+ }
+
+ retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (retval != PACKAGE_MANAGER_ERROR_NONE)
+ return retval;
+
+ if (pkgmgr_client_add_res_create_dir_path(request->pc, dir_path))
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_request_res_create_dir_with_cb(
+ package_manager_request_h request,
+ package_manager_request_res_event_cb callback,
+ void *user_data, int *id)
+{
+ int ret;
+ int req_id = 0;
+
+ if (request->request_cb_table == NULL)
+ __initialize_request_cb_table(request);
+
+ ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return ret;
+
+ ret = __request_res_create_dir(request, internal_res_request_callback, &req_id);
+
+ if (req_id > 0) {
+ ret = __insert_res_request_cb_info(request, req_id,
+ callback, user_data);
+ if (ret < 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
+ __FUNCTION__, "failed to create request cb info");
+ if (id)
+ *id = req_id;
+ }
+
+ return ret;
+}
+
+API int package_manager_request_add_res_remove_path(
+ package_manager_request_h request, const char *res_path)
+{
+ int retval = 0;
+
+ if (package_manager_client_validate_handle(request)
+ || res_path == NULL) {
+ return
+ package_manager_error
+ (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
+ NULL);
+ }
+
+ retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (retval != PACKAGE_MANAGER_ERROR_NONE)
+ return retval;
+
+ if (pkgmgr_client_add_res_remove_path(request->pc, res_path))
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_request_res_remove_with_cb(
+ package_manager_request_h request,
+ package_manager_request_res_event_cb callback,
+ void *user_data, int *id)
+{
+ int ret;
+ int req_id = 0;
+
+ ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return ret;
+
+ if (request->request_cb_table == NULL)
+ __initialize_request_cb_table(request);
+
+ ret = __request_res_remove(request, internal_res_request_callback, &req_id);
+
+ if (req_id > 0) {
+ ret = __insert_res_request_cb_info(request, req_id,
+ callback, user_data);
+ if (ret < 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
+ __FUNCTION__, "failed to create request cb info");
+ if (id)
+ *id = req_id;
+ }
+
+ return ret;
+}
+
+API int package_manager_res_event_info_get_error_code(
+ package_manager_res_event_info_h handle,
+ package_manager_error_e *error)
+{
+ int ret;
+ int error_code = 0;
+
+ ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return ret;
+
+ if (handle == NULL || error == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ struct package_manager_res_event_info_s *event_info =
+ (struct package_manager_res_event_info_s *)handle;
+
+ if (event_info->res_event_info_handle == NULL)
+ return package_manager_error(
+ PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
+ __FUNCTION__, NULL);
+
+ if (pkgmgr_res_event_info_get_error_code(
+ event_info->res_event_info_handle, &error_code))
+ return package_manager_error(
+ PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
+ __FUNCTION__, NULL);
+
+ *error = __convert_to_error(error_code);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+typedef struct _foreach_res_event_path_context_ {
+ package_manager_res_event_path_cb callback;
+ void *user_data;
+} foreach_res_event_path_context_s;
+
+static int package_res_event_info_foreach_path_cb(const char *path,
+ pkgmgr_res_event_path_state state, void *user_data)
+{
+ foreach_res_event_path_context_s *foreach_context = user_data;
+ package_manager_res_event_path_state_e path_state =
+ PACKAGE_MANAGER_RES_EVENT_PATH_STATE_NONE;
+ bool r = false;
+
+ if (foreach_context == NULL) {
+ package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
+ __FUNCTION__, NULL);
+ return -1;
+ }
+
+ if (state == PM_RES_EVENT_PATH_STATE_NONE) {
+ path_state = PACKAGE_MANAGER_RES_EVENT_PATH_STATE_NONE;
+ } else if (state == PM_RES_EVENT_PATH_STATE_OK) {
+ path_state = PACKAGE_MANAGER_RES_EVENT_PATH_STATE_OK;
+ } else if (state == PM_RES_EVENT_PATH_STATE_FAILED) {
+ path_state = PACKAGE_MANAGER_RES_EVENT_PATH_STATE_FAILED;
+ } else {
+ package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
+ __FUNCTION__, NULL);
+ return -1;
+ }
+
+ r = foreach_context->callback(path, path_state,
+ foreach_context->user_data);
+ if (r == false)
+ return -1;
+
+ return 0;
+}
+
+API int package_manager_res_event_info_foreach_path(
+ package_manager_res_event_info_h handle,
+ package_manager_res_event_path_cb callback, void *user_data)
+{
+ int ret;
+ foreach_res_event_path_context_s foreach_res_event_path_context = {
+ .callback = callback,
+ .user_data = user_data,
+ };
+
+ ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return ret;
+
+ if (handle == NULL || callback == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ struct package_manager_res_event_info_s *event_info =
+ (struct package_manager_res_event_info_s *)handle;
+
+ if (event_info->res_event_info_handle == NULL)
+ return package_manager_error(
+ PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
+ __FUNCTION__, NULL);
+
+ ret = pkgmgr_res_event_info_foreach_path(
+ event_info->res_event_info_handle,
+ package_res_event_info_foreach_path_cb,
+ &foreach_res_event_path_context);
+ if (ret != PKGMGR_R_OK) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR,
+ __FUNCTION__, NULL);
+ }
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}