diff -up GConf-2.25.2/backends/markup-tree.c.less-work GConf-2.25.2/backends/markup-tree.c --- GConf-2.25.2/backends/markup-tree.c.less-work 2009-02-16 19:15:19.000000000 -0500 +++ GConf-2.25.2/backends/markup-tree.c 2009-03-03 23:14:07.741320798 -0500 @@ -2167,51 +2167,40 @@ locate_attributes (GMarkupParseContext * retval = TRUE; - i = 0; - while (attribute_names[i]) + for (i = 0; attribute_names[i]; i++) { int j; - gboolean found; - found = FALSE; - j = 0; - while (j < n_attrs) + for (j = 0; j < n_attrs; j++) { + /* already matched */ + if (attrs[j].name == NULL) + continue; + if (strcmp (attrs[j].name, attribute_names[i]) == 0) { retloc = attrs[j].retloc; + attrs[j].name = NULL; - if (*retloc != NULL) - { - set_error (error, context, - GCONF_ERROR_PARSE_ERROR, - _("Attribute \"%s\" repeated twice on the same <%s> element"), - attrs[j].name, element_name); - retval = FALSE; - goto out; - } + /* if this fails we passed the same retloc twice */ + g_assert (*retloc == NULL); *retloc = attribute_values[i]; - found = TRUE; + break; } - - ++j; } - if (!found) + if (j >= n_attrs) { set_error (error, context, GCONF_ERROR_PARSE_ERROR, - _("Attribute \"%s\" is invalid on <%s> element in this context"), + _("Attribute \"%s\" is invalid, or duplicated on <%s> element in this context"), attribute_names[i], element_name); retval = FALSE; - goto out; + break; } - - ++i; } - out: return retval; } @@ -3494,10 +3483,9 @@ all_whitespace (const char *text, while (p != end) { - if (!g_ascii_isspace (*p)) - return FALSE; - - p = g_utf8_next_char (p); + if (G_UNLIKELY (*p != ' ' && *p != '\t' && *p != '\n' && *p != '\r')) + return FALSE; + p++; } return TRUE;