From f634171ec54ae45c8633013521260bf45cd6de06 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 15 Sep 2008 16:06:05 +0000 Subject: [PATCH] =?utf8?q?=20=20=20=20=20=20=20=20Bug=20551681=20=E2=80=93?= =?utf8?q?=20g=5Fcontent=5Ftype=5Fguess()=20too=20naive=20with=20filenames?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * gcontenttype.c (g_content_type_guess): Check whether there's a '/' at the end of the filename, and declare it a directory. Patch by Bastien Nocera svn path=/trunk/; revision=7491 --- gio/ChangeLog | 8 ++++++++ gio/gcontenttype.c | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gio/ChangeLog b/gio/ChangeLog index 89a7cd42..7b519e7c 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,11 @@ +2008-09-15 Matthias Clasen + + Bug 551681 – g_content_type_guess() too naive with filenames + + * gcontenttype.c (g_content_type_guess): Check whether there's a '/' + at the end of the filename, and declare it a directory. + Patch by Bastien Nocera + 2008-09-14 Cosimo Cecchi Bug 551887 – Docs for g_desktop_app_info_new_from_filename () diff --git a/gio/gcontenttype.c b/gio/gcontenttype.c index 88f25bec..7f478060 100644 --- a/gio/gcontenttype.c +++ b/gio/gcontenttype.c @@ -895,9 +895,18 @@ g_content_type_guess (const char *filename, if (filename) { - basename = g_path_get_basename (filename); - n_name_mimetypes = xdg_mime_get_mime_types_from_file_name (basename, name_mimetypes, 10); - g_free (basename); + i = strlen (filename); + if (filename[i - 1] == '/') { + char *mimetypes[] = { "inode/directory", NULL }; + name_mimetypes = g_strdupv (mimetypes); + n_name_mimetypes = 1; + if (result_uncertain) + *result_uncertain = TRUE; + } else { + basename = g_path_get_basename (filename); + n_name_mimetypes = xdg_mime_get_mime_types_from_file_name (basename, name_mimetypes, 10); + g_free (basename); + } } /* Got an extension match, and no conflicts. This is it. */ -- 2.34.1