diff options
author | Thomas Haller <thaller@redhat.com> | 2014-07-08 15:01:54 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-07-27 23:57:36 +0200 |
commit | b563b15da0cd66f7c28ca02839a857d5ce0a3b3a (patch) | |
tree | d98112bf541863dafd8dfd972e507e0e1ef2b297 | |
parent | 10fd053dd2a84d486c29277776c1f06b8966f373 (diff) | |
download | NetworkManager-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.h | 5 | ||||
-rw-r--r-- | libnm-util/nm-setting.c | 28 |
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, |