libnm: merge branch 'th/libnm-various-fixes'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/319
This commit is contained in:
Thomas Haller
2019-10-27 14:31:05 +01:00
32 changed files with 137 additions and 72 deletions

View File

@@ -1073,7 +1073,8 @@ get_property (GObject *object, guint prop_id,
g_value_take_boxed (value,
priv->seen_bssids
? nm_utils_strv_dup (priv->seen_bssids->pdata,
priv->seen_bssids->len)
priv->seen_bssids->len,
TRUE)
: NULL);
break;
case PROP_HIDDEN:

View File

@@ -1728,7 +1728,9 @@ nm_utils_ip6_dns_to_variant (char **dns)
* @value: a #GVariant of type 'aay'
*
* Utility function to convert a #GVariant of type 'aay' representing a list of
* IPv6 addresses into an array of IP address strings.
* IPv6 addresses into an array of IP address strings. Each "ay" entry must be
* a IPv6 address in binary form (16 bytes long). Invalid entries are silently
* ignored.
*
* Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address strings.
**/
@@ -1750,14 +1752,9 @@ nm_utils_ip6_dns_from_variant (GVariant *value)
gsize length;
const struct in6_addr *ip = g_variant_get_fixed_array (ip_var, &length, 1);
if (length != sizeof (struct in6_addr)) {
g_warning ("%s: ignoring invalid IP6 address of length %d",
__func__, (int) length);
g_variant_unref (ip_var);
continue;
}
if (length == sizeof (struct in6_addr))
dns[i++] = nm_utils_inet6_ntop_dup (ip);
dns[i++] = nm_utils_inet6_ntop_dup (ip);
g_variant_unref (ip_var);
}
dns[i] = NULL;

View File

@@ -163,7 +163,7 @@ nm_access_point_get_bssid (NMAccessPoint *ap)
{
g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NULL);
return nm_str_not_empty (NM_ACCESS_POINT_GET_PRIVATE (ap)->bssid);
return _nml_coerce_property_str_not_empty (NM_ACCESS_POINT_GET_PRIVATE (ap)->bssid);
}
/**
@@ -579,7 +579,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
obj_properties[PROP_MODE] =
g_param_spec_enum (NM_ACCESS_POINT_MODE, "", "",
NM_TYPE_802_11_MODE,
NM_802_11_MODE_INFRA,
NM_802_11_MODE_UNKNOWN,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);

View File

@@ -109,7 +109,7 @@ nm_active_connection_get_id (NMActiveConnection *connection)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
return nm_str_not_empty (NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->id);
return _nml_coerce_property_str_not_empty (NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->id);
}
/**
@@ -126,7 +126,7 @@ nm_active_connection_get_uuid (NMActiveConnection *connection)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
return nm_str_not_empty (NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->uuid);
return _nml_coerce_property_str_not_empty (NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->uuid);
}
/**
@@ -143,7 +143,7 @@ nm_active_connection_get_connection_type (NMActiveConnection *connection)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
return nm_str_not_empty (NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->type);
return _nml_coerce_property_str_not_empty (NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->type);
}
/**

View File

@@ -3958,7 +3958,7 @@ nm_client_class_init (NMClientClass *client_class)
*/
obj_properties[PROP_NETWORKING_ENABLED] =
g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED, "", "",
TRUE,
FALSE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
@@ -3982,7 +3982,7 @@ nm_client_class_init (NMClientClass *client_class)
**/
obj_properties[PROP_WIRELESS_HARDWARE_ENABLED] =
g_param_spec_boolean (NM_CLIENT_WIRELESS_HARDWARE_ENABLED, "", "",
TRUE,
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
@@ -4191,7 +4191,7 @@ nm_client_class_init (NMClientClass *client_class)
**/
obj_properties[PROP_DNS_MODE] =
g_param_spec_string (NM_CLIENT_DNS_MODE, "", "",
"",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
@@ -4204,7 +4204,7 @@ nm_client_class_init (NMClientClass *client_class)
**/
obj_properties[PROP_DNS_RC_MANAGER] =
g_param_spec_string (NM_CLIENT_DNS_RC_MANAGER, "", "",
"",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
@@ -4230,7 +4230,7 @@ nm_client_class_init (NMClientClass *client_class)
* Since: 1.12
*/
obj_properties[PROP_CHECKPOINTS] =
g_param_spec_boxed (NM_MANAGER_CHECKPOINTS, "", "",
g_param_spec_boxed (NM_CLIENT_CHECKPOINTS, "", "",
G_TYPE_PTR_ARRAY,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);

View File

@@ -61,6 +61,7 @@ _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY
#define NM_CLIENT_DNS_MODE "dns-mode"
#define NM_CLIENT_DNS_RC_MANAGER "dns-rc-manager"
#define NM_CLIENT_DNS_CONFIGURATION "dns-configuration"
#define NM_CLIENT_CHECKPOINTS "checkpoints"
#define NM_CLIENT_DEVICE_ADDED "device-added"
#define NM_CLIENT_DEVICE_REMOVED "device-removed"

View File

@@ -56,7 +56,7 @@ nm_device_bond_get_hw_address (NMDeviceBond *device)
{
g_return_val_if_fail (NM_IS_DEVICE_BOND (device), NULL);
return nm_str_not_empty (NM_DEVICE_BOND_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_BOND_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -56,7 +56,7 @@ nm_device_bridge_get_hw_address (NMDeviceBridge *device)
{
g_return_val_if_fail (NM_IS_DEVICE_BRIDGE (device), NULL);
return nm_str_not_empty (NM_DEVICE_BRIDGE_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_BRIDGE_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -57,7 +57,7 @@ nm_device_bt_get_hw_address (NMDeviceBt *device)
{
g_return_val_if_fail (NM_IS_DEVICE_BT (device), NULL);
return nm_str_not_empty (NM_DEVICE_BT_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_BT_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -52,7 +52,7 @@ nm_device_dummy_get_hw_address (NMDeviceDummy *device)
{
g_return_val_if_fail (NM_IS_DEVICE_DUMMY (device), NULL);
return nm_str_not_empty (NM_DEVICE_DUMMY_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_DUMMY_GET_PRIVATE (device)->hw_address);
}
static gboolean

View File

@@ -61,7 +61,7 @@ nm_device_ethernet_get_hw_address (NMDeviceEthernet *device)
{
g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), NULL);
return nm_str_not_empty (NM_DEVICE_ETHERNET_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_ETHERNET_GET_PRIVATE (device)->hw_address);
}
/**
@@ -78,7 +78,7 @@ nm_device_ethernet_get_permanent_hw_address (NMDeviceEthernet *device)
{
g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), NULL);
return nm_str_not_empty (NM_DEVICE_ETHERNET_GET_PRIVATE (device)->perm_hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_ETHERNET_GET_PRIVATE (device)->perm_hw_address);
}
/**

View File

@@ -52,7 +52,7 @@ nm_device_generic_get_hw_address (NMDeviceGeneric *device)
{
g_return_val_if_fail (NM_IS_DEVICE_GENERIC (device), NULL);
return nm_str_not_empty (NM_DEVICE_GENERIC_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GENERIC_GET_PRIVATE (device)->hw_address);
}
/*****************************************************************************/
@@ -62,7 +62,7 @@ get_type_description (NMDevice *device)
{
NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (device);
return nm_str_not_empty (priv->type_description);
return _nml_coerce_property_str_not_empty (priv->type_description);
}
static const char *

View File

@@ -53,7 +53,7 @@ nm_device_infiniband_get_hw_address (NMDeviceInfiniband *device)
{
g_return_val_if_fail (NM_IS_DEVICE_INFINIBAND (device), NULL);
return nm_str_not_empty (NM_DEVICE_INFINIBAND_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_INFINIBAND_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -105,7 +105,7 @@ nm_device_ip_tunnel_get_local (NMDeviceIPTunnel *device)
{
g_return_val_if_fail (NM_IS_DEVICE_IP_TUNNEL (device), NULL);
return nm_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->local);
return _nml_coerce_property_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->local);
}
/**
@@ -121,7 +121,7 @@ nm_device_ip_tunnel_get_remote (NMDeviceIPTunnel *device)
{
g_return_val_if_fail (NM_IS_DEVICE_IP_TUNNEL (device), NULL);
return nm_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->remote);
return _nml_coerce_property_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->remote);
}
/**
@@ -186,7 +186,7 @@ nm_device_ip_tunnel_get_input_key (NMDeviceIPTunnel *device)
{
g_return_val_if_fail (NM_IS_DEVICE_IP_TUNNEL (device), NULL);
return nm_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->input_key);
return _nml_coerce_property_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->input_key);
}
/**
@@ -202,7 +202,7 @@ nm_device_ip_tunnel_get_output_key (NMDeviceIPTunnel *device)
{
g_return_val_if_fail (NM_IS_DEVICE_IP_TUNNEL (device), NULL);
return nm_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->output_key);
return _nml_coerce_property_str_not_empty (NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->output_key);
}
/**

View File

@@ -28,7 +28,6 @@ typedef struct {
char *mode;
gboolean no_promisc;
gboolean tap;
char *hw_address;
} NMDeviceMacvlanPrivate;
struct _NMDeviceMacvlan {
@@ -78,7 +77,7 @@ nm_device_macvlan_get_mode (NMDeviceMacvlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_MACVLAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_MACVLAN_GET_PRIVATE (device)->mode);
return _nml_coerce_property_str_not_empty (NM_DEVICE_MACVLAN_GET_PRIVATE (device)->mode);
}
/**
@@ -127,13 +126,15 @@ nm_device_macvlan_get_tap (NMDeviceMacvlan *device)
* device, and must not be modified.
*
* Since: 1.2
*
* This property is not implemented yet, and the function always return NULL.
**/
const char *
nm_device_macvlan_get_hw_address (NMDeviceMacvlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_MACVLAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_MACVLAN_GET_PRIVATE (device)->hw_address);
return NULL;
}
static gboolean
@@ -188,7 +189,6 @@ init_dbus (NMObject *object)
{ NM_DEVICE_MACVLAN_MODE, &priv->mode },
{ NM_DEVICE_MACVLAN_NO_PROMISC, &priv->no_promisc },
{ NM_DEVICE_MACVLAN_TAP, &priv->tap },
{ NM_DEVICE_MACVLAN_HW_ADDRESS, &priv->hw_address },
{ NULL },
};
@@ -205,7 +205,6 @@ finalize (GObject *object)
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (object);
g_free (priv->mode);
g_free (priv->hw_address);
g_clear_object (&priv->parent);
G_OBJECT_CLASS (nm_device_macvlan_parent_class)->finalize (object);
@@ -315,6 +314,8 @@ nm_device_macvlan_class_init (NMDeviceMacvlanClass *gre_class)
* The hardware (MAC) address of the device.
*
* Since: 1.2
*
* This property is not implemented yet, and the function always return NULL.
**/
obj_properties[PROP_HW_ADDRESS] =
g_param_spec_string (NM_DEVICE_MACVLAN_HW_ADDRESS, "", "",

View File

@@ -55,7 +55,7 @@ nm_device_olpc_mesh_get_hw_address (NMDeviceOlpcMesh *device)
{
g_return_val_if_fail (NM_IS_DEVICE_OLPC_MESH (device), NULL);
return nm_str_not_empty (NM_DEVICE_OLPC_MESH_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_OLPC_MESH_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -58,7 +58,7 @@ nm_device_team_get_hw_address (NMDeviceTeam *device)
{
g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), NULL);
return nm_str_not_empty (NM_DEVICE_TEAM_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_TEAM_GET_PRIVATE (device)->hw_address);
}
/**
@@ -111,7 +111,7 @@ nm_device_team_get_config (NMDeviceTeam *device)
{
g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), NULL);
return nm_str_not_empty (NM_DEVICE_TEAM_GET_PRIVATE (device)->config);
return _nml_coerce_property_str_not_empty (NM_DEVICE_TEAM_GET_PRIVATE (device)->config);
}
static const char *

View File

@@ -67,7 +67,7 @@ nm_device_tun_get_hw_address (NMDeviceTun *device)
{
g_return_val_if_fail (NM_IS_DEVICE_TUN (device), NULL);
return nm_str_not_empty (NM_DEVICE_TUN_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_TUN_GET_PRIVATE (device)->hw_address);
}
/**
@@ -85,7 +85,7 @@ nm_device_tun_get_mode (NMDeviceTun *device)
{
g_return_val_if_fail (NM_IS_DEVICE_TUN (device), NULL);
return nm_str_not_empty (NM_DEVICE_TUN_GET_PRIVATE (device)->mode);
return _nml_coerce_property_str_not_empty (NM_DEVICE_TUN_GET_PRIVATE (device)->mode);
}
/**

View File

@@ -58,7 +58,7 @@ nm_device_vlan_get_hw_address (NMDeviceVlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_VLAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -38,7 +38,6 @@ NM_GOBJECT_PROPERTIES_DEFINE_BASE (
typedef struct {
NMDevice *parent;
char *hw_address;
gboolean carrier;
guint id;
char *group;
char *local;
@@ -87,7 +86,7 @@ nm_device_vxlan_get_hw_address (NMDeviceVxlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_VXLAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_VXLAN_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_VXLAN_GET_PRIVATE (device)->hw_address);
}
/**
@@ -99,13 +98,16 @@ nm_device_vxlan_get_hw_address (NMDeviceVxlan *device)
* Returns: %TRUE if the device has carrier.
*
* Since: 1.2
*
* This property is not implemented yet, and the function always returns
* FALSE.
**/
gboolean
nm_device_vxlan_get_carrier (NMDeviceVxlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_VXLAN (device), FALSE);
return NM_DEVICE_VXLAN_GET_PRIVATE (device)->carrier;
return FALSE;
}
/**
@@ -154,7 +156,7 @@ nm_device_vxlan_get_group (NMDeviceVxlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_VXLAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_VXLAN_GET_PRIVATE (device)->group);
return _nml_coerce_property_str_not_empty (NM_DEVICE_VXLAN_GET_PRIVATE (device)->group);
}
/**
@@ -170,7 +172,7 @@ nm_device_vxlan_get_local (NMDeviceVxlan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_VXLAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_VXLAN_GET_PRIVATE (device)->local);
return _nml_coerce_property_str_not_empty (NM_DEVICE_VXLAN_GET_PRIVATE (device)->local);
}
/**
@@ -415,7 +417,6 @@ init_dbus (NMObject *object)
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (object);
const NMPropertiesInfo property_info[] = {
{ NM_DEVICE_VXLAN_HW_ADDRESS, &priv->hw_address },
{ NM_DEVICE_VXLAN_CARRIER, &priv->carrier },
{ NM_DEVICE_VXLAN_PARENT, &priv->parent, NULL, NM_TYPE_DEVICE },
{ NM_DEVICE_VXLAN_ID, &priv->id },
{ NM_DEVICE_VXLAN_GROUP, &priv->group },
@@ -559,6 +560,8 @@ nm_device_vxlan_class_init (NMDeviceVxlanClass *vxlan_class)
* Whether the device has carrier.
*
* Since: 1.2
*
* This property is not implemented yet, and the property is always FALSE.
**/
obj_properties[PROP_CARRIER] =
g_param_spec_boolean (NM_DEVICE_VXLAN_CARRIER, "", "",

View File

@@ -73,7 +73,7 @@ nm_device_wifi_p2p_get_hw_address (NMDeviceWifiP2P *device)
{
g_return_val_if_fail (NM_IS_DEVICE_WIFI_P2P (device), NULL);
return nm_str_not_empty (NM_DEVICE_WIFI_P2P_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_WIFI_P2P_GET_PRIVATE (device)->hw_address);
}
/**

View File

@@ -92,7 +92,7 @@ nm_device_wifi_get_hw_address (NMDeviceWifi *device)
{
g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
return nm_str_not_empty (NM_DEVICE_WIFI_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_WIFI_GET_PRIVATE (device)->hw_address);
}
/**
@@ -109,7 +109,7 @@ nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device)
{
g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
return nm_str_not_empty (NM_DEVICE_WIFI_GET_PRIVATE (device)->perm_hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_WIFI_GET_PRIVATE (device)->perm_hw_address);
}
/**

View File

@@ -50,7 +50,7 @@ nm_device_wpan_get_hw_address (NMDeviceWpan *device)
{
g_return_val_if_fail (NM_IS_DEVICE_WPAN (device), NULL);
return nm_str_not_empty (NM_DEVICE_WPAN_GET_PRIVATE (device)->hw_address);
return _nml_coerce_property_str_not_empty (NM_DEVICE_WPAN_GET_PRIVATE (device)->hw_address);
}
static gboolean

View File

@@ -609,7 +609,7 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
obj_properties[PROP_AUTOCONNECT] =
g_param_spec_boolean (NM_DEVICE_AUTOCONNECT, "", "",
TRUE,
FALSE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
@@ -797,7 +797,7 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
obj_properties[PROP_MTU] =
g_param_spec_uint (NM_DEVICE_MTU, "", "",
0, G_MAXUINT32, 1500,
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
@@ -860,7 +860,7 @@ nm_device_get_iface (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->iface);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->iface);
}
/**
@@ -878,7 +878,7 @@ nm_device_get_ip_iface (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->ip_iface);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->ip_iface);
}
/**
@@ -912,7 +912,7 @@ nm_device_get_udi (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->udi);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->udi);
}
/**
@@ -929,7 +929,7 @@ nm_device_get_driver (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->driver);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->driver);
}
/**
@@ -946,7 +946,7 @@ nm_device_get_driver_version (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->driver_version);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->driver_version);
}
/**
@@ -963,7 +963,7 @@ nm_device_get_firmware_version (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->firmware_version);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->firmware_version);
}
/**
@@ -988,7 +988,7 @@ nm_device_get_type_description (NMDevice *device)
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
if (priv->type_description)
return nm_str_not_empty (priv->type_description);
return _nml_coerce_property_str_not_empty (priv->type_description);
if (NM_DEVICE_GET_CLASS (device)->get_type_description) {
desc = NM_DEVICE_GET_CLASS (device)->get_type_description (device);
@@ -1001,7 +1001,7 @@ nm_device_get_type_description (NMDevice *device)
typename += 8;
priv->type_description = g_ascii_strdown (typename, -1);
return nm_str_not_empty (priv->type_description);
return _nml_coerce_property_str_not_empty (priv->type_description);
}
/**
@@ -1861,7 +1861,7 @@ nm_device_get_physical_port_id (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
return nm_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->physical_port_id);
return _nml_coerce_property_str_not_empty (NM_DEVICE_GET_PRIVATE (device)->physical_port_id);
}
/**

View File

@@ -377,7 +377,7 @@ nm_ip_config_get_gateway (NMIPConfig *config)
{
g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
return nm_str_not_empty (NM_IP_CONFIG_GET_PRIVATE (config)->gateway);
return _nml_coerce_property_str_not_empty (NM_IP_CONFIG_GET_PRIVATE (config)->gateway);
}
/**

View File

@@ -7,6 +7,7 @@
#define __NM_LIBNM_UTILS_H__
#include "nm-types.h"
#include "nm-glib-aux/nm-ref-string.h"
/*****************************************************************************/
@@ -106,6 +107,36 @@ void _nml_dbus_log (NMLDBusLogLevel level,
/*****************************************************************************/
static inline const char *
_nml_coerce_property_str_not_null (const char *str)
{
return str ?: "";
}
static inline const char *
_nml_coerce_property_str_not_empty (const char *str)
{
return str && str[0] ? str : NULL;
}
static inline const char *
_nml_coerce_property_object_path (NMRefString *path)
{
if (!path)
return NULL;
if (nm_streq (path->str, "/"))
return NULL;
return path->str;
}
static inline const char *const*
_nml_coerce_property_strv_not_null (char **strv)
{
return ((const char *const*) strv) ?: NM_PTRARRAY_EMPTY (const char *);
}
/*****************************************************************************/
char *nm_utils_wincaps_to_dash (const char *caps);
/*****************************************************************************/

View File

@@ -436,7 +436,7 @@ nm_manager_get_version (NMManager *manager)
{
g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
return nm_str_not_empty (NM_MANAGER_GET_PRIVATE (manager)->version);
return _nml_coerce_property_str_not_empty (NM_MANAGER_GET_PRIVATE (manager)->version);
}
NMState

View File

@@ -67,7 +67,7 @@ nm_vpn_connection_get_banner (NMVpnConnection *vpn)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL);
return nm_str_not_empty (NM_VPN_CONNECTION_GET_PRIVATE (vpn)->banner);
return _nml_coerce_property_str_not_empty (NM_VPN_CONNECTION_GET_PRIVATE (vpn)->banner);
}
/**

View File

@@ -49,4 +49,23 @@ nm_ref_string_get_len (NMRefString *rstr)
return rstr ? rstr->len : 0u;
}
static inline gboolean
NM_IS_REF_STRING (const NMRefString *rstr)
{
#if NM_MORE_ASSERTS > 10
if (rstr) {
nm_auto_ref_string NMRefString *r2 = NULL;
r2 = nm_ref_string_new_len (rstr->str, rstr->len);
nm_assert (rstr == r2);
}
#endif
/* Technically, %NULL is also a valid NMRefString (according to nm_ref_string_new(),
* nm_ref_string_get_str() and nm_ref_string_unref()). However, NM_IS_REF_STRING()
* does not think so. If callers want to allow %NULL, they need to check
* separately. */
return !!rstr;
}
#endif /* __NM_REF_STRING_H__ */

View File

@@ -2393,6 +2393,10 @@ nm_utils_strv_make_deep_copied_n (const char **strv, gsize len)
* is negative or zero (in which case %NULL will be returned).
* @len: the length of strings in @str. If negative, strv is assumed
* to be a NULL terminated array.
* @deep_copied: if %TRUE, clones the individual strings. In that case,
* the returned array must be freed with g_strfreev(). Otherwise, the
* strings themself are not copied. You must take care of who owns the
* strings yourself.
*
* Like g_strdupv(), with two differences:
*
@@ -2407,10 +2411,13 @@ nm_utils_strv_make_deep_copied_n (const char **strv, gsize len)
* array with g_strfreev(). Allowing that would be error prone.
*
* Returns: (transfer full): a clone of the strv array. Always
* %NULL terminated.
* %NULL terminated. Depending on @deep_copied, the strings are
* cloned or not.
*/
char **
nm_utils_strv_dup (gpointer strv, gssize len)
nm_utils_strv_dup (gpointer strv,
gssize len,
gboolean deep_copied)
{
gsize i, l;
char **v;
@@ -2438,7 +2445,10 @@ nm_utils_strv_dup (gpointer strv, gssize len)
g_return_val_if_reached (v);
}
v[i] = g_strdup (src[i]);
if (deep_copied)
v[i] = g_strdup (src[i]);
else
v[i] = (char *) src[i];
}
v[l] = NULL;
return v;

View File

@@ -990,7 +990,9 @@ nm_utils_strv_make_deep_copied_nonnull (const char **strv)
return nm_utils_strv_make_deep_copied (strv) ?: g_new0 (char *, 1);
}
char **nm_utils_strv_dup (gpointer strv, gssize len);
char **nm_utils_strv_dup (gpointer strv,
gssize len,
gboolean deep_copied);
/*****************************************************************************/

View File

@@ -1663,7 +1663,7 @@ set_property (GObject *object,
specs = g_slist_prepend (specs, spec);
}
priv->no_auto_default.arr = nm_utils_strv_dup (value_arr, j);
priv->no_auto_default.arr = nm_utils_strv_dup (value_arr, j, TRUE);
priv->no_auto_default.specs = g_slist_reverse (specs);
}
break;