mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-24 13:06:14 +01:00
keyfile settings: Accept unquoted strings
It is hard for users to remember that strings have to be explicitly quoted in the keyfile. Be lenient and accept strings that lack those quotes.
This commit is contained in:
parent
5506de3b92
commit
e6574b228e
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user