Support sdcard attach for Multi SDK installation
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 11 Jun 2013 08:46:07 +0000 (17:46 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 11 Jun 2013 08:48:52 +0000 (17:48 +0900)
Change-Id: I30f60af846212855fc9d9d4b7e2ce60a159427f1
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
tizen/src/guest_server.c

index 58809dd..a8bc2e1 100644 (file)
@@ -45,6 +45,7 @@
 #include <arpa/inet.h>
 #endif
 
+#include "emulator.h"
 #include "guest_server.h"
 #include "mloop_event.h"
 #include "skin/maruskin_server.h"
@@ -83,37 +84,83 @@ pthread_t start_guest_server(int server_port)
 /* get_emulator_vms_sdcard_path = "/home/{USER}/tizen-sdk-data/emulator-vms/sdcard" */
 static char* get_emulator_vms_sdcard_path(void)
 {
+
+// FIXME: A draft code for multi-SDK install. It needs some cleans up.
     char *emulator_vms_sdcard_path = NULL;
+    gsize emulator_vms_sdcard_path_len = 0;
+
+    gchar const *key = "TIZEN_SDK_DATA_PATH";
+    gchar base_dir[PATH_MAX] = { '\0', };
+    gchar info_path[PATH_MAX] = { '\0', };
 
 #ifndef _WIN32
-    char emulator_vms[] = "/tizen-sdk-data/emulator-vms/sdcard/";
-    char *homedir = (char*)g_getenv("HOME");
+    gchar const *info_file = "/../../../sdk.info";
+
+    gchar const *emulator_vms = "/emulator-vms/sdcard/";
+    gchar const *legacy_data_dir = "/tizen-sdk-data/";
+#else
+    gchar const *info_file = "\\..\\..\\..\\sdk.info";
+
+    gchar const *emulator_vms = "\\emulator-vms\\sdcard\\";
+    gchar const *legacy_data_dir = "\\tizen-sdk-data";
+#endif
 
-    if (!homedir) {
-        homedir = (char*)g_get_home_dir();
+    g_strlcpy(info_path, bin_path, sizeof(info_path));
+    g_strlcat(info_path, info_file, sizeof(info_path));
+    INFO("[%s] \n", info_path);
+    FILE *file = fopen(info_path, "r");
+    char tmp[256] = { '\0', };
+    char *tmpline = NULL;
+    while (file != NULL && fgets(tmp, sizeof(tmp), file) != NULL) {
+        INFO("[%s] \n", tmp);
+        if ((tmpline = g_strstr_len(tmp, sizeof(tmp), key))) {
+            tmpline += strlen(key) + 1; // 1 for '='
+            break;
+        }
     }
 
-    emulator_vms_sdcard_path = malloc(strlen(homedir) + sizeof emulator_vms + 1);
-    assert(emulator_vms_sdcard_path != NULL);
-    strcpy(emulator_vms_sdcard_path, homedir);
-    strcat(emulator_vms_sdcard_path, emulator_vms);
-#else
-    char emulator_vms[] = "\\tizen-sdk-data\\emulator-vms\\sdcard\\";
-    HKEY hKey;
-    char strLocalAppDataPath[1024] = { 0 };
-    DWORD dwBufLen = 1024;
+    if (tmpline[strlen(tmpline) -1] == '\n') {
+        tmpline[strlen(tmpline) -1] = '\0';
+    }
+    if (tmpline[strlen(tmpline) -1] == '\r') {
+        tmpline[strlen(tmpline) -1] = '\0';
+    }
 
-    RegOpenKeyEx(HKEY_CURRENT_USER,
-        "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
-        0, KEY_QUERY_VALUE, &hKey);
+    if (tmpline) {
+        INFO("SDK info file is found.\n");
+        g_strlcpy(base_dir, tmpline, sizeof(base_dir));
+        g_strlcpy(base_dir, tmpline, sizeof(base_dir));
+    }
+    else {
+        INFO("SDK info file is not found. Use legacy data directory.\n");
+#ifndef _WIN32
+        gchar *home_dir = (char*)g_getenv("HOME");
 
-    RegQueryValueEx(hKey, "Local AppData", NULL, NULL, (LPBYTE)strLocalAppDataPath, &dwBufLen);
-    RegCloseKey(hKey);
+        if (!home_dir) {
+            home_dir = (char*)g_get_home_dir();
+        }
+#else
+        HKEY hKey;
+        gchar home_dir[1024] = { 0 };
+        DWORD dwBufLen = 1024;
 
-    emulator_vms_sdcard_path = malloc(strlen(strLocalAppDataPath) + sizeof emulator_vms + 1);
-    strcpy(emulator_vms_sdcard_path, strLocalAppDataPath);
-    strcat(emulator_vms_sdcard_path, emulator_vms);
+        RegOpenKeyEx(HKEY_CURRENT_USER,
+                "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
+                0, KEY_QUERY_VALUE, &hKey);
+
+        RegQueryValueEx(hKey, "Local AppData", NULL, NULL, (LPBYTE)home_dir, &dwBufLen);
+        RegCloseKey(hKey);
 #endif
+        g_strlcpy(base_dir, home_dir, sizeof(base_dir));
+        g_strlcat(base_dir, legacy_data_dir, sizeof(base_dir));
+
+    }
+
+    emulator_vms_sdcard_path_len = strlen(base_dir) + strlen(emulator_vms) + 1;
+    emulator_vms_sdcard_path = g_malloc0(emulator_vms_sdcard_path_len);
+    g_strlcpy(emulator_vms_sdcard_path, base_dir, emulator_vms_sdcard_path_len);
+    g_strlcat(emulator_vms_sdcard_path, emulator_vms, emulator_vms_sdcard_path_len);
+    INFO("Emulator sdcard directory is [%s].\n", emulator_vms_sdcard_path);
 
     return emulator_vms_sdcard_path;
 }