app: fix saving/loading of .xcf.gz and other compressed XCFs
Make file_utils_uri_get_ext() public and use it instead of strrchr(uri, '.'). Also add "xz" to the list of matched special cases, and some cleanup.
This commit is contained in:
@ -307,9 +307,9 @@ file_proc_find_by_extension (GSList *procs,
|
||||
GSList *p;
|
||||
const gchar *ext;
|
||||
|
||||
ext = strrchr (uri, '.');
|
||||
ext = file_utils_uri_get_ext (uri);
|
||||
|
||||
if (! ext)
|
||||
if (! (ext && *ext == '.'))
|
||||
return NULL;
|
||||
|
||||
ext++;
|
||||
@ -322,6 +322,9 @@ file_proc_find_by_extension (GSList *procs,
|
||||
if (uri_procs_only && ! proc->handles_uri)
|
||||
continue;
|
||||
|
||||
if (skip_magic && proc->magics_list)
|
||||
continue;
|
||||
|
||||
for (extensions = proc->extensions_list;
|
||||
extensions;
|
||||
extensions = g_slist_next (extensions))
|
||||
@ -329,9 +332,6 @@ file_proc_find_by_extension (GSList *procs,
|
||||
const gchar *p1 = ext;
|
||||
const gchar *p2 = extensions->data;
|
||||
|
||||
if (skip_magic && proc->magics_list)
|
||||
continue;
|
||||
|
||||
while (*p1 && *p2)
|
||||
{
|
||||
if (g_ascii_tolower (*p1) != g_ascii_tolower (*p2))
|
||||
|
@ -43,12 +43,10 @@
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
static gchar * file_utils_unescape_uri (const gchar *escaped,
|
||||
gint len,
|
||||
const gchar *illegal_escaped_characters,
|
||||
gboolean ascii_must_not_be_escaped);
|
||||
static const gchar *file_utils_get_ext_start (const gchar *uri);
|
||||
|
||||
static gchar * file_utils_unescape_uri (const gchar *escaped,
|
||||
gint len,
|
||||
const gchar *illegal_escaped_characters,
|
||||
gboolean ascii_must_not_be_escaped);
|
||||
|
||||
|
||||
gboolean
|
||||
@ -237,8 +235,8 @@ gchar *
|
||||
file_utils_uri_with_new_ext (const gchar *uri,
|
||||
const gchar *ext_uri)
|
||||
{
|
||||
const gchar *uri_ext = file_utils_get_ext_start (uri);
|
||||
const gchar *ext_uri_ext = ext_uri ? file_utils_get_ext_start (ext_uri) : NULL;
|
||||
const gchar *uri_ext = file_utils_uri_get_ext (uri);
|
||||
const gchar *ext_uri_ext = ext_uri ? file_utils_uri_get_ext (ext_uri) : NULL;
|
||||
gchar *uri_without_ext = g_strndup (uri, uri_ext - uri);
|
||||
gchar *ret = g_strconcat (uri_without_ext, ext_uri_ext, NULL);
|
||||
g_free (uri_without_ext);
|
||||
@ -247,17 +245,17 @@ file_utils_uri_with_new_ext (const gchar *uri,
|
||||
|
||||
|
||||
/**
|
||||
* file_utils_get_ext_start:
|
||||
* file_utils_uri_get_ext:
|
||||
* @uri:
|
||||
*
|
||||
* Returns the position of the extension (after the .) for an URI. If
|
||||
* Returns the position of the extension (including the .) for an URI. If
|
||||
* there is no extension the returned position is right after the
|
||||
* string, at the terminating NULL character.
|
||||
*
|
||||
* Returns:
|
||||
**/
|
||||
static const gchar *
|
||||
file_utils_get_ext_start (const gchar *uri)
|
||||
const gchar *
|
||||
file_utils_uri_get_ext (const gchar *uri)
|
||||
{
|
||||
const gchar *ext = NULL;
|
||||
int uri_len = strlen (uri);
|
||||
@ -267,6 +265,8 @@ file_utils_get_ext_start (const gchar *uri)
|
||||
search_len = uri_len - 3;
|
||||
else if (g_strrstr (uri, ".bz2"))
|
||||
search_len = uri_len - 4;
|
||||
else if (g_strrstr (uri, ".xz"))
|
||||
search_len = uri_len - 3;
|
||||
else
|
||||
search_len = uri_len;
|
||||
|
||||
|
@ -24,26 +24,27 @@
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
|
||||
|
||||
gboolean file_utils_filename_is_uri (const gchar *filename,
|
||||
GError **error);
|
||||
gchar * file_utils_filename_to_uri (Gimp *gimp,
|
||||
const gchar *filename,
|
||||
GError **error);
|
||||
gchar * file_utils_any_to_uri (Gimp *gimp,
|
||||
const gchar *filename_or_uri,
|
||||
GError **error);
|
||||
gchar * file_utils_filename_from_uri (const gchar *uri);
|
||||
gchar * file_utils_uri_with_new_ext (const gchar *uri,
|
||||
const gchar *uri_with_ext);
|
||||
gboolean file_utils_filename_is_uri (const gchar *filename,
|
||||
GError **error);
|
||||
gchar * file_utils_filename_to_uri (Gimp *gimp,
|
||||
const gchar *filename,
|
||||
GError **error);
|
||||
gchar * file_utils_any_to_uri (Gimp *gimp,
|
||||
const gchar *filename_or_uri,
|
||||
GError **error);
|
||||
gchar * file_utils_filename_from_uri (const gchar *uri);
|
||||
gchar * file_utils_uri_with_new_ext (const gchar *uri,
|
||||
const gchar *uri_with_ext);
|
||||
const gchar * file_utils_uri_get_ext (const gchar *uri);
|
||||
|
||||
gchar * file_utils_uri_to_utf8_filename (const gchar *uri);
|
||||
gchar * file_utils_uri_to_utf8_filename (const gchar *uri);
|
||||
|
||||
gchar * file_utils_uri_display_basename (const gchar *uri);
|
||||
gchar * file_utils_uri_display_name (const gchar *uri);
|
||||
gchar * file_utils_uri_display_basename (const gchar *uri);
|
||||
gchar * file_utils_uri_display_name (const gchar *uri);
|
||||
|
||||
GdkPixbuf * file_utils_load_thumbnail (const gchar *filename);
|
||||
gboolean file_utils_save_thumbnail (GimpImage *image,
|
||||
const gchar *filename);
|
||||
GdkPixbuf * file_utils_load_thumbnail (const gchar *filename);
|
||||
gboolean file_utils_save_thumbnail (GimpImage *image,
|
||||
const gchar *filename);
|
||||
|
||||
|
||||
#endif /* __FILE_UTILS_H__ */
|
||||
|
Reference in New Issue
Block a user