summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-03-04 10:05:14 +0100
committerThomas Haller <thaller@redhat.com>2022-03-04 10:05:14 +0100
commita5f2285aeca3d57371f833e1360febcfc8811a89 (patch)
treebbfa637751495e4b5cf5585349576ce1d5b8d73c
parentfbee64e97993c8cd44b088efa7844688ac6998c1 (diff)
parent33584f2134759c5fa95eed8a3d43e047b6e510e6 (diff)
cli: merge branch 'th/nmcli-wifi-in-use'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1125
-rw-r--r--src/libnm-glib-aux/nm-glib.h10
-rw-r--r--src/nmcli/devices.c94
2 files changed, 54 insertions, 50 deletions
diff --git a/src/libnm-glib-aux/nm-glib.h b/src/libnm-glib-aux/nm-glib.h
index 4ab9cbbda8..f3be3b32a4 100644
--- a/src/libnm-glib-aux/nm-glib.h
+++ b/src/libnm-glib-aux/nm-glib.h
@@ -717,4 +717,14 @@ _nm_deprecated("Don't use this API") void _nm_forbidden_glib_api_n(gconstpointer
/*****************************************************************************/
+/* g_alloca0() evaluates the "size" argument multiple times. That seems an error
+ * prone API (as it's not function-like).
+ *
+ * We could fix it by using an expression statement. But it doesn't seem
+ * worth it, so hide it to prevent its use. */
+#undef g_alloca0
+#undef g_newa0
+
+/*****************************************************************************/
+
#endif /* __NM_GLIB_H__ */
diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c
index e23ef681bf..ded2a9eb8c 100644
--- a/src/nmcli/devices.c
+++ b/src/nmcli/devices.c
@@ -1249,21 +1249,19 @@ sort_access_points(const GPtrArray *aps)
}
typedef struct {
- NmCli *nmc;
- int index;
- guint32 output_flags;
- const char *active_bssid;
- const char *device;
- GPtrArray *output_data;
+ NmCli *nmc;
+ NMAccessPoint *active_ap;
+ const char *device;
+ GPtrArray *output_data;
+ int *p_index;
+ guint32 output_flags;
} APInfo;
static void
-fill_output_access_point(gpointer data, gpointer user_data)
+fill_output_access_point(NMAccessPoint *ap, const APInfo *info)
{
- NMAccessPoint *ap = NM_ACCESS_POINT(data);
- APInfo *info = (APInfo *) user_data;
NmcOutputField *arr;
- gboolean active = FALSE;
+ gboolean active;
NM80211ApFlags flags;
NM80211ApSecurityFlags wpa_flags, rsn_flags;
guint32 freq, bitrate;
@@ -1284,11 +1282,7 @@ fill_output_access_point(gpointer data, gpointer user_data)
const char *sig_bars;
NMMetaColor color;
- if (info->active_bssid) {
- const char *current_bssid = nm_access_point_get_bssid(ap);
- if (current_bssid && !strcmp(current_bssid, info->active_bssid))
- active = TRUE;
- }
+ active = (info->active_ap == ap);
/* Get AP properties */
flags = nm_access_point_get_flags(ap);
@@ -1348,7 +1342,7 @@ fill_output_access_point(gpointer data, gpointer user_data)
arr = nmc_dup_fields_array((const NMMetaAbstractInfo *const *) nmc_fields_dev_wifi_list,
info->output_flags);
- ap_name = g_strdup_printf("AP[%d]", info->index++); /* AP */
+ ap_name = g_strdup_printf("AP[%d]", ++(*info->p_index)); /* AP */
set_val_str(arr, 0, ap_name);
set_val_str(arr, 1, ssid_str);
set_val_str(arr, 2, ssid_hex_str);
@@ -1381,6 +1375,12 @@ fill_output_access_point(gpointer data, gpointer user_data)
g_ptr_array_add(info->output_data, arr);
}
+static void
+fill_output_access_point_void(gpointer data, gpointer user_data)
+{
+ fill_output_access_point(data, user_data);
+}
+
static char *
bluetooth_caps_to_string(NMBluetoothCapabilities caps)
{
@@ -1679,18 +1679,14 @@ show_device_info(NMDevice *device, NmCli *nmc)
/* Wireless specific information */
if ((NM_IS_DEVICE_WIFI(device))) {
- NMAccessPoint *active_ap = NULL;
- const char *active_bssid = NULL;
-
/* section AP */
if (!g_ascii_strcasecmp(nmc_fields_dev_show_sections[section_idx]->name,
nmc_fields_dev_show_sections[4]->name)) {
+ NMAccessPoint *active_ap = NULL;
NMC_OUTPUT_DATA_DEFINE_SCOPED(out);
- if (state == NM_DEVICE_STATE_ACTIVATED) {
- active_ap = nm_device_wifi_get_active_access_point(NM_DEVICE_WIFI(device));
- active_bssid = active_ap ? nm_access_point_get_bssid(active_ap) : NULL;
- }
+ if (state == NM_DEVICE_STATE_ACTIVATED)
+ active_ap = nm_device_wifi_get_active_access_point(NM_DEVICE_WIFI(device));
tmpl = (const NMMetaAbstractInfo *const *) nmc_fields_dev_wifi_list;
out_indices =
@@ -1703,19 +1699,20 @@ show_device_info(NMDevice *device, NmCli *nmc)
g_ptr_array_add(out.output_data, arr);
{
- gs_unref_ptrarray GPtrArray *aps = NULL;
- APInfo info = {
+ gs_unref_ptrarray GPtrArray *aps = NULL;
+ int info_index = 0;
+ const APInfo info = {
.nmc = nmc,
- .index = 1,
+ .p_index = &info_index,
.output_flags = NMC_OF_FLAG_SECTION_PREFIX,
- .active_bssid = active_bssid,
+ .active_ap = active_ap,
.device = nm_device_get_iface(device),
.output_data = out.output_data,
};
aps = sort_access_points(
nm_device_wifi_get_access_points(NM_DEVICE_WIFI(device)));
- g_ptr_array_foreach(aps, fill_output_access_point, &info);
+ g_ptr_array_foreach(aps, fill_output_access_point_void, (gpointer) &info);
}
print_data_prepare_width(out.output_data);
@@ -2991,32 +2988,30 @@ find_ap_on_device(NMDevice *device, const char *bssid, const char *ssid, gboolea
static void
show_access_point_info(NMDeviceWifi *wifi, NmCli *nmc, NmcOutputData *out)
{
- NMAccessPoint *active_ap = NULL;
- const char *active_bssid = NULL;
+ NMAccessPoint *active_ap = NULL;
NmcOutputField *arr;
- if (nm_device_get_state(NM_DEVICE(wifi)) == NM_DEVICE_STATE_ACTIVATED) {
- active_ap = nm_device_wifi_get_active_access_point(wifi);
- active_bssid = active_ap ? nm_access_point_get_bssid(active_ap) : NULL;
- }
+ if (nm_device_get_state(NM_DEVICE(wifi)) == NM_DEVICE_STATE_ACTIVATED)
+ active_ap = nm_device_wifi_get_active_access_point(wifi);
arr = nmc_dup_fields_array((const NMMetaAbstractInfo *const *) nmc_fields_dev_wifi_list,
NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
g_ptr_array_add(out->output_data, arr);
{
- gs_unref_ptrarray GPtrArray *aps = NULL;
- APInfo info = {
+ gs_unref_ptrarray GPtrArray *aps = NULL;
+ int info_index = 0;
+ const APInfo info = {
.nmc = nmc,
- .index = 1,
+ .p_index = &info_index,
.output_flags = 0,
- .active_bssid = active_bssid,
+ .active_ap = active_ap,
.device = nm_device_get_iface(NM_DEVICE(wifi)),
.output_data = out->output_data,
};
aps = sort_access_points(nm_device_wifi_get_access_points(wifi));
- g_ptr_array_foreach(aps, fill_output_access_point, &info);
+ g_ptr_array_foreach(aps, fill_output_access_point_void, (gpointer) &info);
}
print_data_prepare_width(out->output_data);
@@ -3032,7 +3027,6 @@ wifi_print_aps(NMDeviceWifi *wifi,
{
NMAccessPoint *ap = NULL;
const GPtrArray *aps;
- APInfo *info;
guint i;
NmcOutputField *arr;
const char *base_hdr = _("Wi-Fi scan list");
@@ -3061,23 +3055,23 @@ wifi_print_aps(NMDeviceWifi *wifi,
ap = candidate_ap;
}
if (ap) {
+ int info_index = 0;
+ const APInfo info = {
+ .nmc = nmc,
+ .p_index = &info_index,
+ .output_flags = 0,
+ .device = nm_device_get_iface(NM_DEVICE(wifi)),
+ .output_data = out.output_data,
+ };
+
/* Add headers (field names) */
arr = nmc_dup_fields_array(tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
g_ptr_array_add(out.output_data, arr);
- info = g_malloc0(sizeof(APInfo));
- info->nmc = nmc;
- info->index = 1;
- info->output_flags = 0;
- info->active_bssid = NULL;
- info->device = nm_device_get_iface(NM_DEVICE(wifi));
- info->output_data = out.output_data;
-
- fill_output_access_point(ap, info);
+ fill_output_access_point(ap, &info);
print_data_prepare_width(out.output_data);
print_data(&nmc->nmc_config, &nmc->pager_data, out_indices, header_name, 0, &out);
- g_free(info);
*bssid_found = TRUE;
empty_line = TRUE;