Fix wrong error handling 65/251765/2
authorhyunho <hhstark.kang@samsung.com>
Tue, 19 Jan 2021 06:34:52 +0000 (15:34 +0900)
committerhyunho <hhstark.kang@samsung.com>
Tue, 19 Jan 2021 09:11:36 +0000 (18:11 +0900)
Change-Id: I3541ebe9c18d00a4b7ffba14cce77f566fbf15b3
Signed-off-by: hyunho <hhstark.kang@samsung.com>
parser/widget.info
parser/widget_plugin_parser.c
parser/widget_plugin_parser_internal.h
parser/widget_plugin_parser_pkgmgr_interface.c

index 318ff7149383a64f5f36d246dc60f4a2b9791706..f229ac4a59eb025115e27ff8f8b7b6133e65a373 100644 (file)
@@ -1,2 +1,2 @@
 type="tag";name="widget-application";path="/etc/package-manager/parserlib/libwidget-application.so";vitalness="true"
-type="tag";name="component-based-application";path="/etc/package-manager/parserlib/libwidget-application.so"
+type="tag";name="component-based-application";path="/etc/package-manager/parserlib/libwidget-application.so";vitalness="true"
index 1855a6a329249b8895b9f788ff473b07365e9e36..e125f99be8f4913b66bafa07382c6e4cfed286d7 100644 (file)
@@ -405,36 +405,35 @@ static int _parse_widget_component(xmlNode *node, const char *appid,
        return 0;
 }
 
-GList *widget_plugin_parser_parse_manifest(xmlDocPtr doc)
+int widget_plugin_parser_parse_manifest(xmlDocPtr doc, GList **list)
 {
        xmlNode *root;
        xmlNode *tmp;
        xmlNode *tmp_comp;
-       GList *list = NULL;
        char *appid;
 
        if (!tag_table) {
                LOGE("parser is not initialized");
-               return NULL;
+               return WIDGET_PARSER_ERROR_INVALID_PARAMETER;
        }
 
        if (doc == NULL) {
                LOGE("invalid parameter");
-               return NULL;
+               return WIDGET_PARSER_ERROR_INVALID_PARAMETER;
        }
 
        root = xmlDocGetRootElement(doc);
        if (root == NULL) {
                LOGE("failed to get root element");
-               return NULL;
+               return WIDGET_PARSER_ERROR_INVALID_PARAMETER;
        }
 
        for (tmp = root->children; tmp; tmp = tmp->next) {
                switch (_get_tag(tmp)) {
                case TAG_WIDGET_APPLICATION:
-                       if (_parse_widget_application(tmp, &list)) {
+                       if (_parse_widget_application(tmp, list)) {
                                LOGE("parse failed");
-                               return NULL;
+                               return WIDGET_PARSER_ERROR_IO_ERROR;
                        }
                        break;
                case TAG_COMPONENT_BASED_APPLICATION:
@@ -444,12 +443,12 @@ GList *widget_plugin_parser_parse_manifest(xmlDocPtr doc)
 
                                appid = _get_attribute(tmp, "appid");
                                if (appid == NULL)
-                                       return NULL;
+                                       return WIDGET_PARSER_ERROR_IO_ERROR;
 
-                               if (_parse_widget_component(tmp_comp, appid, &list)) {
+                               if (_parse_widget_component(tmp_comp, appid, list)) {
                                        LOGE("parse failed");
                                        free(appid);
-                                       return NULL;
+                                       return WIDGET_PARSER_ERROR_IO_ERROR;
                                }
                                free(appid);
                        }
@@ -459,5 +458,8 @@ GList *widget_plugin_parser_parse_manifest(xmlDocPtr doc)
                }
        }
 
-       return list;
+       if (*list == NULL)
+               return WIDGET_PARSER_ERROR_NOT_EXIST;
+
+       return WIDGET_PARSER_ERROR_NONE;
 }
index fd31c61466fd37c7d14d38a3c4bf9fc741f2b2b8..a869e712ad559691a7d1c82250e975adca21db3d 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef __WIDGET_PLUGIN_PARSER_INTERNAL_H__
-#define __WIDGET_PLUGIN_PARSER_INTERNAL_H__
+#ifndef __WIDGET_PARSER_PLUGIN_PARSER_INTERNAL_H__
+#define __WIDGET_PARSER_PLUGIN_PARSER_INTERNAL_H__
 
 #include <stdbool.h>
 #include <sys/types.h>
 
 #ifdef LOG_TAG
 #undef LOG_TAG
-#define LOG_TAG "WIDGET_PLUGIN_PARSER"
+#define LOG_TAG "WIDGET_PARSER_PLUGIN_PARSER"
 #endif
 
+typedef enum widget_parser_error {
+       WIDGET_PARSER_ERROR_NONE = TIZEN_ERROR_NONE,
+       WIDGET_PARSER_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER,
+       WIDGET_PARSER_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY,
+       WIDGET_PARSER_ERROR_RESOURCE_BUSY = TIZEN_ERROR_RESOURCE_BUSY,
+       WIDGET_PARSER_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED,
+       WIDGET_PARSER_ERROR_CANCELED = TIZEN_ERROR_CANCELED,
+       WIDGET_PARSER_ERROR_IO_ERROR = TIZEN_ERROR_IO_ERROR,
+       WIDGET_PARSER_ERROR_TIMED_OUT = TIZEN_ERROR_TIMED_OUT,
+       WIDGET_PARSER_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED,
+       WIDGET_PARSER_ERROR_FILE_NO_SPACE_ON_DEVICE = TIZEN_ERROR_FILE_NO_SPACE_ON_DEVICE,
+       WIDGET_PARSER_ERROR_FAULT = TIZEN_ERROR_WIDGET | 0x0001,
+       WIDGET_PARSER_ERROR_ALREADY_EXIST = TIZEN_ERROR_WIDGET | 0x0002,
+       WIDGET_PARSER_ERROR_ALREADY_STARTED = TIZEN_ERROR_WIDGET | 0x0004,
+       WIDGET_PARSER_ERROR_NOT_EXIST = TIZEN_ERROR_WIDGET | 0x0008,
+       WIDGET_PARSER_ERROR_DISABLED = TIZEN_ERROR_WIDGET | 0x0010,
+       WIDGET_PARSER_ERROR_MAX_EXCEEDED = TIZEN_ERROR_WIDGET | 0x0011,
+} widget_parser_error_e;
+
 struct support_size {
        char *preview;
        bool frame;
@@ -49,7 +68,7 @@ struct widget_class {
 
 int widget_plugin_parser_init(void);
 int widget_plugin_parser_fini(void);
-GList *widget_plugin_parser_parse_manifest(xmlDocPtr doc);
+int widget_plugin_parser_parse_manifest(xmlDocPtr doc, GList **widget_list);
 
 
 int widget_parser_db_insert_widget_class(const char *pkgid, GList *widget_list);
index b4b51e966dc0d22e0ef20dcfdd2d3e7c01f745dd..9e1b0f9b3408afa2709d9eee9323feb4ed750b07 100644 (file)
@@ -28,10 +28,15 @@ API int PKGMGR_PARSER_PLUGIN_PRE_INSTALL(const char *pkgid)
 
 API int PKGMGR_PARSER_PLUGIN_INSTALL(xmlDocPtr doc, const char *pkgid)
 {
-       GList *result;
+       GList *result = NULL;
 
-       result = widget_plugin_parser_parse_manifest(doc);
-       if (result == NULL) {
+       int ret = widget_plugin_parser_parse_manifest(doc, &result);
+       if (ret == WIDGET_PARSER_ERROR_NOT_EXIST) {
+               LOGW("not exist");
+               return 0;
+       }
+
+       if (ret != WIDGET_PARSER_ERROR_NONE) {
                LOGE("parse failed");
                return -1;
        }
@@ -58,10 +63,15 @@ API int PKGMGR_PARSER_PLUGIN_PRE_UPGRADE(const char *pkgid)
 
 API int PKGMGR_PARSER_PLUGIN_UPGRADE(xmlDocPtr doc, const char *pkgid)
 {
-       GList *result;
+       GList *result = NULL;
+
+       int ret = widget_plugin_parser_parse_manifest(doc, &result);
+       if (ret == WIDGET_PARSER_ERROR_NOT_EXIST) {
+               LOGW("not exist");
+               return 0;
+       }
 
-       result = widget_plugin_parser_parse_manifest(doc);
-       if (result == NULL) {
+       if (ret != WIDGET_PARSER_ERROR_NONE) {
                LOGE("parse failed");
                return -1;
        }