libnm: use nm_strvarray_*() helpers for strv properties

We have many properties, and we aim that they have a small set of
"types". The purpose is that we can treat similar properties (with the
same type) alike.

One type are "direct" strv properties. Those still require some
C functions, like get-length(), clear(), add(), get-at-index().
The implementation of those functions should also be similar, so that
strv properties behave similar.

For that, make use of helper functions, so that little duplicate logic
is there.

Use some new nm_strvarray_*() functions, and unify/cleanup some code.
All related to strv properties in NMSetting classes.
This commit is contained in:
Thomas Haller 2023-10-26 13:37:34 +02:00
parent 3435bc3011
commit eed4a21fa3
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
3 changed files with 36 additions and 49 deletions

View file

@ -881,10 +881,9 @@ nm_setting_connection_add_secondary(NMSettingConnection *setting, const char *se
priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting);
if (nm_strvarray_find_first(priv->secondaries.arr, sec_uuid) >= 0)
if (!nm_strvarray_ensure_and_add_unique(&priv->secondaries.arr, sec_uuid))
return FALSE;
nm_strvarray_add(nm_strvarray_ensure(&priv->secondaries.arr), sec_uuid);
_notify(setting, PROP_SECONDARIES);
return TRUE;
}
@ -907,7 +906,7 @@ nm_setting_connection_remove_secondary(NMSettingConnection *setting, guint32 idx
g_return_if_fail(idx < nm_g_array_len(priv->secondaries.arr));
g_array_remove_index(priv->secondaries.arr, idx);
nm_strvarray_remove_index(priv->secondaries.arr, idx);
_notify(setting, PROP_SECONDARIES);
}
@ -930,11 +929,11 @@ nm_setting_connection_remove_secondary_by_value(NMSettingConnection *setting, co
priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting);
if (nm_strvarray_remove_first(priv->secondaries.arr, sec_uuid)) {
_notify(setting, PROP_SECONDARIES);
return TRUE;
}
return FALSE;
if (!nm_strvarray_remove_first(priv->secondaries.arr, sec_uuid))
return FALSE;
_notify(setting, PROP_SECONDARIES);
return TRUE;
}
/**

View file

@ -5385,7 +5385,7 @@ nm_setting_ip_config_add_dhcp_reject_server(NMSettingIPConfig *setting, const ch
g_return_if_fail(server != NULL);
priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting);
nm_strvarray_add(nm_strvarray_ensure(&priv->dhcp_reject_servers), server);
nm_strvarray_ensure_and_add(&priv->dhcp_reject_servers, server);
_notify(setting, PROP_DHCP_REJECT_SERVERS);
}

View file

@ -97,7 +97,7 @@ nm_setting_match_add_interface_name(NMSettingMatch *setting, const char *interfa
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(interface_name);
nm_strvarray_add(nm_strvarray_ensure(&setting->interface_name.arr), interface_name);
nm_strvarray_ensure_and_add(&setting->interface_name.arr, interface_name);
_notify(setting, PROP_INTERFACE_NAME);
}
@ -118,7 +118,7 @@ nm_setting_match_remove_interface_name(NMSettingMatch *setting, int idx)
g_return_if_fail(setting->interface_name.arr && idx >= 0
&& idx < setting->interface_name.arr->len);
g_array_remove_index(setting->interface_name.arr, idx);
nm_strvarray_remove_index(setting->interface_name.arr, idx);
_notify(setting, PROP_INTERFACE_NAME);
}
@ -139,12 +139,11 @@ nm_setting_match_remove_interface_name_by_value(NMSettingMatch *setting, const c
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(interface_name, FALSE);
if (nm_strvarray_remove_first(setting->interface_name.arr, interface_name)) {
_notify(setting, PROP_INTERFACE_NAME);
return TRUE;
}
if (!nm_strvarray_remove_first(setting->interface_name.arr, interface_name))
return FALSE;
return FALSE;
_notify(setting, PROP_INTERFACE_NAME);
return TRUE;
}
/**
@ -160,10 +159,8 @@ nm_setting_match_clear_interface_names(NMSettingMatch *setting)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
if (nm_g_array_len(setting->interface_name.arr) != 0) {
nm_clear_pointer(&setting->interface_name.arr, g_array_unref);
if (nm_strvarray_clear(&setting->interface_name.arr))
_notify(setting, PROP_INTERFACE_NAME);
}
}
/**
@ -240,7 +237,7 @@ nm_setting_match_add_kernel_command_line(NMSettingMatch *setting, const char *ke
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(kernel_command_line);
nm_strvarray_add(nm_strvarray_ensure(&setting->kernel_command_line.arr), kernel_command_line);
nm_strvarray_ensure_and_add(&setting->kernel_command_line.arr, kernel_command_line);
_notify(setting, PROP_KERNEL_COMMAND_LINE);
}
@ -261,7 +258,7 @@ nm_setting_match_remove_kernel_command_line(NMSettingMatch *setting, guint idx)
g_return_if_fail(setting->kernel_command_line.arr
&& idx < setting->kernel_command_line.arr->len);
g_array_remove_index(setting->kernel_command_line.arr, idx);
nm_strvarray_remove_index(setting->kernel_command_line.arr, idx);
_notify(setting, PROP_KERNEL_COMMAND_LINE);
}
@ -283,12 +280,11 @@ nm_setting_match_remove_kernel_command_line_by_value(NMSettingMatch *setting,
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(kernel_command_line, FALSE);
if (nm_strvarray_remove_first(setting->kernel_command_line.arr, kernel_command_line)) {
_notify(setting, PROP_KERNEL_COMMAND_LINE);
return TRUE;
}
if (!nm_strvarray_remove_first(setting->kernel_command_line.arr, kernel_command_line))
return FALSE;
return FALSE;
_notify(setting, PROP_KERNEL_COMMAND_LINE);
return TRUE;
}
/**
@ -304,10 +300,8 @@ nm_setting_match_clear_kernel_command_lines(NMSettingMatch *setting)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
if (nm_g_array_len(setting->kernel_command_line.arr) != 0) {
nm_clear_pointer(&setting->kernel_command_line.arr, g_array_unref);
if (nm_strvarray_clear(&setting->kernel_command_line.arr))
_notify(setting, PROP_KERNEL_COMMAND_LINE);
}
}
/**
@ -381,7 +375,7 @@ nm_setting_match_add_driver(NMSettingMatch *setting, const char *driver)
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(driver);
nm_strvarray_add(nm_strvarray_ensure(&setting->driver.arr), driver);
nm_strvarray_ensure_and_add(&setting->driver.arr, driver);
_notify(setting, PROP_DRIVER);
}
@ -401,7 +395,7 @@ nm_setting_match_remove_driver(NMSettingMatch *setting, guint idx)
g_return_if_fail(setting->driver.arr && idx < setting->driver.arr->len);
g_array_remove_index(setting->driver.arr, idx);
nm_strvarray_remove_index(setting->driver.arr, idx);
_notify(setting, PROP_DRIVER);
}
@ -422,12 +416,11 @@ nm_setting_match_remove_driver_by_value(NMSettingMatch *setting, const char *dri
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(driver, FALSE);
if (nm_strvarray_remove_first(setting->driver.arr, driver)) {
_notify(setting, PROP_DRIVER);
return TRUE;
}
if (!nm_strvarray_remove_first(setting->driver.arr, driver))
return FALSE;
return FALSE;
_notify(setting, PROP_DRIVER);
return TRUE;
}
/**
@ -443,10 +436,8 @@ nm_setting_match_clear_drivers(NMSettingMatch *setting)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
if (nm_g_array_len(setting->driver.arr) != 0) {
nm_clear_pointer(&setting->driver.arr, g_array_unref);
if (nm_strvarray_clear(&setting->driver.arr))
_notify(setting, PROP_DRIVER);
}
}
/**
@ -520,7 +511,7 @@ nm_setting_match_add_path(NMSettingMatch *setting, const char *path)
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(path);
nm_strvarray_add(nm_strvarray_ensure(&setting->path.arr), path);
nm_strvarray_ensure_and_add(&setting->path.arr, path);
_notify(setting, PROP_PATH);
}
@ -540,7 +531,7 @@ nm_setting_match_remove_path(NMSettingMatch *setting, guint idx)
g_return_if_fail(setting->path.arr && idx < setting->path.arr->len);
g_array_remove_index(setting->path.arr, idx);
nm_strvarray_remove_index(setting->path.arr, idx);
_notify(setting, PROP_PATH);
}
@ -561,12 +552,11 @@ nm_setting_match_remove_path_by_value(NMSettingMatch *setting, const char *path)
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(path, FALSE);
if (nm_strvarray_remove_first(setting->path.arr, path)) {
_notify(setting, PROP_PATH);
return TRUE;
}
if (!nm_strvarray_remove_first(setting->path.arr, path))
return FALSE;
return FALSE;
_notify(setting, PROP_PATH);
return TRUE;
}
/**
@ -582,10 +572,8 @@ nm_setting_match_clear_paths(NMSettingMatch *setting)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
if (nm_g_array_len(setting->path.arr) != 0) {
nm_clear_pointer(&setting->path.arr, g_array_unref);
if (nm_strvarray_clear(&setting->path.arr))
_notify(setting, PROP_PATH);
}
}
/**