Merge branch 'keyfile-backend-strings' into 'master'

keyfile settings: Accept unquoted strings

See merge request GNOME/glib!603
This commit is contained in:
Emmanuele Bassi 2019-01-22 17:03:11 +00:00
commit 3d9727c0b8
2 changed files with 36 additions and 0 deletions

View File

@ -225,6 +225,25 @@ get_from_keyfile (GKeyfileSettingsBackend *kfsb,
if (str)
{
return_value = g_variant_parse (type, str, NULL, NULL, NULL);
if (return_value == NULL &&
g_variant_type_equal (type, G_VARIANT_TYPE_STRING) &&
str[0] != '\"')
{
GString *s = g_string_sized_new (strlen (str) + 2);
char *p = str;
g_string_append_c (s, '\"');
while (*p)
{
if (*p == '\"')
g_string_append_c (s, '\\');
g_string_append_c (s, *p);
p++;
}
g_string_append_c (s, '\"');
return_value = g_variant_parse (type, s->str, NULL, NULL, NULL);
g_string_free (s, TRUE);
}
g_free (str);
}

View File

@ -1770,6 +1770,23 @@ test_keyfile (void)
g_assert_cmpstr (str, ==, "howdy");
g_free (str);
/* Now check setting a string without quotes */
called = FALSE;
g_signal_connect (settings, "changed::greeting", G_CALLBACK (key_changed_cb), &called);
g_key_file_set_string (keyfile, "tests", "greeting", "he\"l🤗uń");
g_free (data);
data = g_key_file_to_data (keyfile, &len, NULL);
g_file_set_contents ("keyfile/gsettings.store", data, len, &error);
g_assert_no_error (error);
while (!called)
g_main_context_iteration (NULL, FALSE);
g_signal_handlers_disconnect_by_func (settings, key_changed_cb, &called);
str = g_settings_get_string (settings, "greeting");
g_assert_cmpstr (str, ==, "he\"l🤗uń");
g_free (str);
g_settings_set (settings, "farewell", "s", "cheerio");
called = FALSE;