}
}
+#ifdef CONFIG_WIN32
+static char *strcasestr(const char *haystack, const char *needle)
+{
+ size_t length_needle;
+ size_t length_haystack;
+ size_t i;
+
+ if (!haystack || !needle)
+ return NULL;
+
+ length_needle = strnlen(needle, MAX_PKG_LIST);
+ length_haystack = strnlen(haystack, MAX_PKG_LIST);
+
+ for (i = 0; i < length_haystack; i++)
+ {
+ size_t 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;
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;
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)) {
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);
}
}
}
closedir(main_dir);
+ free(addon_path);
+
+ LOG_INFO("pkg_list: %s\n", pkg_list);
}