/** * anjuta_plugin_description_new_from_string: * @data: The data to parse. The format of the data is .ini style. * * Parses the given plugin description data (usally read from the plugin * description file and creates an instance of #AnjutaPluginDescription. * The format of the content string is similar to .ini format. * * Return value: a new #AnjutaPluginDescription object */ AnjutaPluginDescription * anjuta_plugin_description_new_from_string (char *data, GError **error) { AnjutaPluginDescriptionParser parser; parser.df = g_new0 (AnjutaPluginDescription, 1); parser.current_section = -1; parser.n_allocated_lines = 0; parser.n_allocated_sections = 0; parser.line_nr = 1; parser.line = data; /* Put any initial comments in a NULL segment */ open_section (&parser, NULL); while (parser.line != NULL && strlen(parser.line)) { if (*parser.line == '[') { if (!parse_section_start (&parser, error)) return NULL; } else if (is_blank_line (&parser) || *parser.line == '#') parse_comment_or_blank (&parser); else { if (!parse_key_value (&parser, error)) return NULL; } } return parser.df; }
/** * gnome_theme_file_new_from_string: * @data: the string used to create a #GnomeThemeFile. * @error: location to store the error occuring, or NULL to ignore errors * * Creates a #GnomeThemeFile from the data string passed. * * Returns: a #GnomeThemeFile. * * Since: 2.2 **/ GnomeThemeFile * gnome_theme_file_new_from_string (char *data, GError **error) { GnomeThemeFileParser parser; parser.df = g_new0 (GnomeThemeFile, 1); parser.current_section = -1; parser.n_allocated_lines = 0; parser.n_allocated_sections = 0; parser.line_nr = 1; parser.line = data; /* Put any initial comments in a NULL segment */ open_section (&parser, NULL); while (parser.line && *parser.line) { if (*parser.line == '[') { if (!parse_section_start (&parser, error)) return NULL; } else if (is_blank_line (&parser) || *parser.line == '#') parse_comment_or_blank (&parser); else { if (!parse_key_value (&parser, error)) return NULL; } } return parser.df; }
BusDesktopFile* bus_desktop_file_load (DBusString *filename, DBusError *error) { DBusString str; BusDesktopFileParser parser; DBusStat sb; _DBUS_ASSERT_ERROR_IS_CLEAR (error); /* Clearly there's a race here, but it's just to make it unlikely * that we do something silly, we still handle doing it below. */ if (!_dbus_stat (filename, &sb, error)) return NULL; if (sb.size > _DBUS_ONE_KILOBYTE * 128) { dbus_set_error (error, DBUS_ERROR_FAILED, "Desktop file size (%ld bytes) is too large", (long) sb.size); return NULL; } if (!_dbus_string_init (&str)) return NULL; if (!_dbus_file_get_contents (&str, filename, error)) { _dbus_string_free (&str); return NULL; } if (!_dbus_string_validate_utf8 (&str, 0, _dbus_string_get_length (&str))) { _dbus_string_free (&str); dbus_set_error (error, DBUS_ERROR_FAILED, "invalid UTF-8"); return NULL; } parser.desktop_file = dbus_new0 (BusDesktopFile, 1); if (parser.desktop_file == NULL) { _dbus_string_free (&str); BUS_SET_OOM (error); return NULL; } parser.data = str; parser.line_num = 1; parser.pos = 0; parser.len = _dbus_string_get_length (&parser.data); parser.current_section = -1; while (parser.pos < parser.len) { if (_dbus_string_get_byte (&parser.data, parser.pos) == '[') { if (!parse_section_start (&parser, error)) { return NULL; } } else if (is_blank_line (&parser) || _dbus_string_get_byte (&parser.data, parser.pos) == '#') parse_comment_or_blank (&parser); else { if (!parse_key_value (&parser, error)) { return NULL; } } } _dbus_string_free (&parser.data); return parser.desktop_file; }