Fix bug about setting debug args 70/109570/3 accepted/tizen/3.0/common/20170111.161947 accepted/tizen/3.0/ivi/20170111.090503 accepted/tizen/3.0/mobile/20170111.090309 accepted/tizen/3.0/tv/20170111.090434 accepted/tizen/3.0/wearable/20170111.090448 accepted/tizen/common/20170112.174208 accepted/tizen/ivi/20170111.222011 accepted/tizen/mobile/20170111.221851 accepted/tizen/tv/20170111.221925 accepted/tizen/wearable/20170111.221947 submit/tizen/20170111.041200 submit/tizen_3.0/20170111.022947
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 10 Jan 2017 13:14:42 +0000 (22:14 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 10 Jan 2017 22:58:58 +0000 (07:58 +0900)
Change-Id: Ia93adb77ce443948fddc5ca6b031b1f27eeca761
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/widget_instance.c

index f8aeaaa3a29eef052fc90749235c2db745f25435..bf2e8a8e85bbe1acd08a3a14716a649d321aeecc 100644 (file)
@@ -32,6 +32,7 @@
 #include <widget_service.h>
 #include <widget_service_internal.h>
 #include <app.h>
+#include <bundle_internal.h>
 #include "widget_errno.h"
 
 #define USER_UID_MIN 5000
@@ -76,6 +77,13 @@ struct widget_app {
        GList *instances;
 };
 
+struct _sdk_util {
+       char *name;
+       char **args;
+       int argc;
+       char *caller;
+};
+
 static char *wayland_display = NULL;
 static char *xdg_runtime_dir = NULL;
 
@@ -89,10 +97,7 @@ static aul_app_com_connection_h conn_status;
 static GHashTable *lifecycle_tbl;
 static int is_status_handler_connected;
 
-static char *sdk_util = NULL;
-static char *sdk_util_path = NULL;
-static char *sdk_util_arg = NULL;
-static char *sdk_caller_pid = NULL;
+static struct _sdk_util sdk_util;
 
 static char *package_id;
 
@@ -109,6 +114,7 @@ struct event_cb_s {
 };
 
 static int __fault_handler(int pid);
+static void __free_sdk_util(void);
 
 static struct _widget_instance *__pick_instance(const char *instance_id)
 {
@@ -395,7 +401,6 @@ EAPI int widget_instance_launch(const char *instance_id, char *content_info, int
        bundle *b;
        widget_instance_h instance;
 
-
        _D("launch: %s", instance_id);
 
        if (instance_id == NULL) {
@@ -439,21 +444,22 @@ EAPI int widget_instance_launch(const char *instance_id, char *content_info, int
        bundle_add_str(b, AUL_K_WAYLAND_WORKING_DIR, xdg_runtime_dir);
        bundle_add_str(b, WIDGET_K_OPERATION, "create");
 
-       if (sdk_util != NULL) {
-               bundle_add_str(b, AUL_K_ORG_CALLER_PID, sdk_caller_pid);
-               if (strcmp(sdk_util, SDK_DEBUG) == 0) {
-                       bundle_add_str(b, AUL_K_SDK, SDK_DEBUG);
-                       if (sdk_util_path)
-                               bundle_add_str(b, DLP_K_GDBSERVER_PATH, sdk_util_path);
-                       if (sdk_util_arg)
-                               bundle_add_str(b, DLP_K_DEBUG_ARG, sdk_util_arg);
-               } else if (strcmp(sdk_util, SDK_VALGRIND) == 0) {
-                       bundle_add_str(b, AUL_K_SDK, SDK_VALGRIND);
-                       if (sdk_util_path)
-                               bundle_add_str(b, DLP_K_VALGRIND_PATH, sdk_util_path);
-                       if (sdk_util_arg)
-                               bundle_add_str(b, DLP_K_VALGRIND_ARG, sdk_util_arg);
+       if (sdk_util.name) {
+               bundle_add_str(b, AUL_K_SDK, sdk_util.name);
+               if (sdk_util.caller)
+                       bundle_add_str(b, AUL_K_ORG_CALLER_PID, sdk_util.caller);
+               if (strcmp(sdk_util.name, SDK_DEBUG) == 0) {
+                       if (sdk_util.args) {
+                               bundle_add_str_array(b, DLP_K_DEBUG_ARG,
+                                               (const char **)sdk_util.args, sdk_util.argc);
+                       }
+               } else if (strcmp(sdk_util.name, SDK_VALGRIND) == 0) {
+                       if (sdk_util.args) {
+                               bundle_add_str_array(b, DLP_K_VALGRIND_ARG,
+                                               (const char **)sdk_util.args, sdk_util.argc);
+                       }
                }
+               __free_sdk_util();
        }
 
        if (content_info) {
@@ -1172,57 +1178,109 @@ EAPI int widget_instance_unlisten_status(const char *widget_id)
        return 0;
 }
 
-EAPI int widget_service_set_sdk_util(bundle *data)
+static void __free_sdk_util(void)
 {
-       char *util = NULL;
-       char *util_path = NULL;
-       char *util_arg = NULL;
-       char *caller_pid = NULL;
+       int i;
 
-       if (sdk_util) {
-               free(sdk_util);
-               sdk_util = NULL;
+       if (sdk_util.caller) {
+               free(sdk_util.caller);
+               sdk_util.caller = NULL;
        }
 
-       if (sdk_util_path) {
-               free(sdk_util_path);
-               sdk_util_path = NULL;
+       if (sdk_util.args) {
+               for (i = 0; i < sdk_util.argc; i++) {
+                       if (sdk_util.args[i])
+                               free(sdk_util.args[i]);
+               }
+               free(sdk_util.args);
+               sdk_util.args = NULL;
+               sdk_util.argc = 0;
        }
 
-       if (sdk_util_arg) {
-               free(sdk_util_arg);
-               sdk_util_arg = NULL;
+       if (sdk_util.name) {
+               free(sdk_util.name);
+               sdk_util.name = NULL;
        }
+}
 
-       if (sdk_caller_pid) {
-               free(sdk_caller_pid);
-               sdk_caller_pid = NULL;
-       }
+EAPI int widget_service_set_sdk_util(bundle *data)
+{
+       const char *caller_pid;
+       const char *util;
+       const char *util_arg = NULL;
+       const char **util_arg_array = NULL;
+       int len = 0;
+       int ret;
+       int i;
 
-       bundle_get_str(data, AUL_K_SDK, &util);
-       bundle_get_str(data, AUL_K_ORG_CALLER_PID, &caller_pid);
+       __free_sdk_util();
+
+       caller_pid = bundle_get_val(data, AUL_K_ORG_CALLER_PID);
        if (caller_pid == NULL)
-               bundle_get_str(data, AUL_K_CALLER_PID, &caller_pid);
+               caller_pid = bundle_get_val(data, AUL_K_CALLER_PID);
 
-       if (util) {
-               sdk_util = strdup(util);
+       util = bundle_get_val(data, AUL_K_SDK);
+       if (util == NULL)
+               return -1;
 
-               if (strcmp(util, SDK_DEBUG) == 0) {
-                       bundle_get_str(data, DLP_K_GDBSERVER_PATH, &util_path);
-                       bundle_get_str(data, DLP_K_DEBUG_ARG, &util_arg);
-               } else if (strcmp(util, SDK_VALGRIND) == 0) {
-                       bundle_get_str(data, DLP_K_VALGRIND_PATH, &util_path);
-                       bundle_get_str(data, DLP_K_VALGRIND_ARG, &util_arg);
+       sdk_util.name = strdup(util);
+       if (sdk_util.name == NULL) {
+               _E("out of memory");
+               return -1;
+       }
+
+       if (strcmp(util, SDK_DEBUG) == 0) {
+               ret = bundle_get_type(data, DLP_K_DEBUG_ARG);
+               if (ret == BUNDLE_TYPE_STR_ARRAY) {
+                       util_arg_array = bundle_get_str_array(data,
+                                       DLP_K_DEBUG_ARG, &len);
+               } else if (ret == BUNDLE_TYPE_STR) {
+                       util_arg = bundle_get_val(data, DLP_K_DEBUG_ARG);
+                       if (util_arg) {
+                               util_arg_array = &util_arg;
+                               len = 1;
+                       }
+               }
+       } else if (strcmp(util, SDK_VALGRIND) == 0) {
+               ret = bundle_get_type(data, DLP_K_VALGRIND_ARG);
+               if (ret == BUNDLE_TYPE_STR_ARRAY) {
+                       util_arg_array = bundle_get_str_array(data,
+                                       DLP_K_VALGRIND_ARG, &len);
+               } else if (ret == BUNDLE_TYPE_STR) {
+                       util_arg = bundle_get_val(data, DLP_K_VALGRIND_ARG);
+                       if (util_arg) {
+                               util_arg_array = &util_arg;
+                               len = 1;
+                       }
                }
+       }
 
-               if (util_path)
-                       sdk_util_path = strdup(util_path);
+       if (util_arg_array) {
+               sdk_util.argc = len;
+               sdk_util.args = calloc(len + 1, sizeof(char *));
+               if (sdk_util.args == NULL) {
+                       _E("out of memory");
+                       __free_sdk_util();
+                       return -1;
+               }
 
-               if (util_arg)
-                       sdk_util_arg = strdup(util_arg);
+               for (i = 0; i < len; i++) {
+                       sdk_util.args[i] = strdup(util_arg_array[i]);
+                       if (sdk_util.args[i] == NULL) {
+                               _E("out of memory");
+                               __free_sdk_util();
+                               return -1;
+                       }
+               }
+       }
 
-               if (caller_pid)
-                       sdk_caller_pid = strdup(caller_pid);
+       if (caller_pid) {
+               sdk_util.caller = strdup(caller_pid);
+               if (sdk_util.caller == NULL) {
+                       _E("out of memory");
+                       __free_sdk_util();
+                       return -1;
+               }
        }
 
        return 0;