From b20978672f4936f220675f4837e2c09d7b791ac9 Mon Sep 17 00:00:00 2001 From: "giwoong.kim" Date: Mon, 7 Jan 2013 19:53:14 +0900 Subject: [PATCH] args: call readlink function for symbolic link call readlink function for symbolic link on linux Signed-off-by: GiWoong Kim --- tizen/src/debug_ch.c | 2 +- tizen/src/debug_ch.h | 2 +- tizen/src/emulator.c | 55 +++++++++++++++++++++++++++++--------------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/tizen/src/debug_ch.c b/tizen/src/debug_ch.c index 6d954b8821..b391114cd2 100644 --- a/tizen/src/debug_ch.c +++ b/tizen/src/debug_ch.c @@ -44,7 +44,7 @@ #include "debug_ch.h" // DEBUGCH file is located in binary directory. -char bin_dir[256] = {0,}; +char bin_dir[1024] = {0,}; static char logpath[512] = {0,}; static char debugchfile[512] = {0, }; diff --git a/tizen/src/debug_ch.h b/tizen/src/debug_ch.h index 26c824b8ac..1788592b6c 100644 --- a/tizen/src/debug_ch.h +++ b/tizen/src/debug_ch.h @@ -97,7 +97,7 @@ char *get_log_path(void); (void)0 : (void)dbg_printf */ -extern char bin_dir[256]; +extern char bin_dir[1024]; extern unsigned char _dbg_get_channel_flags( struct _debug_channel *channel ); extern int _dbg_set_channel_flags( struct _debug_channel *channel, diff --git a/tizen/src/emulator.c b/tizen/src/emulator.c index 7b5c03d2f0..445474e3aa 100644 --- a/tizen/src/emulator.c +++ b/tizen/src/emulator.c @@ -314,43 +314,60 @@ static void parse_options(int argc, char *argv[], int *skin_argc, } } -static void get_bin_dir(char *exec_argv) +static char *set_bin_dir(char *exec_argv) { - char *p = NULL; + char link_path[1024] = { 0, }; + char *file_name = NULL; -#ifdef CONFIG_WIN32 - TCHAR szEXEPath[1024] = { 0, }; - GetModuleFileName(NULL, szEXEPath, 1024); - - p = strrchr(szEXEPath, '\\'); - // TODO : null +#if defined(CONFIG_WIN32) + if (!GetModuleFileName(NULL, link_path, 1024)) { + return NULL; + } - strncpy(bin_dir, szEXEPath, strlen(szEXEPath) - strlen(p)); + file_name = strrchr(link_path, '\\'); + strncpy(bin_dir, link_path, strlen(link_path) - strlen(file_name)); strcat(bin_dir, "\\"); - return; -#endif +#elif defined(CONFIG_LINUX) + ssize_t len = readlink("/proc/self/exe", link_path, sizeof(link_path) - 1); + + if (len < 0 || len > sizeof(link_path)) { + perror("get_bin_dir error : "); + return NULL; + } + + link_path[len] = '\0'; + + file_name = strrchr(link_path, '/'); + strncpy(bin_dir, link_path, strlen(link_path) - strlen(file_name)); + + strcat(bin_dir, "/"); + +#else if (!exec_argv) { - return; + return NULL; } char *data = strdup(exec_argv); if (!data) { fprintf(stderr, "Fail to strdup for paring a binary directory.\n"); - return; + return NULL; } - p = strrchr(data, '/'); - if (!p) { + file_name = strrchr(data, '/'); + if (!file_name) { free(data); - return; + return NULL; } - strncpy(bin_dir, data, strlen(data) - strlen(p)); + strncpy(bin_dir, data, strlen(data) - strlen(file_name)); strcat(bin_dir, "/"); free(data); +#endif + + return bin_dir; } char *get_bin_path(void) @@ -592,7 +609,7 @@ void* main_thread(void* args) argv = (char**) args; parse_options(argc, argv, &_skin_argc, &_skin_argv, &_qemu_argc, &_qemu_argv); - get_bin_dir(_qemu_argv[0]); + set_bin_dir(_qemu_argv[0]); socket_init(); extract_qemu_info(_qemu_argc, _qemu_argv); @@ -639,7 +656,7 @@ int main(int argc, char *argv[]) { parse_options(argc, argv, &_skin_argc, &_skin_argv, &_qemu_argc, &_qemu_argv); - get_bin_dir(_qemu_argv[0]); + set_bin_dir(_qemu_argv[0]); socket_init(); extract_qemu_info(_qemu_argc, _qemu_argv); -- 2.34.1