diff options
author | Hwankyu Jhun <h.jhun@samsung.com> | 2016-12-02 14:02:04 +0900 |
---|---|---|
committer | Hwankyu Jhun <h.jhun@samsung.com> | 2016-12-02 14:02:04 +0900 |
commit | f328e4d82111555c4b00a90a8b9ed60b5ed607fa (patch) | |
tree | cbc7cbb5f3bcfe6bde9407b8f7e73709da1c1d0c | |
parent | c6dfe10089afcc9962c72efd8ae01f5fa2a369f6 (diff) | |
download | launchpad-f328e4d82111555c4b00a90a8b9ed60b5ed607fa.tar.gz launchpad-f328e4d82111555c4b00a90a8b9ed60b5ed607fa.tar.bz2 launchpad-f328e4d82111555c4b00a90a8b9ed60b5ed607fa.zip |
Support unit test toolsubmit/tizen_3.0/20161205.131352submit/tizen_3.0/20161205.053058accepted/tizen/3.0/wearable/20161206.000527accepted/tizen/3.0/tv/20161206.000513accepted/tizen/3.0/mobile/20161206.000439accepted/tizen/3.0/ivi/20161206.000538accepted/tizen/3.0/common/20161206.125855
- Add extra data on debugger option
Change-Id: I511302dea6a999e8154a84ee73affe3c1c0b2269
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
-rw-r--r-- | inc/debugger_info.h | 1 | ||||
-rw-r--r-- | inc/launchpad_debug.h | 1 | ||||
-rw-r--r-- | packaging/default.debugger.in | 6 | ||||
-rw-r--r-- | src/debugger_info.c | 32 | ||||
-rwxr-xr-x | src/launchpad.c | 17 | ||||
-rw-r--r-- | src/launchpad_debug.c | 96 |
6 files changed, 137 insertions, 16 deletions
diff --git a/inc/debugger_info.h b/inc/debugger_info.h index 7f61846..22bd253 100644 --- a/inc/debugger_info.h +++ b/inc/debugger_info.h @@ -29,5 +29,6 @@ GList *_debugger_info_get_extra_key_list(debugger_info_h info); GList *_debugger_info_get_extra_env_list(debugger_info_h info); GList *_debugger_info_get_unlink_list(debugger_info_h info); const char *_debugger_info_get_attach(debugger_info_h info); +GList *_debugger_info_get_last_extra_key_list(debugger_info_h info); #endif /* __DEBUGGER_INFO_H__ */ diff --git a/inc/launchpad_debug.h b/inc/launchpad_debug.h index 8bdb6ef..a866270 100644 --- a/inc/launchpad_debug.h +++ b/inc/launchpad_debug.h @@ -20,6 +20,7 @@ #include <stdbool.h> #include <bundle.h> +int _debug_create_extra_argv(int *arg, char ***argv); int _debug_create_argv(int *argc, char ***argv, bool *attach); void _debug_destroy_argv(int argc, char **argv); int _debug_get_caller_pid(bundle *kb); diff --git a/packaging/default.debugger.in b/packaging/default.debugger.in index ee2e717..7b8428d 100644 --- a/packaging/default.debugger.in +++ b/packaging/default.debugger.in @@ -18,3 +18,9 @@ EXE /opt/usr/home/owner/share/tmp/sdk_tools/gdbserver/gdbserver APP_TYPE capp|c++app EXTRA_KEY __DLP_ATTACH_ARG__ ATTACH true + +[DEBUGGER] +NAME UNIT_TEST +APP_TYPE capp|c++app +LAST_EXTRA_KEY __DLP_UNIT_TEST_ARG__ + diff --git a/src/debugger_info.c b/src/debugger_info.c index 4af4a2d..8e7d446 100644 --- a/src/debugger_info.c +++ b/src/debugger_info.c @@ -25,14 +25,15 @@ #include "launchpad_common.h" #include "debugger_info.h" -#define TAG_DEBUGGER "[DEBUGGER]" -#define TAG_NAME "NAME" -#define TAG_EXE "EXE" -#define TAG_APP_TYPE "APP_TYPE" -#define TAG_EXTRA_KEY "EXTRA_KEY" -#define TAG_EXTRA_ENV "EXTRA_ENV" -#define TAG_UNLINK "UNLINK" -#define TAG_ATTACH "ATTACH" +#define TAG_DEBUGGER "[DEBUGGER]" +#define TAG_NAME "NAME" +#define TAG_EXE "EXE" +#define TAG_APP_TYPE "APP_TYPE" +#define TAG_EXTRA_KEY "EXTRA_KEY" +#define TAG_EXTRA_ENV "EXTRA_ENV" +#define TAG_UNLINK "UNLINK" +#define TAG_ATTACH "ATTACH" +#define TAG_LAST_EXTRA_KEY "LAST_EXTRA_KEY" struct debugger_info_s { char *name; @@ -42,6 +43,7 @@ struct debugger_info_s { GList *extra_env_list; GList *unlink_list; char *attach; + GList *last_extra_key_list; }; static struct debugger_info_s *__create_debugger_info(void) @@ -64,6 +66,8 @@ static void __destroy_debugger_info(gpointer data) if (info == NULL) return; + if (info->last_extra_key_list) + g_list_free_full(info->last_extra_key_list, free); if (info->attach) free(info->attach); if (info->unlink_list) @@ -175,6 +179,10 @@ static GList *__parse_file(GList *list, const char *path) info = NULL; break; } + } else if (strcasecmp(TAG_LAST_EXTRA_KEY, tok1) == 0) { + info->last_extra_key_list = g_list_append( + info->last_extra_key_list, + strdup(tok2)); } } fclose(fp); @@ -293,3 +301,11 @@ const char *_debugger_info_get_attach(debugger_info_h info) return info->attach; } + +GList *_debugger_info_get_last_extra_key_list(debugger_info_h info) +{ + if (info == NULL) + return NULL; + + return info->last_extra_key_list; +} diff --git a/src/launchpad.c b/src/launchpad.c index 4cf0919..a1d4618 100755 --- a/src/launchpad.c +++ b/src/launchpad.c @@ -590,6 +590,7 @@ static int __create_app_argv(int *argc, char ***argv, const char *app_path, struct app_arg debug_arg = {0,}; struct app_arg launcher_arg = {0,}; struct app_arg arg = {0,}; + struct app_arg debug_extra_arg = {0,}; int ret; int i; int c; @@ -606,10 +607,19 @@ static int __create_app_argv(int *argc, char ***argv, const char *app_path, return 0; } + ret = _debug_create_extra_argv(&debug_extra_arg.argc, + &debug_extra_arg.argv); + if (ret < 0) { + _E("Failed to create debugger extra argv"); + _debug_destroy_argv(debug_arg.argc, debug_arg.argv); + return -1; + } + ret = __create_launcher_argv(&launcher_arg.argc, &launcher_arg.argv, app_type); if (ret < 0) { _E("Failed to create launcher argv"); + _debug_destroy_argv(debug_extra_arg.argc, debug_extra_arg.argv); _debug_destroy_argv(debug_arg.argc, debug_arg.argv); return -1; } @@ -618,12 +628,14 @@ static int __create_app_argv(int *argc, char ***argv, const char *app_path, if (arg.argc <= 0) { _E("Failed to export bundle"); __destroy_launcher_argv(launcher_arg.argc, launcher_arg.argv); + _debug_destroy_argv(debug_extra_arg.argc, debug_extra_arg.argv); _debug_destroy_argv(debug_arg.argc, debug_arg.argv); return -1; } arg.argv[LOADER_ARG_PATH] = strdup(app_path); - new_argc = debug_arg.argc + launcher_arg.argc + arg.argc; + new_argc = debug_arg.argc + launcher_arg.argc + arg.argc + + debug_extra_arg.argc; if (new_argc == arg.argc) { *argc = arg.argc; *argv = arg.argv; @@ -636,6 +648,7 @@ static int __create_app_argv(int *argc, char ***argv, const char *app_path, free(arg.argv[LOADER_ARG_PATH]); bundle_free_exported_argv(arg.argc, &arg.argv); __destroy_launcher_argv(launcher_arg.argc, launcher_arg.argv); + _debug_destroy_argv(debug_extra_arg.argc, debug_extra_arg.argv); _debug_destroy_argv(debug_arg.argc, debug_arg.argv); return -1; } @@ -647,6 +660,8 @@ static int __create_app_argv(int *argc, char ***argv, const char *app_path, new_argv[c++] = launcher_arg.argv[i]; for (i = 0; i < arg.argc; i++) new_argv[c++] = arg.argv[i]; + for (i = 0; i < debug_extra_arg.argc; i++) + new_argv[c++] = debug_extra_arg.argv[i]; *argc = new_argc; *argv = new_argv; diff --git a/src/launchpad_debug.c b/src/launchpad_debug.c index 0065f1f..4ead375 100644 --- a/src/launchpad_debug.c +++ b/src/launchpad_debug.c @@ -34,14 +34,58 @@ static int debug_initialized; static GList *debugger_info_list; static debugger_info_h debugger_info; +static GList *debug_argv_list; static GList *extra_argv_list; +int _debug_create_extra_argv(int *argc, char ***argv) +{ + int new_argc; + char **new_argv; + const char *extra_argv; + GList *iter; + int i; + + if (argc == NULL || argv == NULL) { + _E("[DEBUG] Invalid parameter"); + return -1; + } + + if (debugger_info == NULL) + return 0; + + new_argc = g_list_length(extra_argv_list); + if (new_argc == 0) + return 0; + + new_argv = (char **)calloc(new_argc, sizeof(char *)); + if (new_argv == NULL) { + _E("out of memory"); + return -1; + } + + i = LOADER_ARG_PATH; + iter = g_list_first(extra_argv_list); + while (iter) { + extra_argv = (const char *)iter->data; + if (extra_argv) + new_argv[i++] = strdup(extra_argv); + + iter = g_list_next(iter); + } + + *argc = new_argc; + *argv = new_argv; + _D("[DEBUG] argc: %d, i: %d", argc, i); + + return 0; +} + int _debug_create_argv(int *argc, char ***argv, bool *attach) { int new_argc; char **new_argv; const char *exe; - const char *extra_argv; + const char *debug_argv; const char *attach_str; GList *iter; int i; @@ -56,13 +100,13 @@ int _debug_create_argv(int *argc, char ***argv, bool *attach) exe = _debugger_info_get_exe(debugger_info); if (exe == NULL) - return -1; + return 0; attach_str = _debugger_info_get_attach(debugger_info); if (attach_str && strcasecmp(attach_str, "true") == 0) *attach = true; - new_argc = g_list_length(extra_argv_list) + 1; + new_argc = g_list_length(debug_argv_list) + 1; new_argv = (char **)calloc(new_argc, sizeof(char *)); if (new_argv == NULL) { _E("out of memory"); @@ -72,11 +116,11 @@ int _debug_create_argv(int *argc, char ***argv, bool *attach) i = LOADER_ARG_PATH; new_argv[i++] = strdup(exe); - iter = g_list_first(extra_argv_list); + iter = g_list_first(debug_argv_list); while (iter) { - extra_argv = (const char *)iter->data; - if (extra_argv) - new_argv[i++] = strdup(extra_argv); + debug_argv = (const char *)iter->data; + if (debug_argv) + new_argv[i++] = strdup(debug_argv); iter = g_list_next(iter); } @@ -198,6 +242,41 @@ static void __add_extra_argv(gpointer data, gpointer user_data) bundle_del(kb, key); } +static void __add_debug_argv(gpointer data, gpointer user_data) +{ + const char *key = (const char *)data; + bundle *kb = (bundle *)user_data; + const char *str; + const char **str_arr = NULL; + int len = 0; + int i; + + if (key == NULL || kb == NULL) + return; + + _D("[DEBUG] key: %s", key); + if (bundle_get_type(kb, key) & BUNDLE_TYPE_ARRAY) { + str_arr = bundle_get_str_array(kb, key, &len); + } else { + str = bundle_get_val(kb, key); + if (str) { + str_arr = &str; + len = 1; + } + } + + for (i = 0; i < len; i++) { + if (str_arr[i] == NULL) + break; + + debug_argv_list = g_list_append(debug_argv_list, + strdup(str_arr[i])); + } + + if (str_arr) + bundle_del(kb, key); +} + static void __set_debug_env(gpointer data, gpointer user_data) { const char *key = (const char *)data; @@ -282,6 +361,9 @@ void _debug_prepare_debugger(bundle *kb) g_list_foreach(list, __set_debug_env, kb); list = _debugger_info_get_extra_key_list(debugger_info); + g_list_foreach(list, __add_debug_argv, kb); + + list = _debugger_info_get_last_extra_key_list(debugger_info); g_list_foreach(list, __add_extra_argv, kb); } |