extra package: skip installing duplicate packages
authorChulHo Song <ch81.song@samsung.com>
Fri, 4 Dec 2015 07:56:11 +0000 (16:56 +0900)
committerChulHo Song <ch81.song@samsung.com>
Wed, 9 Dec 2015 10:20:13 +0000 (19:20 +0900)
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 <ch81.song@samsung.com>
(cherry picked from commit 58a790efcd2d468ef01987cde3866276ffa445fd)

tizen/src/util/extra_pkgs_install.c

index 840c2912f691a06edb06316a528765e2d2acb2d8..47ba02ea5dd3a370742e76f73f26e761bd440986 100644 (file)
@@ -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;
-    charaddon_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);
 }