+2006-12-14 Matthias Clasen <mclasen@redhat.com>
+
+ * glib/gkeyfile.c (g_key_file_add_group): If the group
+ is already there, make it current. (#385910, Joe Halliwell)
+
+ * tests/keyfile-test.c: Add a test for duplicate groups/keys.
+
2006-12-13 Matthias Clasen <mclasen@redhat.com>
* m4macros/glib-gettext.m4: Require AC_CANONICAL_HOST in
+2006-12-14 Matthias Clasen <mclasen@redhat.com>
+
+ * glib/tmpl/keyfile.sgml: Clarify the behaviour
+ wrt. to duplicate keys and groups.
+
2006-12-13 Matthias Clasen <mclasen@redhat.com>
* glib/tmpl/modules.sgml: Point out that valid symbols may be NULL.
</itemizedlist>
</para>
+<para>
+Note that in contrast to the
+<ulink url="http://freedesktop.org/Standards/desktop-entry-spec">Desktop
+Entry Specification</ulink>, groups in key files may contain the same
+key multiple times; the last entry wins. Key files may also contain
+multiple groups with the same name; they are merged together.
+</para>
+
<!-- ##### SECTION See_Also ##### -->
<para>
g_return_if_fail (key_file != NULL);
g_return_if_fail (group_name != NULL);
- if (g_key_file_lookup_group_node (key_file, group_name) != NULL)
- return;
+ group = g_key_file_lookup_group (key_file, group_name);
+ if (group != NULL)
+ {
+ key_file->current_group = group;
+ return;
+ }
group = g_new0 (GKeyFileGroup, 1);
group->name = g_strdup (group_name);
"key2=123\n";
keyfile = load_data (data, 0);
+ check_string_value (keyfile, "Desktop Entry", "key1", "123");
+ check_string_value (keyfile, "Desktop Entry", "key2", "123");
g_key_file_free (keyfile);
}
+/* http://bugzilla.gnome.org/show_bug.cgi?id=385910 */
+static void
+test_duplicate_groups2 (void)
+{
+ GKeyFile *keyfile;
+ const gchar *data =
+ "[A]\n"
+ "foo=bar\n"
+ "[B]\n"
+ "foo=baz\n"
+ "[A]\n"
+ "foo=bang\n";
+
+ keyfile = load_data (data, 0);
+ check_string_value (keyfile, "A", "foo", "bang");
+ check_string_value (keyfile, "B", "foo", "baz");
+
+ g_key_file_free (keyfile);
+}
int
main (int argc, char *argv[])
test_groups ();
test_duplicate_keys ();
test_duplicate_groups ();
+ test_duplicate_groups2 ();
return 0;
}