gkeyfilesettingsbackend: improve error checking

Coverity noticed that we are ignoring return values in a couple places
here. We should print warnings when appropriate.
This commit is contained in:
Michael Catanzaro 2020-11-23 16:43:12 -06:00 committed by Philip Withnall
parent d78778cc46
commit 00e8064137

View File

@ -105,20 +105,24 @@ compute_checksum (guint8 *digest,
g_assert (len == 32); g_assert (len == 32);
} }
static void static gboolean
g_keyfile_settings_backend_keyfile_write (GKeyfileSettingsBackend *kfsb) g_keyfile_settings_backend_keyfile_write (GKeyfileSettingsBackend *kfsb,
GError **error)
{ {
gchar *contents; gchar *contents;
gsize length; gsize length;
gboolean success;
contents = g_key_file_to_data (kfsb->keyfile, &length, NULL); contents = g_key_file_to_data (kfsb->keyfile, &length, NULL);
g_file_replace_contents (kfsb->file, contents, length, NULL, FALSE, success = g_file_replace_contents (kfsb->file, contents, length, NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION | G_FILE_CREATE_REPLACE_DESTINATION |
G_FILE_CREATE_PRIVATE, G_FILE_CREATE_PRIVATE,
NULL, NULL, NULL); NULL, NULL, error);
compute_checksum (kfsb->digest, contents, length); compute_checksum (kfsb->digest, contents, length);
g_free (contents); g_free (contents);
return success;
} }
static gboolean static gboolean
@ -359,6 +363,8 @@ g_keyfile_settings_backend_write_tree (GSettingsBackend *backend,
gpointer origin_tag) gpointer origin_tag)
{ {
WriteManyData data = { G_KEYFILE_SETTINGS_BACKEND (backend) }; WriteManyData data = { G_KEYFILE_SETTINGS_BACKEND (backend) };
gboolean success;
GError *error = NULL;
if (!data.kfsb->writable) if (!data.kfsb->writable)
return FALSE; return FALSE;
@ -369,11 +375,16 @@ g_keyfile_settings_backend_write_tree (GSettingsBackend *backend,
return FALSE; return FALSE;
g_tree_foreach (tree, g_keyfile_settings_backend_write_one, &data); g_tree_foreach (tree, g_keyfile_settings_backend_write_one, &data);
g_keyfile_settings_backend_keyfile_write (data.kfsb); success = g_keyfile_settings_backend_keyfile_write (data.kfsb, &error);
if (error)
{
g_warning ("Failed to write keyfile to %s: %s", g_file_peek_path (data.kfsb->file), error->message);
g_error_free (error);
}
g_settings_backend_changed_tree (backend, tree, origin_tag); g_settings_backend_changed_tree (backend, tree, origin_tag);
return TRUE; return success;
} }
static gboolean static gboolean
@ -384,6 +395,7 @@ g_keyfile_settings_backend_write (GSettingsBackend *backend,
{ {
GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (backend); GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (backend);
gboolean success; gboolean success;
GError *error = NULL;
if (!kfsb->writable) if (!kfsb->writable)
return FALSE; return FALSE;
@ -393,7 +405,12 @@ g_keyfile_settings_backend_write (GSettingsBackend *backend,
if (success) if (success)
{ {
g_settings_backend_changed (backend, key, origin_tag); g_settings_backend_changed (backend, key, origin_tag);
g_keyfile_settings_backend_keyfile_write (kfsb); success = g_keyfile_settings_backend_keyfile_write (kfsb, &error);
if (error)
{
g_warning ("Failed to write keyfile to %s: %s", g_file_peek_path (kfsb->file), error->message);
g_error_free (error);
}
} }
return success; return success;
@ -405,9 +422,17 @@ g_keyfile_settings_backend_reset (GSettingsBackend *backend,
gpointer origin_tag) gpointer origin_tag)
{ {
GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (backend); GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (backend);
GError *error = NULL;
if (set_to_keyfile (kfsb, key, NULL)) if (set_to_keyfile (kfsb, key, NULL))
g_keyfile_settings_backend_keyfile_write (kfsb); {
g_keyfile_settings_backend_keyfile_write (kfsb, &error);
if (error)
{
g_warning ("Failed to write keyfile to %s: %s", g_file_peek_path (kfsb->file), error->message);
g_error_free (error);
}
}
g_settings_backend_changed (backend, key, origin_tag); g_settings_backend_changed (backend, key, origin_tag);
} }
@ -689,6 +714,7 @@ static void
g_keyfile_settings_backend_constructed (GObject *object) g_keyfile_settings_backend_constructed (GObject *object)
{ {
GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (object); GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (object);
const char *path;
if (kfsb->file == NULL) if (kfsb->file == NULL)
{ {
@ -709,7 +735,9 @@ g_keyfile_settings_backend_constructed (GObject *object)
kfsb->permission = g_simple_permission_new (TRUE); kfsb->permission = g_simple_permission_new (TRUE);
kfsb->dir = g_file_get_parent (kfsb->file); kfsb->dir = g_file_get_parent (kfsb->file);
g_mkdir_with_parents (g_file_peek_path (kfsb->dir), 0700); path = g_file_peek_path (kfsb->dir);
if (g_mkdir_with_parents (path, 0700) == -1)
g_warning ("Failed to create %s: %s", path, g_strerror (errno));
kfsb->file_monitor = g_file_monitor (kfsb->file, G_FILE_MONITOR_NONE, NULL, NULL); kfsb->file_monitor = g_file_monitor (kfsb->file, G_FILE_MONITOR_NONE, NULL, NULL);
kfsb->dir_monitor = g_file_monitor (kfsb->dir, G_FILE_MONITOR_NONE, NULL, NULL); kfsb->dir_monitor = g_file_monitor (kfsb->dir, G_FILE_MONITOR_NONE, NULL, NULL);