From 43ce871fdbab3b92d2f614f178b3bf5604415b8b Mon Sep 17 00:00:00 2001 From: SeokYeon Hwang Date: Tue, 11 Jun 2013 17:46:07 +0900 Subject: [PATCH] Support sdcard attach for Multi SDK installation Change-Id: I30f60af846212855fc9d9d4b7e2ce60a159427f1 Signed-off-by: SeokYeon Hwang --- tizen/src/guest_server.c | 89 ++++++++++++++++++++++++++++++---------- 1 file changed, 68 insertions(+), 21 deletions(-) diff --git a/tizen/src/guest_server.c b/tizen/src/guest_server.c index 58809dd3a3..a8bc2e1d07 100644 --- a/tizen/src/guest_server.c +++ b/tizen/src/guest_server.c @@ -45,6 +45,7 @@ #include #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; } -- 2.34.1