From: ChulHo Song Date: Fri, 4 Dec 2015 07:56:11 +0000 (+0900) Subject: extra package: skip installing duplicate packages X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~22 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c9efed84dd04c709b9a01efa2c923730ee2540f6;p=sdk%2Femulator%2Fqemu.git extra package: skip installing duplicate packages Do not install same version of the packages. Newer version of the packages will be upgraded, older version of the packages will be failed to install. Change-Id: Ib5cc8b781aee56d39447b6cb46689e948b68045c Signed-off-by: ChulHo Song (cherry picked from commit 58a790efcd2d468ef01987cde3866276ffa445fd) --- diff --git a/tizen/src/util/extra_pkgs_install.c b/tizen/src/util/extra_pkgs_install.c index 840c2912f6..47ba02ea5d 100644 --- a/tizen/src/util/extra_pkgs_install.c +++ b/tizen/src/util/extra_pkgs_install.c @@ -114,6 +114,41 @@ static void send_to_emuld(char* addon, char* pkgs) } } +#ifdef CONFIG_WIN32 +static char *strcasestr(const char *haystack, const char *needle) +{ + int length_needle; + int length_haystack; + int i; + + if (!haystack || !needle) + return NULL; + + length_needle = qemu_strnlen(needle, MAX_PKG_LIST); + length_haystack = qemu_strnlen(haystack, MAX_PKG_LIST); + + for (i = 0; i < length_haystack; i++) + { + int j; + for (j = 0; j < length_needle; j++) + { + unsigned char c1; + unsigned char c2; + + c1 = haystack[i+j]; + c2 = needle[j]; + if (toupper(c1) != toupper(c2)) + goto next; + } + return (char *) haystack + i; + next: + ; + } + + return NULL; +} +#endif // CONFIG_WIN32 + void epi_init(void) { int pkg_count = 0; @@ -124,8 +159,9 @@ void epi_init(void) struct dirent *sub_dir_entry = NULL; char addon[MAX_PATH_PKG_LIST]; char pkgs[MAX_PKG_LIST]; + char pkg_list[MAX_PKG_LIST]; char *ext; - char* addon_path = get_addon_path(); + char *addon_path = get_addon_path(); if (!addon_path) { return; @@ -137,6 +173,8 @@ void epi_init(void) return; } + memset(pkg_list, 0, sizeof(pkg_list)); + while ((dir_entry = readdir(main_dir))) { if ((strncasecmp(dir_entry->d_name ,".", 1) != 0) && (strncasecmp(dir_entry->d_name ,"..", 2) != 0)) { @@ -166,10 +204,13 @@ void epi_init(void) ext = &sub_dir_entry->d_name[strlen(sub_dir_entry->d_name) - 4]; if (strcmp(EXT_RPM, ext)) - continue; + continue; + if (strcasestr(pkg_list, sub_dir_entry->d_name)) + continue; pkg_count++; add_addon_pkgs_name(pkgs, sub_dir_entry->d_name); + add_addon_pkgs_name(pkg_list, sub_dir_entry->d_name); LOG_TRACE("reading addon sub directory: %s\n", sub_dir_entry->d_name); } } @@ -189,4 +230,7 @@ void epi_init(void) } closedir(main_dir); + free(addon_path); + + LOG_INFO("pkg_list: %s\n", pkg_list); }