Added xdg_mime_intern_mime_type to avoid keeping freed strings after database is reloaded
This commit is contained in:
parent
a847d0f111
commit
ff730f13f8
@ -118,6 +118,27 @@ xdg_dir_time_list_free (XdgDirTimeList *list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
xdg_mime_intern_mime_type (const char *mime_type)
|
||||||
|
{
|
||||||
|
char *copy;
|
||||||
|
static GHashTable *hash;
|
||||||
|
|
||||||
|
if (!mime_type)
|
||||||
|
return XDG_MIME_TYPE_UNKNOWN;
|
||||||
|
|
||||||
|
if (G_UNLIKELY (!hash))
|
||||||
|
hash = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
|
||||||
|
if (!(copy = g_hash_table_lookup (hash, mime_type)))
|
||||||
|
{
|
||||||
|
copy = g_strdup (mime_type);
|
||||||
|
g_hash_table_insert (hash, copy, copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xdg_mime_init_from_directory (const char *directory)
|
xdg_mime_init_from_directory (const char *directory)
|
||||||
{
|
{
|
||||||
@ -449,12 +470,12 @@ xdg_mime_get_mime_type_for_data (const void *data,
|
|||||||
xdg_mime_init ();
|
xdg_mime_init ();
|
||||||
|
|
||||||
if (_xdg_mime_caches)
|
if (_xdg_mime_caches)
|
||||||
return _xdg_mime_cache_get_mime_type_for_data (data, len);
|
return xdg_mime_intern_mime_type (_xdg_mime_cache_get_mime_type_for_data (data, len));
|
||||||
|
|
||||||
mime_type = _xdg_mime_magic_lookup_data (global_magic, data, len, NULL, 0);
|
mime_type = _xdg_mime_magic_lookup_data (global_magic, data, len, NULL, 0);
|
||||||
|
|
||||||
if (mime_type)
|
if (mime_type)
|
||||||
return mime_type;
|
return xdg_mime_intern_mime_type (mime_type);
|
||||||
|
|
||||||
return XDG_MIME_TYPE_UNKNOWN;
|
return XDG_MIME_TYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
@ -490,7 +511,7 @@ xdg_mime_get_mime_type_for_file (const char *file_name,
|
|||||||
n = _xdg_glob_hash_lookup_file_name (global_hash, base_name, mime_types, 5);
|
n = _xdg_glob_hash_lookup_file_name (global_hash, base_name, mime_types, 5);
|
||||||
|
|
||||||
if (n == 1)
|
if (n == 1)
|
||||||
return mime_types[0];
|
return xdg_mime_intern_mime_type (mime_types[0]);
|
||||||
|
|
||||||
if (!statbuf)
|
if (!statbuf)
|
||||||
{
|
{
|
||||||
@ -533,7 +554,7 @@ xdg_mime_get_mime_type_for_file (const char *file_name,
|
|||||||
fclose (file);
|
fclose (file);
|
||||||
|
|
||||||
if (mime_type)
|
if (mime_type)
|
||||||
return mime_type;
|
return xdg_mime_intern_mime_type (mime_type);
|
||||||
|
|
||||||
return XDG_MIME_TYPE_UNKNOWN;
|
return XDG_MIME_TYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
@ -546,10 +567,10 @@ xdg_mime_get_mime_type_from_file_name (const char *file_name)
|
|||||||
xdg_mime_init ();
|
xdg_mime_init ();
|
||||||
|
|
||||||
if (_xdg_mime_caches)
|
if (_xdg_mime_caches)
|
||||||
return _xdg_mime_cache_get_mime_type_from_file_name (file_name);
|
return xdg_mime_intern_mime_type (_xdg_mime_cache_get_mime_type_from_file_name (file_name));
|
||||||
|
|
||||||
if (_xdg_glob_hash_lookup_file_name (global_hash, file_name, mime_types, 2) == 1)
|
if (_xdg_glob_hash_lookup_file_name (global_hash, file_name, mime_types, 2) == 1)
|
||||||
return mime_types[0];
|
return xdg_mime_intern_mime_type (mime_types[0]);
|
||||||
else
|
else
|
||||||
return XDG_MIME_TYPE_UNKNOWN;
|
return XDG_MIME_TYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -63,8 +63,11 @@ typedef void (*XdgMimeDestroy) (void *user_data);
|
|||||||
#define xdg_mime_remove_callback XDG_ENTRY(remove_callback)
|
#define xdg_mime_remove_callback XDG_ENTRY(remove_callback)
|
||||||
#define xdg_mime_type_unknown XDG_ENTRY(type_unknown)
|
#define xdg_mime_type_unknown XDG_ENTRY(type_unknown)
|
||||||
#define xdg_mime_dump XDG_ENTRY(dump)
|
#define xdg_mime_dump XDG_ENTRY(dump)
|
||||||
|
#define xdg_mime_intern_mime_type XDG_ENTRY(intern_mime_type)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *xdg_mime_intern_mime_type (const char *mime_type);
|
||||||
|
|
||||||
extern const char *xdg_mime_type_unknown;
|
extern const char *xdg_mime_type_unknown;
|
||||||
#define XDG_MIME_TYPE_UNKNOWN xdg_mime_type_unknown
|
#define XDG_MIME_TYPE_UNKNOWN xdg_mime_type_unknown
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user