emulator: fixed segfault error.
authorKitae Kim <kt920.kim@samsung.com>
Sat, 29 Dec 2012 03:14:20 +0000 (12:14 +0900)
committerKitae Kim <kt920.kim@samsung.com>
Sat, 29 Dec 2012 03:18:51 +0000 (12:18 +0900)
When emulator-x86 is executed without any arguments on the shell,
the binary is terminated abnormally because of qemu arguments parser function.
Added just exception routine and left a log message for users.

Signed-off-by: Kitae Kim <kt920.kim@samsung.com>
tizen/src/emulator.c
vl.c

index d12e75d76297c24bdf1ca284ad117964f9446db8..014c274fc81dc8659c320aeae18f9f61322b32b5 100644 (file)
@@ -245,7 +245,7 @@ void make_shdmem(void)
     /* TODO: */
     int shmid;
     char *shared_memory;
-    
+
     shmid = shmget((key_t)SHMKEY, MAXLEN, 0666|IPC_CREAT);
     if (shmid == -1) {
         ERR("shmget failed\n");
@@ -286,7 +286,13 @@ static void parse_options(int argc, char *argv[], int *skin_argc,
                         char ***skin_argv, int *qemu_argc, char ***qemu_argv)
 {
     int i = 0;
-    int j = 0; //skin args index
+    int skin_args_index = 0;
+
+    if (argc <= 1) {
+        fprintf(stderr, "Arguments are not enough to launch Emulator. "
+                "Please try to use Emulator Manager.\n");
+        exit(1);
+    }
 
     /* classification */
     for (i = 1; i < argc; ++i) {
@@ -296,14 +302,14 @@ static void parse_options(int argc, char *argv[], int *skin_argc,
         }
     }
 
-    for (j = i; j < argc; ++j) {
-        if (strstr(argv[j], QEMU_ARGS_PREFIX)) {
-            *skin_argc = j - i - 1;
+    for (skin_args_index = i; skin_args_index < argc; ++skin_args_index) {
+        if (strstr(argv[skin_args_index], QEMU_ARGS_PREFIX)) {
+            *skin_argc = skin_args_index - i - 1;
 
-            *qemu_argc = argc - j - i + 1;
-            *qemu_argv = &(argv[j]);
+            *qemu_argc = argc - skin_args_index - i + 1;
+            *qemu_argv = &(argv[skin_args_index]);
 
-            argv[j] = argv[0];
+            argv[skin_args_index] = argv[0];
         }
     }
 }
@@ -347,7 +353,8 @@ static void get_bin_dir(char *exec_argv)
     free(data);
 }
 
-char* get_bin_path(void) {
+char *get_bin_path(void)
+{
     return bin_dir;
 }
 
@@ -504,7 +511,7 @@ static void system_info(void)
 
 #elif defined(CONFIG_LINUX)
     /* depends on building */
-    INFO("* Qemu build machine linux kernel version : (%d, %d, %d)\n",
+    INFO("* QEMU build machine linux kernel version : (%d, %d, %d)\n",
             LINUX_VERSION_CODE >> 16,
             (LINUX_VERSION_CODE >> 8) & 0xff,
             LINUX_VERSION_CODE & 0xff);
@@ -606,19 +613,17 @@ void* main_thread(void* args)
 
     int i;
 
-    fprintf(stdout, "qemu args : =========================================\n");
+    fprintf(stdout, "qemu args: =========================================\n");
     for (i = 0; i < _qemu_argc; ++i) {
         fprintf(stdout, "%s ", _qemu_argv[i]);
     }
-    fprintf(stdout, "\n");
-    fprintf(stdout, "=====================================================\n");
+    fprintf(stdout, "\nqemu args: =========================================\n");
 
-    fprintf(stdout, "skin args : =========================================\n");
+    fprintf(stdout, "skin args: =========================================\n");
     for (i = 0; i < _skin_argc; ++i) {
         fprintf(stdout, "%s ", _skin_argv[i]);
     }
-    fprintf(stdout, "\n");
-    fprintf(stdout, "=====================================================\n");
+    fprintf(stdout, "\nskin args: =========================================\n");
 
     INFO("qemu main start!\n");
     qemu_main(_qemu_argc, _qemu_argv, NULL);
@@ -632,7 +637,8 @@ void* main_thread(void* args)
 #else
 int main(int argc, char *argv[])
 {
-    parse_options(argc, argv, &_skin_argc, &_skin_argv, &_qemu_argc, &_qemu_argv);
+    parse_options(argc, argv, &_skin_argc,
+                &_skin_argv, &_qemu_argc, &_qemu_argv);
     get_bin_dir(_qemu_argv[0]);
     socket_init();
     extract_qemu_info(_qemu_argc, _qemu_argv);
@@ -654,19 +660,17 @@ int main(int argc, char *argv[])
 
     int i;
 
-    fprintf(stdout, "qemu args : =========================================\n");
+    fprintf(stdout, "qemu args: =========================================\n");
     for (i = 0; i < _qemu_argc; ++i) {
         fprintf(stdout, "%s ", _qemu_argv[i]);
     }
-    fprintf(stdout, "\n");
-    fprintf(stdout, "=====================================================\n");
+    fprintf(stdout, "\nqemu args: =========================================\n");
 
-    fprintf(stdout, "skin args : =========================================\n");
+    fprintf(stdout, "skin args: =========================================\n");
     for (i = 0; i < _skin_argc; ++i) {
         fprintf(stdout, "%s ", _skin_argv[i]);
     }
-    fprintf(stdout, "\n");
-    fprintf(stdout, "=====================================================\n");
+    fprintf(stdout, "\nskin args: =========================================\n");
 
     INFO("qemu main start!\n");
     qemu_main(_qemu_argc, _qemu_argv, NULL);
diff --git a/vl.c b/vl.c
index 50183ffc06c41585897a16932dac96ca4751130d..ccde0805c2b1650954ca2e9eaeedd48a34c7f2fa 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -2751,7 +2751,11 @@ int main(int argc, char **argv, char **envp)
                        dns1, dns2);
                 qemu_opts_set(qemu_find_opts("machine"), 0, "append",
                         tmp_cmdline);
-                fprintf(stdout, "kernel command : %s\n", tmp_cmdline);
+#if 0
+                fprintf(stdout, "kernel command: =========================================\n");
+                               fprintf(stdout, "%s\n", tmp_cmdline);
+                fprintf(stdout, "kernel command: =========================================\n");
+#endif
 #else
                 qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg);
 #endif
@@ -3522,7 +3526,9 @@ int main(int argc, char **argv, char **envp)
        gchar *tmp = tmp_cmdline;
        tmp_cmdline = g_strdup_printf("%s gles=%d yagl=%d", tmp, enable_gl, enable_yagl);
        qemu_opts_set(qemu_find_opts("machine"), 0, "append", tmp_cmdline);
-       fprintf(stdout, "kernel command : %s\n", tmp_cmdline);
+       fprintf(stdout, "kernel command: =========================================\n");
+       fprintf(stdout, "%s\n", tmp_cmdline);
+       fprintf(stdout, "kernel command: =========================================\n");
        g_free(tmp);
 
         if (enable_gl) {