args: call readlink function for symbolic link
authorgiwoong.kim <giwoong.kim@samsung.com>
Mon, 7 Jan 2013 10:53:14 +0000 (19:53 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Mon, 7 Jan 2013 10:53:14 +0000 (19:53 +0900)
call readlink function for symbolic link on linux

Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/debug_ch.c
tizen/src/debug_ch.h
tizen/src/emulator.c

index 6d954b8..b391114 100644 (file)
@@ -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, };
index 26c824b..1788592 100644 (file)
@@ -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,
index 7b5c03d..445474e 100644 (file)
@@ -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);