Commit c53c701e authored by Matthias Clasen's avatar Matthias Clasen

Cleanups

parent f90eb144
......@@ -54,7 +54,7 @@
static char *
get_registry_classes_key (const char *subdir,
const wchar_t *key_name)
const wchar_t *key_name)
{
wchar_t *wc_key;
HKEY reg_key = NULL;
......@@ -67,14 +67,14 @@ get_registry_classes_key (const char *subdir,
nbytes = 0;
wc_key = g_utf8_to_utf16 (subdir, -1, NULL, NULL, NULL);
if (RegOpenKeyExW (HKEY_CLASSES_ROOT, wc_key, 0,
KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS &&
KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS &&
RegQueryValueExW (reg_key, key_name, 0,
&key_type, NULL, &nbytes) == ERROR_SUCCESS &&
&key_type, NULL, &nbytes) == ERROR_SUCCESS &&
(key_type == REG_SZ || key_type == REG_EXPAND_SZ))
{
wchar_t *wc_temp = g_new (wchar_t, (nbytes+1)/2 + 1);
RegQueryValueExW (reg_key, key_name, 0,
&key_type, (LPBYTE) wc_temp, &nbytes);
&key_type, (LPBYTE) wc_temp, &nbytes);
wc_temp[nbytes/2] = '\0';
if (key_type == REG_EXPAND_SZ)
{
......@@ -104,8 +104,8 @@ get_registry_classes_key (const char *subdir,
}
gboolean
g_content_type_equals (const char *type1,
const char *type2)
g_content_type_equals (const gchar *type1,
const gchar *type2)
{
char *progid1, *progid2;
gboolean res;
......@@ -129,8 +129,8 @@ g_content_type_equals (const char *type1,
}
gboolean
g_content_type_is_a (const char *type,
const char *supertype)
g_content_type_is_a (const gchar *type,
const gchar *supertype)
{
gboolean res;
char *value_utf8;
......@@ -151,15 +151,15 @@ g_content_type_is_a (const char *type,
}
gboolean
g_content_type_is_unknown (const char *type)
g_content_type_is_unknown (const gchar *type)
{
g_return_val_if_fail (type != NULL, FALSE);
return strcmp ("*", type) == 0;
}
char *
g_content_type_get_description (const char *type)
gchar *
g_content_type_get_description (const gchar *type)
{
char *progid;
char *description;
......@@ -173,7 +173,7 @@ g_content_type_get_description (const char *type)
g_free (progid);
if (description)
return description;
return description;
}
if (g_content_type_is_unknown (type))
......@@ -181,8 +181,8 @@ g_content_type_get_description (const char *type)
return g_strdup_printf (_("%s filetype"), type);
}
char *
g_content_type_get_mime_type (const char *type)
gchar *
g_content_type_get_mime_type (const gchar *type)
{
char *mime;
......@@ -204,7 +204,7 @@ G_LOCK_DEFINE_STATIC (_type_icons);
static GHashTable *_type_icons = NULL;
GIcon *
g_content_type_get_icon (const char *type)
g_content_type_get_icon (const gchar *type)
{
GIcon *themed_icon;
char *name = NULL;
......@@ -229,16 +229,16 @@ g_content_type_get_icon (const char *type)
key = g_strconcat (type+1, "file\\DefaultIcon", NULL);
else
{
gchar *key2 = g_strconcat (key, "\\DefaultIcon", NULL);
g_free (key);
key = key2;
}
gchar *key2 = g_strconcat (key, "\\DefaultIcon", NULL);
g_free (key);
key = key2;
}
name = get_registry_classes_key (key, NULL);
if (name && strcmp (name, "%1") == 0)
{
g_free (name);
name = NULL;
}
g_free (name);
name = NULL;
}
if (name)
g_hash_table_insert (_type_icons, g_strdup (type), g_strdup (name));
g_free (key);
......@@ -253,7 +253,7 @@ g_content_type_get_icon (const char *type)
{
/* if not found an icon fall back to gtk-builtins */
name = strcmp (type, "inode/directory") == 0 ? "gtk-directory" :
g_content_type_can_be_executable (type) ? "gtk-execute" : "gtk-file";
g_content_type_can_be_executable (type) ? "gtk-execute" : "gtk-file";
g_hash_table_insert (_type_icons, g_strdup (type), g_strdup (name));
themed_icon = g_themed_icon_new_with_default_fallbacks (name);
}
......@@ -263,7 +263,7 @@ g_content_type_get_icon (const char *type)
}
gboolean
g_content_type_can_be_executable (const char *type)
g_content_type_can_be_executable (const gchar *type)
{
g_return_val_if_fail (type != NULL, FALSE);
......@@ -296,13 +296,13 @@ looks_like_text (const guchar *data,
{
c = data[i];
if (g_ascii_iscntrl (c) && !g_ascii_isspace (c) && c != '\b')
return FALSE;
return FALSE;
}
return TRUE;
}
char *
g_content_type_from_mime_type (const char *mime_type)
gchar *
g_content_type_from_mime_type (const gchar *mime_type)
{
char *key, *content_type;
......@@ -315,11 +315,11 @@ g_content_type_from_mime_type (const char *mime_type)
return content_type;
}
char *
g_content_type_guess (const char *filename,
const guchar *data,
gsize data_size,
gboolean *result_uncertain)
gchar *
g_content_type_guess (const gchar *filename,
const guchar *data,
gsize data_size,
gboolean *result_uncertain)
{
char *basename;
char *type;
......@@ -335,7 +335,7 @@ g_content_type_guess (const char *filename,
basename = g_path_get_basename (filename);
dot = strrchr (basename, '.');
if (dot)
type = g_strdup (dot);
type = g_strdup (dot);
g_free (basename);
}
......@@ -361,22 +361,22 @@ g_content_types_get_registered (void)
index = 0;
key_len = 256;
while (RegEnumKeyExW(HKEY_CLASSES_ROOT,
index,
keyname,
&key_len,
NULL,
NULL,
NULL,
NULL) == ERROR_SUCCESS)
index,
keyname,
&key_len,
NULL,
NULL,
NULL,
NULL) == ERROR_SUCCESS)
{
key_utf8 = g_utf16_to_utf8 (keyname, -1, NULL, NULL, NULL);
if (key_utf8)
{
if (*key_utf8 == '.')
types = g_list_prepend (types, key_utf8);
else
g_free (key_utf8);
}
{
if (*key_utf8 == '.')
types = g_list_prepend (types, key_utf8);
else
g_free (key_utf8);
}
index++;
key_len = 256;
}
......@@ -384,7 +384,7 @@ g_content_types_get_registered (void)
return g_list_reverse (types);
}
char **
gchar **
g_content_type_guess_for_tree (GFile *root)
{
/* FIXME: implement */
......@@ -413,111 +413,111 @@ _g_unix_content_type_get_sniff_len (void)
return size;
}
char *
_g_unix_content_type_unalias (const char *type)
gchar *
_g_unix_content_type_unalias (const gchar *type)
{
char *res;
gchar *res;
G_LOCK (gio_xdgmime);
res = g_strdup (xdg_mime_unalias_mime_type (type));
G_UNLOCK (gio_xdgmime);
return res;
}
char **
_g_unix_content_type_get_parents (const char *type)
gchar **
_g_unix_content_type_get_parents (const gchar *type)
{
const char *umime;
char **parents;
const gchar *umime;
gchar **parents;
GPtrArray *array;
int i;
array = g_ptr_array_new ();
G_LOCK (gio_xdgmime);
umime = xdg_mime_unalias_mime_type (type);
g_ptr_array_add (array, g_strdup (umime));
parents = xdg_mime_list_mime_parents (umime);
for (i = 0; parents && parents[i] != NULL; i++)
g_ptr_array_add (array, g_strdup (parents[i]));
free (parents);
G_UNLOCK (gio_xdgmime);
g_ptr_array_add (array, NULL);
return (char **)g_ptr_array_free (array, FALSE);
return (gchar **)g_ptr_array_free (array, FALSE);
}
/**
* g_content_type_equals:
* @type1: a content type string.
* @type2: a content type string.
* @type1: a content type string
* @type2: a content type string
*
* Compares two content types for equality.
*
* Returns: %TRUE if the two strings are identical or equivalent,
* %FALSE otherwise.
**/
* %FALSE otherwise.
*/
gboolean
g_content_type_equals (const char *type1,
const char *type2)
g_content_type_equals (const gchar *type1,
const gchar *type2)
{
gboolean res;
g_return_val_if_fail (type1 != NULL, FALSE);
g_return_val_if_fail (type2 != NULL, FALSE);
G_LOCK (gio_xdgmime);
res = xdg_mime_mime_type_equal (type1, type2);
G_UNLOCK (gio_xdgmime);
return res;
}
/**
* g_content_type_is_a:
* @type: a content type string.
* @supertype: a string.
* @type: a content type string
* @supertype: a content type string
*
* Determines if @type is a subset of @supertype.
* Determines if @type is a subset of @supertype.
*
* Returns: %TRUE if @type is a kind of @supertype,
* %FALSE otherwise.
**/
* %FALSE otherwise.
*/
gboolean
g_content_type_is_a (const char *type,
const char *supertype)
g_content_type_is_a (const gchar *type,
const gchar *supertype)
{
gboolean res;
g_return_val_if_fail (type != NULL, FALSE);
g_return_val_if_fail (supertype != NULL, FALSE);
G_LOCK (gio_xdgmime);
res = xdg_mime_mime_type_subclass (type, supertype);
G_UNLOCK (gio_xdgmime);
return res;
}
/**
* g_content_type_is_unknown:
* @type: a content type string.
*
* @type: a content type string
*
* Checks if the content type is the generic "unknown" type.
* On unix this is the "application/octet-stream" mimetype,
* On UNIX this is the "application/octet-stream" mimetype,
* while on win32 it is "*".
*
*
* Returns: %TRUE if the type is the unknown type.
**/
*/
gboolean
g_content_type_is_unknown (const char *type)
g_content_type_is_unknown (const gchar *type)
{
g_return_val_if_fail (type != NULL, FALSE);
......@@ -543,65 +543,64 @@ language_level (const char *lang)
{
const char * const *lang_list;
int i;
/* The returned list is sorted from most desirable to least
desirable and always contains the default locale "C". */
lang_list = g_get_language_names ();
for (i = 0; lang_list[i]; i++)
if (strcmp (lang_list[i], lang) == 0)
return 1000-i;
return 0;
}
static void
mime_info_start_element (GMarkupParseContext *context,
const gchar *element_name,
const gchar **attribute_names,
const gchar **attribute_values,
gpointer user_data,
GError **error)
const gchar *element_name,
const gchar **attribute_names,
const gchar **attribute_values,
gpointer user_data,
GError **error)
{
int i;
const char *lang;
MimeParser *parser = user_data;
if (strcmp (element_name, "comment") == 0)
{
lang = "C";
for (i = 0; attribute_names[i]; i++)
if (strcmp (attribute_names[i], "xml:lang") == 0)
{
lang = attribute_values[i];
break;
}
if (strcmp (attribute_names[i], "xml:lang") == 0)
{
lang = attribute_values[i];
break;
}
parser->current_lang_level = language_level (lang);
parser->current_type = MIME_TAG_TYPE_COMMENT;
}
else
parser->current_type = MIME_TAG_TYPE_OTHER;
}
static void
mime_info_end_element (GMarkupParseContext *context,
const gchar *element_name,
gpointer user_data,
GError **error)
const gchar *element_name,
gpointer user_data,
GError **error)
{
MimeParser *parser = user_data;
parser->current_type = MIME_TAG_TYPE_OTHER;
}
static void
mime_info_text (GMarkupParseContext *context,
const gchar *text,
gsize text_len,
gpointer user_data,
GError **error)
const gchar *text,
gsize text_len,
gpointer user_data,
GError **error)
{
MimeParser *parser = user_data;
......@@ -615,7 +614,7 @@ mime_info_text (GMarkupParseContext *context,
}
static char *
load_comment_for_mime_helper (const char *dir,
load_comment_for_mime_helper (const char *dir,
const char *basename)
{
GMarkupParseContext *context;
......@@ -630,17 +629,17 @@ load_comment_for_mime_helper (const char *dir,
};
filename = g_build_filename (dir, "mime", basename, NULL);
res = g_file_get_contents (filename, &data, &len, NULL);
g_free (filename);
if (!res)
return NULL;
context = g_markup_parse_context_new (&parser, 0, &parse_data, NULL);
res = g_markup_parse_context_parse (context, data, len, NULL);
g_free (data);
g_markup_parse_context_free (context);
if (!res)
return NULL;
......@@ -664,39 +663,40 @@ load_comment_for_mime (const char *mimetype)
g_free (basename);
return comment;
}
dirs = g_get_system_data_dirs ();
for (i = 0; dirs[i] != NULL; i++)
{
comment = load_comment_for_mime_helper (dirs[i], basename);
if (comment)
{
g_free (basename);
return comment;
}
{
g_free (basename);
return comment;
}
}
g_free (basename);
return g_strdup_printf (_("%s type"), mimetype);
}
/**
* g_content_type_get_description:
* @type: a content type string.
*
* @type: a content type string
*
* Gets the human readable description of the content type.
*
* Returns: a short description of the content type @type.
**/
char *
g_content_type_get_description (const char *type)
*
* Returns: a short description of the content type @type. Free the
* returned string with g_free()
*/
gchar *
g_content_type_get_description (const gchar *type)
{
static GHashTable *type_comment_cache = NULL;
char *comment;
gchar *comment;
g_return_val_if_fail (type != NULL, NULL);
G_LOCK (gio_xdgmime);
type = xdg_mime_unalias_mime_type (type);
......@@ -706,16 +706,16 @@ g_content_type_get_description (const char *type)
comment = g_hash_table_lookup (type_comment_cache, type);
comment = g_strdup (comment);
G_UNLOCK (gio_xdgmime);
if (comment != NULL)
return comment;
comment = load_comment_for_mime (type);
G_LOCK (gio_xdgmime);
g_hash_table_insert (type_comment_cache,
g_strdup (type),
g_strdup (comment));
g_strdup (type),
g_strdup (comment));
G_UNLOCK (gio_xdgmime);
return comment;
......@@ -723,12 +723,13 @@ g_content_type_get_description (const char *type)
/**
* g_content_type_get_mime_type:
* @type: a content type string.
*
* Gets the mime-type for the content type. If one is registered
*
* Returns: the registered mime-type for the given @type, or NULL if unknown.
**/
* @type: a content type string
*
* Gets the mime type for the content type, if one is registered.
*
* Returns: (allow-none): the registered mime type for the given @type,
* or %NULL if unknown.
*/
char *
g_content_type_get_mime_type (const char *type)
{
......@@ -739,14 +740,15 @@ g_content_type_get_mime_type (const char *type)
/**
* g_content_type_get_icon:
* @type: a content type string.
*
* @type: a content type string
*
* Gets the icon for a content type.
*
* Returns: #GIcon corresponding to the content type.
**/
*
* Returns: #GIcon corresponding to the content type. Free the returned
* object with g_object_unref()
*/
GIcon *
g_content_type_get_icon (const char *type)
g_content_type_get_icon (const gchar *type)
{
char *mimetype_icon, *generic_mimetype_icon, *q;
char *xdg_mimetype_icon, *legacy_mimetype_icon;
......@@ -755,31 +757,31 @@ g_content_type_get_icon (const char *type)
int n = 0;
const char *p;
GIcon *themed_icon;
g_return_val_if_fail (type != NULL, NULL);
G_LOCK (gio_xdgmime);
xdg_mimetype_icon = g_strdup (xdg_mime_get_icon (type));
xdg_mimetype_generic_icon = g_strdup (xdg_mime_get_generic_icon (type));
G_UNLOCK (gio_xdgmime);
mimetype_icon = g_strdup (type);
while ((q = strchr (mimetype_icon, '/')) != NULL)
*q = '-';
p = strchr (type, '/');
if (p == NULL)
p = type + strlen (type);
/* Not all icons have migrated to the new icon theme spec, look for old names too */
legacy_mimetype_icon = g_strconcat ("gnome-mime-", mimetype_icon, NULL);
generic_mimetype_icon = g_malloc (p - type + strlen ("-x-generic") + 1);
memcpy (generic_mimetype_icon, type, p - type);
memcpy (generic_mimetype_icon + (p - type), "-x-generic", strlen ("-x-generic"));
generic_mimetype_icon[(p - type) + strlen ("-x-generic")] = 0;
if (xdg_mimetype_icon)
icon_names[n++] = xdg_mimetype_icon;
......@@ -790,30 +792,30 @@ g_content_type_get_icon (const char *type)
icon_names[n++] = xdg_mimetype_generic_icon;
icon_names[n++] = generic_mimetype_icon;
themed_icon = g_themed_icon_new_from_names (icon_names, n);
g_free (xdg_mimetype_icon);
g_free (xdg_mimetype_generic_icon);
g_free (mimetype_icon);
g_free (legacy_mimetype_icon);
g_free (generic_mimetype_icon);
return themed_icon;
}
/**
* g_content_type_can_be_executable:
* @type: a content type string.
*
* @type: a content type string
*
* Checks if a content type can be executable. Note that for instance
* things like text files can be executables (i.e. scripts and batch files).
*
*
* Returns: %TRUE if the file type corresponds to a type that
* can be executable, %FALSE otherwise.
**/
* can be executable, %FALSE otherwise.
*/
gboolean
g_content_type_can_be_executable (const char *type)
g_content_type_can_be_executable (const gchar *type)
{
g_return_val_if_fail (type != NULL, FALSE);
......@@ -829,31 +831,32 @@ looks_like_text (const guchar *data, gsize data_size)
{
gsize i;
char c;
for (i = 0; i < data_size; i++)
{
c = data[i];
if (g_ascii_iscntrl (c) &&
!g_ascii_isspace (c) &&
c != '\b')
return FALSE;
!g_ascii_isspace (c) &&
c != '\b')
return FALSE;
}
return TRUE;
}
/**
* g_content_type_from_mime_type:
* @mime_type: a mime type string.
* @mime_type: a mime type string
*
* Tries to find a content type based on the mime type name.
*
* Returns: Newly allocated string with content type or NULL when does not know.
* Returns: (allow-none): Newly allocated string with content type
* or %NULL. Free with g_free()
*
* Since: 2.18
**/
char *
g_content_type_from_mime_type (const char *mime_type)
gchar *
g_content_type_from_mime_type (const gchar *mime_type)
{
char *umime;
......@@ -869,24 +872,25 @@ g_content_type_from_mime_type (const char *mime_type)
/**
* g_content_type_guess:
* @filename: a string, or %NULL
* @data: a stream of data, or %NULL
* @filename: (allow-none): a string, or %NULL
* @data: (allow-none) (array length=data_size): a stream of data, or %NULL
* @data_size: the size of @data
* @result_uncertain: a flag indicating the certainty of the result
*
* Guesses the content type based on example data. If the function is
* @result_uncertain: (allow-none) (out): return location for the certainty
* of the result, or %NULL
*
* Guesses the content type based on example data. If the function is
* uncertain, @result_uncertain will be set to %TRUE. Either @filename
* or @data may be %NULL, in which case the guess will be based solely
* on the other argument.
*
* Returns: a string indicating a guessed content type for the
* given data.
**/
char *
g_content_type_guess (const char *filename,
const guchar *data,
gsize data_size,
gboolean *result_uncertain)
*
* Returns: a string indicating a guessed content type for the
* given data. Free with g_free()
*/
gchar *
g_content_type_guess (const gchar *filename,
const guchar *data,
gsize data_size,
gboolean *result_uncertain)
{
char *basename;