summaryrefslogtreecommitdiff
path: root/chromium/base/third_party/xdg_mime/xdgmime.c
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/third_party/xdg_mime/xdgmime.c')
-rw-r--r--chromium/base/third_party/xdg_mime/xdgmime.c42
1 files changed, 27 insertions, 15 deletions
diff --git a/chromium/base/third_party/xdg_mime/xdgmime.c b/chromium/base/third_party/xdg_mime/xdgmime.c
index f340fcefabb..d178e06b05b 100644
--- a/chromium/base/third_party/xdg_mime/xdgmime.c
+++ b/chromium/base/third_party/xdg_mime/xdgmime.c
@@ -136,7 +136,7 @@ xdg_dir_time_list_free (XdgDirTimeList *list)
}
static int
-xdg_mime_init_from_directory (const char *directory, void *user_data)
+xdg_mime_init_from_directory (const char *directory)
{
char *file_name;
struct stat st;
@@ -340,9 +340,8 @@ xdg_check_file (const char *file_path,
static int
xdg_check_dir (const char *directory,
- void *user_data)
+ int *invalid_dir_list)
{
- int *invalid_dir_list = user_data;
int invalid, exists;
char *file_name;
@@ -399,7 +398,8 @@ xdg_check_dirs (void)
for (list = dir_time_list; list; list = list->next)
list->checked = XDG_CHECKED_UNCHECKED;
- xdg_run_command_on_dirs (xdg_check_dir, &invalid_dir_list);
+ xdg_run_command_on_dirs ((XdgDirectoryFunc) xdg_check_dir,
+ &invalid_dir_list);
if (invalid_dir_list)
return TRUE;
@@ -455,7 +455,8 @@ xdg_mime_init (void)
icon_list = _xdg_mime_icon_list_new ();
generic_icon_list = _xdg_mime_icon_list_new ();
- xdg_run_command_on_dirs (xdg_mime_init_from_directory, NULL);
+ xdg_run_command_on_dirs ((XdgDirectoryFunc) xdg_mime_init_from_directory,
+ NULL);
need_reread = FALSE;
}
@@ -470,7 +471,8 @@ xdg_mime_get_mime_type_for_data (const void *data,
if (len == 0)
{
- *result_prio = 100;
+ if (result_prio != NULL)
+ *result_prio = 100;
return XDG_MIME_TYPE_EMPTY;
}
@@ -557,12 +559,12 @@ xdg_mime_get_mime_type_for_file (const char *file_name,
mime_type = _xdg_mime_magic_lookup_data (global_magic, data, bytes_read, NULL,
mime_types, n);
- fclose (file);
-
if (!mime_type)
- mime_type = _xdg_binary_or_text_fallback(data, bytes_read);
+ mime_type = _xdg_binary_or_text_fallback (data, bytes_read);
free (data);
+ fclose (file);
+
return mime_type;
}
@@ -740,19 +742,28 @@ xdg_mime_media_type_equal (const char *mime_a,
#if 1
static int
-xdg_mime_is_super_type (const char *mime)
+ends_with (const char *str,
+ const char *suffix)
{
int length;
- const char *type;
+ int suffix_length;
- length = strlen (mime);
- type = &(mime[length - 2]);
+ length = strlen (str);
+ suffix_length = strlen (suffix);
+ if (length < suffix_length)
+ return 0;
- if (strcmp (type, "/*") == 0)
+ if (strcmp (str + length - suffix_length, suffix) == 0)
return 1;
return 0;
}
+
+static int
+xdg_mime_is_super_type (const char *mime)
+{
+ return ends_with (mime, "/*");
+}
#endif
int
@@ -783,7 +794,8 @@ _xdg_mime_mime_type_subclass (const char *mime,
strncmp (umime, "text/", 5) == 0)
return 1;
- if (strcmp (ubase, "application/octet-stream") == 0)
+ if (strcmp (ubase, "application/octet-stream") == 0 &&
+ strncmp (umime, "inode/", 6) != 0)
return 1;
parents = _xdg_mime_parent_list_lookup (parent_list, umime);