summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-07-08 15:01:54 +0200
committerThomas Haller <thaller@redhat.com>2014-07-27 23:57:36 +0200
commitb563b15da0cd66f7c28ca02839a857d5ce0a3b3a (patch)
treed98112bf541863dafd8dfd972e507e0e1ef2b297
parent10fd053dd2a84d486c29277776c1f06b8966f373 (diff)
downloadNetworkManager-b563b15da0cd66f7c28ca02839a857d5ce0a3b3a.tar.gz
libnm-util: add _nm_setting_find_in_list_required() function
This is an utility function that can be called during verify() to find an NMSetting from @all_settings. This is especially useful for looking up the NMSettingConnection which usually is present. So just get it quickly. In the unexpected case that it is missing, it sets @error and we can return. Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r--libnm-util/nm-setting-private.h5
-rw-r--r--libnm-util/nm-setting.c28
2 files changed, 33 insertions, 0 deletions
diff --git a/libnm-util/nm-setting-private.h b/libnm-util/nm-setting-private.h
index 44288a5802..195aecb932 100644
--- a/libnm-util/nm-setting-private.h
+++ b/libnm-util/nm-setting-private.h
@@ -105,6 +105,11 @@ NMSetting *nm_setting_find_in_list (GSList *settings_list, const char *setting_n
/* Private NMSettingIP4Config methods */
+NMSetting * _nm_setting_find_in_list_required (GSList *all_settings,
+ const char *setting_name,
+ GError **error,
+ const char *error_prefix_setting_name,
+ const char *error_prefix_property_name);
NMSettingVerifyResult _nm_setting_verify_deprecated_virtual_iface_name (const char *interface_name,
gboolean allow_missing,
const char *setting_name,
diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c
index 94a0cac6e9..bd4058c74f 100644
--- a/libnm-util/nm-setting.c
+++ b/libnm-util/nm-setting.c
@@ -1268,6 +1268,34 @@ nm_setting_get_virtual_iface_name (NMSetting *setting)
return NULL;
}
+NMSetting *
+_nm_setting_find_in_list_required (GSList *all_settings,
+ const char *setting_name,
+ GError **error,
+ const char *error_prefix_setting_name,
+ const char *error_prefix_property_name)
+{
+ NMSetting *setting;
+
+ g_return_val_if_fail (!error || !*error, NULL);
+ g_return_val_if_fail (all_settings, NULL);
+ g_return_val_if_fail (setting_name, NULL);
+ g_return_val_if_fail (!error_prefix_setting_name == !error_prefix_property_name, NULL);
+
+ setting = nm_setting_find_in_list (all_settings, setting_name);
+ if (!setting) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ !strcmp (setting_name, NM_SETTING_CONNECTION_SETTING_NAME)
+ ? NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND
+ : NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
+ "Missing '%s' setting",
+ setting_name);
+ if (error_prefix_setting_name)
+ g_prefix_error (error, "%s.%s: ", error_prefix_setting_name, error_prefix_property_name);
+ }
+ return setting;
+}
NMSettingVerifyResult
_nm_setting_verify_deprecated_virtual_iface_name (const char *interface_name,