/** * gimp_config_deserialize_stream: * @config: a #GObject that implements the #GimpConfigInterface. * @input: the #GInputStream to read configuration from. * @data: user data passed to the deserialize implementation. * @error: return location for a possible error * * Reads configuration data from @input and configures @config * accordingly. Basically this function creates a properly configured * #GScanner for you and calls the deserialize function of the * @config's #GimpConfigInterface. * * Return value: %TRUE if deserialization succeeded, %FALSE otherwise. * * Since: 2.10 **/ gboolean gimp_config_deserialize_stream (GimpConfig *config, GInputStream *input, gpointer data, GError **error) { GScanner *scanner; gboolean success; g_return_val_if_fail (GIMP_IS_CONFIG (config), FALSE); g_return_val_if_fail (G_IS_INPUT_STREAM (input), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); scanner = gimp_scanner_new_stream (input, error); if (! scanner) return FALSE; g_object_freeze_notify (G_OBJECT (config)); success = GIMP_CONFIG_GET_INTERFACE (config)->deserialize (config, scanner, 0, data); g_object_thaw_notify (G_OBJECT (config)); gimp_scanner_destroy (scanner); if (! success) g_assert (error == NULL || *error != NULL); return success; }
/** * gimp_scanner_new_gfile: * @file: a #GFile * @error: return location for #GError, or %NULL * * Return value: The new #GScanner. * * Since: 2.10 **/ GScanner * gimp_scanner_new_gfile (GFile *file, GError **error) { GScanner *scanner; gchar *path; g_return_val_if_fail (G_IS_FILE (file), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); path = g_file_get_path (file); if (path) { GMappedFile *mapped; mapped = g_mapped_file_new (path, FALSE, error); g_free (path); if (! mapped) { if (error) { (*error)->domain = GIMP_CONFIG_ERROR; (*error)->code = ((*error)->code == G_FILE_ERROR_NOENT ? GIMP_CONFIG_ERROR_OPEN_ENOENT : GIMP_CONFIG_ERROR_OPEN); } return NULL; } /* gimp_scanner_new() takes a "name" for the scanner, not a filename */ scanner = gimp_scanner_new (gimp_file_get_utf8_name (file), mapped, NULL, error); g_scanner_input_text (scanner, g_mapped_file_get_contents (mapped), g_mapped_file_get_length (mapped)); } else { GInputStream *input; input = G_INPUT_STREAM (g_file_read (file, NULL, error)); if (! input) { if (error) { (*error)->domain = GIMP_CONFIG_ERROR; (*error)->code = ((*error)->code == G_IO_ERROR_NOT_FOUND ? GIMP_CONFIG_ERROR_OPEN_ENOENT : GIMP_CONFIG_ERROR_OPEN); } return NULL; } g_object_set_data (G_OBJECT (input), "gimp-data", file); scanner = gimp_scanner_new_stream (input, error); g_object_unref (input); } return scanner; }