If the group is already there, make it current. (#385910, Joe Halliwell)

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.
This commit is contained in:
Matthias Clasen 2006-12-14 23:19:28 +00:00 committed by Matthias Clasen
parent b6aad8a6f0
commit 966872d789
5 changed files with 48 additions and 2 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -1,3 +1,8 @@
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.

View File

@ -92,6 +92,14 @@ Key and Group names are case-sensitive, for example a group called
</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>

View File

@ -2887,8 +2887,12 @@ g_key_file_add_group (GKeyFile *key_file,
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);

View File

@ -1001,10 +1001,31 @@ test_duplicate_groups (void)
"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[])
@ -1023,6 +1044,7 @@ main (int argc, char *argv[])
test_groups ();
test_duplicate_keys ();
test_duplicate_groups ();
test_duplicate_groups2 ();
return 0;
}