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