From 38624690402c3ce1171857a0b5c6e493cb118a53 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Tue, 19 Dec 2017 20:33:41 +0900 Subject: [PATCH] Pass proper error code to event callback Change-Id: I45420c5dacdde9ff9ee7d3b70a19254a709e284d Signed-off-by: Sangyoon Jang --- src/package_manager.c | 57 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/src/package_manager.c b/src/package_manager.c index c3af1a8..83b789e 100644 --- a/src/package_manager.c +++ b/src/package_manager.c @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -373,6 +374,50 @@ static int package_manager_get_event_type(const char *key, return PACKAGE_MANAGER_ERROR_NONE; } +static package_manager_error_e __convert_to_error(const char *val) +{ + int errcode = atoi(val); + + switch (errcode) { + case PKGMGR_INSTALLER_ERRCODE_UNDEFINED_ERROR: + case PKGMGR_INSTALLER_ERRCODE_GLOBALSYMLINK_ERROR: + case PKGMGR_INSTALLER_ERRCODE_GRANT_PERMISSION_ERROR: + case PKGMGR_INSTALLER_ERRCODE_IMAGE_ERROR: + case PKGMGR_INSTALLER_ERRCODE_PARSE_ERROR: + case PKGMGR_INSTALLER_ERRCODE_RECOVERY_ERROR: + case PKGMGR_INSTALLER_ERRCODE_DELTA_ERROR: + case PKGMGR_INSTALLER_ERRCODE_APP_DIR_ERROR: + case PKGMGR_INSTALLER_ERRCODE_CONFIG_ERROR: + case PKGMGR_INSTALLER_ERRCODE_ICON_ERROR: + case PKGMGR_INSTALLER_ERRCODE_MANIFEST_ERROR: + case PKGMGR_INSTALLER_ERRCODE_OUT_OF_SPACE: + case PKGMGR_INSTALLER_ERRCODE_ERROR: + return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR; + case PKGMGR_INSTALLER_ERRCODE_UNZIP_ERROR: + case PKGMGR_INSTALLER_ERRCODE_SECURITY_ERROR: + case PKGMGR_INSTALLER_ERRCODE_REGISTER_ERROR: + case PKGMGR_INSTALLER_ERRCODE_PRIVILEGE_ERROR: + case PKGMGR_INSTALLER_ERRCODE_SIGNATURE_ERROR: + case PKGMGR_INSTALLER_ERRCODE_SIGNATURE_INVALID: + case PKGMGR_INSTALLER_ERRCODE_CERT_ERROR: + case PKGMGR_INSTALLER_ERRCODE_AUTHOR_CERT_NOT_MATCH: + case PKGMGR_INSTALLER_ERRCODE_AUTHOR_CERT_NOT_FOUND: + case PKGMGR_INSTALLER_ERRCODE_ICON_NOT_FOUND: + case PKGMGR_INSTALLER_ERRCODE_MANIFEST_NOT_FOUND: + return PACKAGE_MANAGER_ERROR_IO_ERROR; + case PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND: + return PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE; + case PKGMGR_INSTALLER_ERRCODE_OPERATION_NOT_ALLOWED: + return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED; + case PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE: + return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER; + case PKGMGR_INSTALLER_ERRCODE_OK: + return PACKAGE_MANAGER_ERROR_NONE; + default: + return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR; + } +} + static int __add_event_info(request_event_info **head, int req_id, package_manager_event_type_e event_type, package_manager_event_state_e event_state) @@ -516,7 +561,7 @@ static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_t pkg_name, event_type, PACKAGE_MANAGER_EVENT_STATE_FAILED, 0, - PACKAGE_MANAGER_ERROR_NONE, + __convert_to_error(val), request->user_data); } else if (strcasecmp(key, "end") == 0) { @@ -539,7 +584,7 @@ static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_t pkg_name, event_type, PACKAGE_MANAGER_EVENT_STATE_FAILED, 0, - PACKAGE_MANAGER_ERROR_NONE, + PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, request->user_data); } } @@ -616,7 +661,7 @@ static int internal_request_callback(uid_t target_uid, int req_id, const char *p pkg_name, event_type, PACKAGE_MANAGER_EVENT_STATE_FAILED, 0, - PACKAGE_MANAGER_ERROR_NONE, + __convert_to_error(val), user_data); } } else if (strcasecmp(key, "end") == 0) { @@ -640,7 +685,7 @@ static int internal_request_callback(uid_t target_uid, int req_id, const char *p pkg_name, event_type, PACKAGE_MANAGER_EVENT_STATE_FAILED, 0, - PACKAGE_MANAGER_ERROR_NONE, + PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, user_data); } } @@ -1082,7 +1127,7 @@ static int internal_callback(uid_t target_uid, int req_id, const char *pkg_type, info->event_type, info->event_state, 0, - PACKAGE_MANAGER_ERROR_NONE, + __convert_to_error(val), manager->user_data); } else if (strcasecmp(key, "end") == 0) { if (info->event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) { @@ -1099,7 +1144,7 @@ static int internal_callback(uid_t target_uid, int req_id, const char *pkg_type, info->event_type, PACKAGE_MANAGER_EVENT_STATE_FAILED, 0, - PACKAGE_MANAGER_ERROR_NONE, + PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, manager->user_data); } } -- 2.7.4