NetworkManager r4298 - in trunk: . libnm-glib libnm-util src system-settings/plugins/ifcfg-suse system-settings/plugins/keyfile



Author: dcbw
Date: Wed Nov 19 15:09:05 2008
New Revision: 4298
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=4298&view=rev

Log:
2008-11-19  Dan Williams  <dcbw redhat com>

	* libnm-util/nm-connection.c
	  libnm-util/nm-connection.h
		- (nm_connection_replace_settings): take a GError

	* libnm-glib/nm-settings.c
	  libnm-glib/nm-dbus-connection.c
	  src/nm-manager.c
	  system-settings/plugins/ifcfg-suse/nm-suse-connection.c
	  system-settings/plugins/keyfile/nm-keyfile-connection.c
	  system-settings/plugins/keyfile/plugin.c
		- Handle, or don't handle, errors from nm_connection_replace_settings()



Modified:
   trunk/ChangeLog
   trunk/libnm-glib/nm-dbus-connection.c
   trunk/libnm-glib/nm-settings.c
   trunk/libnm-util/nm-connection.c
   trunk/libnm-util/nm-connection.h
   trunk/src/nm-manager.c
   trunk/system-settings/plugins/ifcfg-suse/nm-suse-connection.c
   trunk/system-settings/plugins/keyfile/nm-keyfile-connection.c
   trunk/system-settings/plugins/keyfile/plugin.c

Modified: trunk/libnm-glib/nm-dbus-connection.c
==============================================================================
--- trunk/libnm-glib/nm-dbus-connection.c	(original)
+++ trunk/libnm-glib/nm-dbus-connection.c	Wed Nov 19 15:09:05 2008
@@ -94,12 +94,20 @@
 {
 	NMExportedConnection *exported = NM_EXPORTED_CONNECTION (user_data);
 	NMConnection *wrapped;
+	GError *error = NULL;
 
 	wrapped = nm_exported_connection_get_connection (exported);
-	if (nm_connection_replace_settings (wrapped, settings))
+	if (nm_connection_replace_settings (wrapped, settings, &error))
 		nm_exported_connection_signal_updated (exported, settings);
-	else
+	else {
+		g_warning ("%s: '%s' / '%s' invalid: %d",
+		           __func__,
+		           error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
+		           (error && error->message) ? error->message : "(none)",
+		           error ? error->code : -1);
+		g_clear_error (&error);
 		nm_exported_connection_signal_removed (exported);
+	}
 }
 
 static void

Modified: trunk/libnm-glib/nm-settings.c
==============================================================================
--- trunk/libnm-glib/nm-settings.c	(original)
+++ trunk/libnm-glib/nm-settings.c	Wed Nov 19 15:09:05 2008
@@ -524,6 +524,7 @@
 						 GError **err)
 {
 	gboolean success = TRUE;
+	GError *error = NULL;
 
 	g_return_val_if_fail (NM_IS_EXPORTED_CONNECTION (connection), FALSE);
 	g_return_val_if_fail (new_settings != NULL, FALSE);
@@ -532,8 +533,16 @@
 		success = EXPORTED_CONNECTION_CLASS (connection)->update (connection, new_settings, err);
 
 	if (success) {
-		nm_connection_replace_settings (NM_EXPORTED_CONNECTION_GET_PRIVATE (connection)->wrapped, new_settings);
-		nm_exported_connection_signal_updated (connection, new_settings);
+		if (!nm_connection_replace_settings (NM_EXPORTED_CONNECTION_GET_PRIVATE (connection)->wrapped, new_settings, &error)) {
+			g_warning ("%s: '%s' / '%s' invalid: %d",
+			           __func__,
+			           error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
+			           (error && error->message) ? error->message : "(none)",
+			           error ? error->code : -1);
+			g_clear_error (&error);
+			success = FALSE;
+		} else
+			nm_exported_connection_signal_updated (connection, new_settings);
 	}
 
 	return success;

Modified: trunk/libnm-util/nm-connection.c
==============================================================================
--- trunk/libnm-util/nm-connection.c	(original)
+++ trunk/libnm-util/nm-connection.c	Wed Nov 19 15:09:05 2008
@@ -347,29 +347,30 @@
 	return type ? nm_connection_get_setting (connection, type) : NULL;
 }
 
+/**
+ * nm_connection_replace_settings:
+ * @connection: a #NMConnection
+ * @new_settings: a #GHashTable of settings
+ * @error: location to store error, or %NULL
+ *
+ * Returns: TRUE if the settings were valid and added to the connection, FALSE
+ * if they were not
+ **/
 gboolean
 nm_connection_replace_settings (NMConnection *connection,
-                                GHashTable *new_settings)
+                                GHashTable *new_settings,
+                                GError **error)
 {
-	GError *error = NULL;
-
+	g_return_val_if_fail (connection != NULL, FALSE);
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
 	g_return_val_if_fail (new_settings != NULL, FALSE);
+	if (error)
+		g_return_val_if_fail (*error == NULL, FALSE);
 
 	g_hash_table_remove_all (NM_CONNECTION_GET_PRIVATE (connection)->settings);
 	g_hash_table_foreach (new_settings, parse_one_setting, connection);
 
-	if (!nm_connection_verify (connection, &error)) {
-		g_warning ("%s: '%s' / '%s' invalid: %d",
-		           __func__,
-		           g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)),
-		           error->message,
-		           error->code);
-		g_error_free (error);
-		return FALSE;
-	}
-
-	return TRUE;
+	return nm_connection_verify (connection, error);
 }
 
 typedef struct {

Modified: trunk/libnm-util/nm-connection.h
==============================================================================
--- trunk/libnm-util/nm-connection.h	(original)
+++ trunk/libnm-util/nm-connection.h	Wed Nov 19 15:09:05 2008
@@ -92,7 +92,8 @@
 									    const char *name);
 
 gboolean      nm_connection_replace_settings (NMConnection *connection,
-									 GHashTable *new_settings);
+                                              GHashTable *new_settings,
+                                              GError **error);
 
 /* Returns TRUE if the connections are the same */
 gboolean      nm_connection_compare       (NMConnection *connection,

Modified: trunk/src/nm-manager.c
==============================================================================
--- trunk/src/nm-manager.c	(original)
+++ trunk/src/nm-manager.c	Wed Nov 19 15:09:05 2008
@@ -970,7 +970,7 @@
 	}
 	g_object_unref (new_connection);
 
-	valid = nm_connection_replace_settings (old_connection, settings);
+	valid = nm_connection_replace_settings (old_connection, settings, NULL);
 	if (valid) {
 		g_signal_emit (manager, signals[CONNECTION_UPDATED], 0,
 		               old_connection,

Modified: trunk/system-settings/plugins/ifcfg-suse/nm-suse-connection.c
==============================================================================
--- trunk/system-settings/plugins/ifcfg-suse/nm-suse-connection.c	(original)
+++ trunk/system-settings/plugins/ifcfg-suse/nm-suse-connection.c	Wed Nov 19 15:09:05 2008
@@ -37,9 +37,20 @@
 	case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
 		new_connection = parse_ifcfg (priv->iface, priv->dev_type);
 		if (new_connection) {
+			GError *error = NULL;
+
 			new_settings = nm_connection_to_hash (new_connection);
-			nm_connection_replace_settings (nm_exported_connection_get_connection (exported), new_settings);
-			nm_exported_connection_signal_updated (exported, new_settings);
+			if (nm_connection_replace_settings (nm_exported_connection_get_connection (exported), new_settings, &error))
+				nm_exported_connection_signal_updated (exported, new_settings);
+			else {
+				g_warning ("%s: '%s' / '%s' invalid: %d",
+				           __func__,
+				           error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
+				           (error && error->message) ? error->message : "(none)",
+				           error ? error->code : -1);
+				g_clear_error (&error);
+				nm_exported_connection_signal_removed (exported);
+			}
 
 			g_hash_table_destroy (new_settings);
 			g_object_unref (new_connection);

Modified: trunk/system-settings/plugins/keyfile/nm-keyfile-connection.c
==============================================================================
--- trunk/system-settings/plugins/keyfile/nm-keyfile-connection.c	(original)
+++ trunk/system-settings/plugins/keyfile/nm-keyfile-connection.c	Wed Nov 19 15:09:05 2008
@@ -222,14 +222,16 @@
 		char *filename = NULL;
 
 		connection = nm_exported_connection_get_connection (exported);
-		nm_connection_replace_settings (connection, new_settings);
-		success = write_connection (connection, &filename, error);
-		if (success && filename && strcmp (priv->filename, filename)) {
-			/* Update the filename if it changed */
-			g_free (priv->filename);
-			priv->filename = filename;
-		} else
-			g_free (filename);
+		success = nm_connection_replace_settings (connection, new_settings, error);
+		if (success) {
+			success = write_connection (connection, &filename, error);
+			if (success && filename && strcmp (priv->filename, filename)) {
+				/* Update the filename if it changed */
+				g_free (priv->filename);
+				priv->filename = filename;
+			} else
+				g_free (filename);
+		}
 	}
 
 	return success;

Modified: trunk/system-settings/plugins/keyfile/plugin.c
==============================================================================
--- trunk/system-settings/plugins/keyfile/plugin.c	(original)
+++ trunk/system-settings/plugins/keyfile/plugin.c	Wed Nov 19 15:09:05 2008
@@ -133,11 +133,22 @@
 {
 	NMConnection *wrapped;
 	GHashTable *new_settings;
+	GError *error = NULL;
 
 	new_settings = nm_connection_to_hash (nm_exported_connection_get_connection (new));
 	wrapped = nm_exported_connection_get_connection (orig);
-	nm_connection_replace_settings (wrapped, new_settings);
-	nm_exported_connection_signal_updated (orig, new_settings);
+	if (nm_connection_replace_settings (wrapped, new_settings, &error))
+		nm_exported_connection_signal_updated (orig, new_settings);
+	else {
+		g_warning ("%s: '%s' / '%s' invalid: %d",
+		           __func__,
+		           error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
+		           (error && error->message) ? error->message : "(none)",
+		           error ? error->code : -1);
+		g_clear_error (&error);
+		nm_exported_connection_signal_removed (orig);
+	}
+
 	g_hash_table_destroy (new_settings);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]