GtkCssScanner *scanner,
GFile *file,
const char *data,
- gsize length,
GError **error);
GQuark
GtkCssScanner *parent,
GtkCssSection *section,
GFile *file,
- const gchar *data,
- gsize length)
+ const gchar *text)
{
GtkCssScanner *scanner;
- g_assert (data[length] == 0);
-
scanner = g_slice_new0 (GtkCssScanner);
g_object_ref (provider);
g_free (dir);
}
- scanner->parser = _gtk_css_parser_new (data,
+ scanner->parser = _gtk_css_parser_new (text,
gtk_css_scanner_parser_error,
scanner);
scanner->parser,
scanner->file);
- gtk_css_section_unref (scanner->section);
+ if (scanner->section)
+ gtk_css_section_unref (scanner->section);
scanner->section = section;
}
gtk_css_provider_load_internal (scanner->provider,
scanner,
file,
- NULL, 0,
+ NULL,
NULL);
}
gtk_css_provider_load_internal (GtkCssProvider *css_provider,
GtkCssScanner *parent,
GFile *file,
- const char *data,
- gsize length,
+ const char *text,
GError **error)
{
GtkCssScanner *scanner;
else
error_handler = 0; /* silence gcc */
- if (data == NULL)
+ if (text == NULL)
{
GError *load_error = NULL;
if (g_file_load_contents (file, NULL,
- &free_data, &length,
+ &free_data, NULL,
NULL, &load_error))
{
- data = free_data;
+ text = free_data;
}
else
{
}
}
- if (data)
+ if (text)
{
scanner = gtk_css_scanner_new (css_provider,
parent,
parent ? parent->section : NULL,
file,
- data,
- length);
+ text);
parse_stylesheet (scanner);
* gtk_css_provider_load_from_data:
* @css_provider: a #GtkCssProvider
* @data: (array length=length) (element-type guint8): CSS data loaded in memory
- * @length: the length of @data in bytes, or -1 for NUL terminated strings
+ * @length: the length of @data in bytes, or -1 for NUL terminated strings. If
+ * @length is not -1, the code will assume it is not NUL terminated and will
+ * potentially do a copy.
* @error: (out) (allow-none): return location for a #GError, or %NULL
*
* Loads @data into @css_provider, making it clear any previously loaded
gssize length,
GError **error)
{
+ char *free_data;
+ gboolean ret;
+
g_return_val_if_fail (GTK_IS_CSS_PROVIDER (css_provider), FALSE);
g_return_val_if_fail (data != NULL, FALSE);
if (length < 0)
- length = strlen (data);
+ {
+ length = strlen (data);
+ free_data = NULL;
+ }
+ else
+ {
+ free_data = g_strndup (data, length);
+ data = free_data;
+ }
gtk_css_provider_reset (css_provider);
- return gtk_css_provider_load_internal (css_provider, NULL, NULL, data, length, error);
+ ret = gtk_css_provider_load_internal (css_provider, NULL, NULL, data, error);
+
+ g_free (free_data);
+
+ return ret;
}
/**
gtk_css_provider_reset (css_provider);
- return gtk_css_provider_load_internal (css_provider, NULL, file, NULL, 0, error);
+ return gtk_css_provider_load_internal (css_provider, NULL, file, NULL, error);
}
/**