aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fiv-io.c11
-rw-r--r--fiv.c6
2 files changed, 12 insertions, 5 deletions
diff --git a/fiv-io.c b/fiv-io.c
index 7347bd1..d224161 100644
--- a/fiv-io.c
+++ b/fiv-io.c
@@ -121,23 +121,28 @@ const char *fiv_io_supported_media_types[] = {
gchar **
fiv_io_all_supported_media_types(void)
{
+ GHashTable *unique =
+ g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
GPtrArray *types = g_ptr_array_new();
for (const char **p = fiv_io_supported_media_types; *p; p++)
- g_ptr_array_add(types, g_strdup(*p));
+ if (g_hash_table_insert(unique, g_strdup(*p), NULL))
+ g_ptr_array_add(types, g_strdup(*p));
#ifdef HAVE_GDKPIXBUF
GSList *formats = gdk_pixbuf_get_formats();
for (GSList *iter = formats; iter; iter = iter->next) {
gchar **subtypes = gdk_pixbuf_format_get_mime_types(iter->data);
for (gchar **p = subtypes; *p; p++)
- g_ptr_array_add(types, *p);
+ if (g_hash_table_insert(unique, *p, NULL))
+ g_ptr_array_add(types, g_strdup(*p));
g_free(subtypes);
}
g_slist_free(formats);
#endif // HAVE_GDKPIXBUF
+ g_hash_table_unref(unique);
g_ptr_array_add(types, NULL);
- return (char **) g_ptr_array_free(types, FALSE);
+ return (gchar **) g_ptr_array_free(types, FALSE);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/fiv.c b/fiv.c
index 0f7e277..d6beebf 100644
--- a/fiv.c
+++ b/fiv.c
@@ -2204,8 +2204,10 @@ main(int argc, char *argv[])
return 0;
}
if (show_supported_media_types) {
- for (char **types = fiv_io_all_supported_media_types(); *types; )
- g_print("%s\n", *types++);
+ char **types = fiv_io_all_supported_media_types();
+ for (char **p = types; *p; p++)
+ g_print("%s\n", *p);
+ g_strfreev(types);
return 0;
}
if (invalidate_cache) {