about summary refs log tree commit diff
path: root/src/settings/plugins/keyfile/nms-keyfile-connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings/plugins/keyfile/nms-keyfile-connection.c')
-rw-r--r--src/settings/plugins/keyfile/nms-keyfile-connection.c74
1 files changed, 30 insertions, 44 deletions
diff --git a/src/settings/plugins/keyfile/nms-keyfile-connection.c b/src/settings/plugins/keyfile/nms-keyfile-connection.c
index bd07d263..300aa9f7 100644
--- a/src/settings/plugins/keyfile/nms-keyfile-connection.c
+++ b/src/settings/plugins/keyfile/nms-keyfile-connection.c
@@ -50,29 +50,30 @@ G_DEFINE_TYPE (NMSKeyfileConnection, nms_keyfile_connection, NM_TYPE_SETTINGS_CO
 
 /*****************************************************************************/
 
-static void
+static gboolean
 commit_changes (NMSettingsConnection *connection,
+                NMConnection *new_connection,
                 NMSettingsConnectionCommitReason commit_reason,
-                NMSettingsConnectionCommitFunc callback,
-                gpointer user_data)
+                NMConnection **out_reread_connection,
+                char **out_logmsg_change,
+                GError **error)
 {
-	char *path = NULL;
-	GError *error = NULL;
+	gs_free char *path = NULL;
 	gs_unref_object NMConnection *reread = NULL;
 	gboolean reread_same = FALSE;
 
-	if (!nms_keyfile_writer_connection (NM_CONNECTION (connection),
+	nm_assert (out_reread_connection && !*out_reread_connection);
+	nm_assert (!out_logmsg_change || !*out_logmsg_change);
+
+	if (!nms_keyfile_writer_connection (new_connection ?: NM_CONNECTION (connection),
 	                                    nm_settings_connection_get_filename (connection),
 	                                    NM_FLAGS_ALL (commit_reason,   NM_SETTINGS_CONNECTION_COMMIT_REASON_USER_ACTION
 	                                                                 | NM_SETTINGS_CONNECTION_COMMIT_REASON_ID_CHANGED),
 	                                    &path,
 	                                    &reread,
 	                                    &reread_same,
-	                                    &error)) {
-		callback (connection, error, user_data);
-		g_clear_error (&error);
-		return;
-	}
+	                                    error))
+		return FALSE;
 
 	/* Update the filename if it changed */
 	if (   path
@@ -81,52 +82,37 @@ commit_changes (NMSettingsConnection *connection,
 
 		nm_settings_connection_set_filename (connection, path);
 		if (old_path) {
-			nm_log_info (LOGD_SETTINGS, "keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT" and rename from \"%s\"",
-			             NMS_KEYFILE_CONNECTION_LOG_ARG (connection),
-			             old_path);
+			NM_SET_OUT (out_logmsg_change,
+			            g_strdup_printf ("keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT" and rename from \"%s\"",
+			                             NMS_KEYFILE_CONNECTION_LOG_ARG (connection),
+			                             old_path));
 		} else {
-			nm_log_info (LOGD_SETTINGS, "keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT" and persist connection",
-			             NMS_KEYFILE_CONNECTION_LOG_ARG (connection));
+			NM_SET_OUT (out_logmsg_change,
+			            g_strdup_printf ("keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT" and persist connection",
+			                             NMS_KEYFILE_CONNECTION_LOG_ARG (connection)));
 		}
 	} else {
-		nm_log_info (LOGD_SETTINGS, "keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT,
-		             NMS_KEYFILE_CONNECTION_LOG_ARG (connection));
-	}
-
-	if (reread && !reread_same) {
-		gs_free_error GError *local = NULL;
-
-		if (!nm_settings_connection_replace_settings (connection, reread, FALSE, "update-during-write", &local)) {
-			nm_log_warn (LOGD_SETTINGS, "keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT" after persisting connection failed: %s",
-			             NMS_KEYFILE_CONNECTION_LOG_ARG (connection), local->message);
-		} else {
-			nm_log_info (LOGD_SETTINGS, "keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT" after persisting connection",
-			             NMS_KEYFILE_CONNECTION_LOG_ARG (connection));
-		}
+		NM_SET_OUT (out_logmsg_change,
+		            g_strdup_printf ("keyfile: update "NMS_KEYFILE_CONNECTION_LOG_FMT,
+		                             NMS_KEYFILE_CONNECTION_LOG_ARG (connection)));
 	}
 
-	g_free (path);
+	if (reread && !reread_same)
+		*out_reread_connection = g_steal_pointer (&reread);
 
-	NM_SETTINGS_CONNECTION_CLASS (nms_keyfile_connection_parent_class)->commit_changes (connection,
-	                                                                                    commit_reason,
-	                                                                                    callback,
-	                                                                                    user_data);
+	return TRUE;
 }
 
-static void
-do_delete (NMSettingsConnection *connection,
-           NMSettingsConnectionDeleteFunc callback,
-           gpointer user_data)
+static gboolean
+delete (NMSettingsConnection *connection,
+        GError **error)
 {
 	const char *path;
 
 	path = nm_settings_connection_get_filename (connection);
 	if (path)
 		g_unlink (path);
-
-	NM_SETTINGS_CONNECTION_CLASS (nms_keyfile_connection_parent_class)->delete (connection,
-	                                                                            callback,
-	                                                                            user_data);
+	return TRUE;
 }
 
 /*****************************************************************************/
@@ -192,5 +178,5 @@ nms_keyfile_connection_class_init (NMSKeyfileConnectionClass *keyfile_connection
 	NMSettingsConnectionClass *settings_class = NM_SETTINGS_CONNECTION_CLASS (keyfile_connection_class);
 
 	settings_class->commit_changes = commit_changes;
-	settings_class->delete = do_delete;
+	settings_class->delete = delete;
 }