all/trivial: rename NM_UTILS_LOOKUP_STR() to have "_A" suffix

NM_UTILS_LOOKUP_STR() uses alloca(). Partly to avoid the overhead of
malloc(), but more important because it's convenient to use. It does
not require to declare a varible to manage the lifetime of the heap
allocation.

It's quite safe, because the stack allocation is of a fixed size of only
a few bytes. Overall, I think the convenience that we get (resulting in
simpler code) outweighs the danger of stack allocation in this case. It's
still worth it.
However, as it uses alloca(), it still must not be used inside a (unbound)
loop and it is obviously a macro.

Rename the macros to have a _A() suffix. This should make the
peculiarities more apparent.
This commit is contained in:
Thomas Haller 2019-01-10 09:17:28 +01:00
parent e18ff51d4f
commit 617bdbd8c2
6 changed files with 33 additions and 30 deletions

View file

@ -1194,7 +1194,7 @@ fcn_name (lookup_type val) \
/* Call the string-lookup-table function @fcn_name. If the function returns
* %NULL, the numeric index is converted to string using a alloca() buffer.
* Beware: this macro uses alloca(). */
#define NM_UTILS_LOOKUP_STR(fcn_name, idx) \
#define NM_UTILS_LOOKUP_STR_A(fcn_name, idx) \
({ \
typeof (idx) _idx = (idx); \
const char *_s; \

View file

@ -93,7 +93,7 @@ _acd_event_to_string (unsigned int event)
return NULL;
}
#define acd_event_to_string(event) NM_UTILS_LOOKUP_STR (_acd_event_to_string, event)
#define acd_event_to_string_a(event) NM_UTILS_LOOKUP_STR_A (_acd_event_to_string, event)
static const char *
acd_error_to_string (int error)
@ -201,7 +201,7 @@ acd_event (GIOChannel *source, GIOCondition condition, gpointer data)
nm_platform_link_get_name (NM_PLATFORM_GET, self->ifindex));
break;
default:
_LOGD ("unhandled event '%s'", acd_event_to_string (event->event));
_LOGD ("unhandled event '%s'", acd_event_to_string_a (event->event));
break;
}

View file

@ -744,8 +744,7 @@ NM_UTILS_LOOKUP_STR_DEFINE (nm_device_state_reason_to_str, NMDeviceStateReason,
NM_UTILS_LOOKUP_STR_ITEM (NM_DEVICE_STATE_REASON_SRIOV_CONFIGURATION_FAILED, "sriov-configuration-failed"),
);
#define reason_to_string(reason) \
NM_UTILS_LOOKUP_STR (nm_device_state_reason_to_str, reason)
#define reason_to_string_a(reason) NM_UTILS_LOOKUP_STR_A (nm_device_state_reason_to_str, reason)
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (mtu_source_to_str, NMDeviceMtuSource,
NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT ("unknown"),
@ -13363,7 +13362,7 @@ _set_unmanaged_flags (NMDevice *self,
flags,
NM_PRINT_FMT_QUOTED (allow_state_transition,
", reason ",
reason_to_string (reason),
reason_to_string_a (reason),
transition_state ? ", transition-state" : "",
""));
@ -14313,7 +14312,7 @@ nm_device_cleanup (NMDevice *self, NMDeviceStateReason reason, CleanupType clean
if (reason == NM_DEVICE_STATE_REASON_NOW_MANAGED)
_LOGD (LOGD_DEVICE, "preparing device");
else
_LOGD (LOGD_DEVICE, "deactivating device (reason '%s') [%d]", reason_to_string (reason), reason);
_LOGD (LOGD_DEVICE, "deactivating device (reason '%s') [%d]", reason_to_string_a (reason), reason);
/* Save whether or not we tried IPv6 for later */
priv = NM_DEVICE_GET_PRIVATE (self);
@ -14700,7 +14699,7 @@ _set_state_full (NMDevice *self,
_LOGD (LOGD_DEVICE, "state change: %s -> %s (reason '%s', sys-iface-state: '%s'%s)",
nm_device_state_to_str (old_state),
nm_device_state_to_str (state),
reason_to_string (reason),
reason_to_string_a (reason),
_sys_iface_state_to_str (priv->sys_iface_state),
priv->firmware_missing ? ", missing firmware" : "");
return;
@ -14709,7 +14708,7 @@ _set_state_full (NMDevice *self,
_LOGI (LOGD_DEVICE, "state change: %s -> %s (reason '%s', sys-iface-state: '%s')",
nm_device_state_to_str (old_state),
nm_device_state_to_str (state),
reason_to_string (reason),
reason_to_string_a (reason),
_sys_iface_state_to_str (priv->sys_iface_state));
priv->in_state_changed = TRUE;
@ -15046,7 +15045,7 @@ queued_state_set (gpointer user_data)
_LOGD (LOGD_DEVICE, "queue-state[%s, reason:%s, id:%u]: %s",
nm_device_state_to_str (priv->queued_state.state),
reason_to_string (priv->queued_state.reason),
reason_to_string_a (priv->queued_state.reason),
priv->queued_state.id,
"change state");
@ -15077,11 +15076,11 @@ nm_device_queue_state (NMDevice *self,
if (priv->queued_state.id && priv->queued_state.state == state) {
_LOGD (LOGD_DEVICE, "queue-state[%s, reason:%s, id:%u]: %s%s%s%s",
nm_device_state_to_str (priv->queued_state.state),
reason_to_string (priv->queued_state.reason),
reason_to_string_a (priv->queued_state.reason),
priv->queued_state.id,
"ignore queuing same state change",
NM_PRINT_FMT_QUOTED (priv->queued_state.reason != reason,
" (reason differs: ", reason_to_string (reason), ")", ""));
" (reason differs: ", reason_to_string_a (reason), ")", ""));
return;
}
@ -15093,7 +15092,7 @@ nm_device_queue_state (NMDevice *self,
if (priv->queued_state.id) {
_LOGW (LOGD_DEVICE, "queue-state[%s, reason:%s, id:%u]: %s",
nm_device_state_to_str (priv->queued_state.state),
reason_to_string (priv->queued_state.reason),
reason_to_string_a (priv->queued_state.reason),
priv->queued_state.id,
"replace previously queued state change");
nm_clear_g_source (&priv->queued_state.id);
@ -15106,7 +15105,7 @@ nm_device_queue_state (NMDevice *self,
_LOGD (LOGD_DEVICE, "queue-state[%s, reason:%s, id:%u]: %s",
nm_device_state_to_str (state),
reason_to_string (reason),
reason_to_string_a (reason),
priv->queued_state.id,
"queue state change");
}
@ -15121,7 +15120,7 @@ queued_state_clear (NMDevice *self)
_LOGD (LOGD_DEVICE, "queue-state[%s, reason:%s, id:%u]: %s",
nm_device_state_to_str (priv->queued_state.state),
reason_to_string (priv->queued_state.reason),
reason_to_string_a (priv->queued_state.reason),
priv->queued_state.id,
"clear queued state change");
nm_clear_g_source (&priv->queued_state.id);

View file

@ -161,7 +161,8 @@ NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_state_to_string, NMActiveConnectionState,
NM_UTILS_LOOKUP_STR_ITEM (NM_ACTIVE_CONNECTION_STATE_DEACTIVATING, "deactivating"),
NM_UTILS_LOOKUP_STR_ITEM (NM_ACTIVE_CONNECTION_STATE_DEACTIVATED, "deactivated"),
);
#define state_to_string(state) NM_UTILS_LOOKUP_STR (_state_to_string, state)
#define state_to_string_a(state) NM_UTILS_LOOKUP_STR_A (_state_to_string, state)
/* the maximum required buffer size for _state_flags_to_string(). */
#define _NM_ACTIVATION_STATE_FLAG_TO_STRING_BUFSIZE (255)
@ -256,8 +257,8 @@ nm_active_connection_set_state (NMActiveConnection *self,
return;
_LOGD ("set state %s (was %s)",
state_to_string (new_state),
state_to_string (priv->state));
state_to_string_a (new_state),
state_to_string_a (priv->state));
if (new_state > NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
/* once we are about to deactivate, we don't need the keep-alive instance
@ -786,11 +787,11 @@ check_master_ready (NMActiveConnection *self)
signalling
? "signal"
: (priv->master_ready ? "already signalled" : "not signalling"),
state_to_string (priv->state),
state_to_string_a (priv->state),
priv->master
? nm_sprintf_bufa (128, "master %p is in state %s",
priv->master,
state_to_string (nm_active_connection_get_state (priv->master)))
state_to_string_a (nm_active_connection_get_state (priv->master)))
: "no master");
if (signalling) {
@ -854,7 +855,7 @@ nm_active_connection_set_master (NMActiveConnection *self, NMActiveConnection *m
_LOGD ("set master %p, %s, state %s",
master,
nm_active_connection_get_settings_connection_id (master),
state_to_string (nm_active_connection_get_state (master)));
state_to_string_a (nm_active_connection_get_state (master)));
priv->master = g_object_ref (master);
g_signal_connect (priv->master,

View file

@ -1882,8 +1882,8 @@ device_state_changed (NMDevice *device,
if (blocked_reason != NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_NONE) {
_LOGD (LOGD_DEVICE, "blocking autoconnect of connection '%s': %s",
nm_settings_connection_get_id (sett_conn),
NM_UTILS_LOOKUP_STR (nm_device_state_reason_to_str,
nm_device_state_reason_check (reason)));
NM_UTILS_LOOKUP_STR_A (nm_device_state_reason_to_str,
nm_device_state_reason_check (reason)));
nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, blocked_reason, TRUE);
}
}

View file

@ -884,14 +884,15 @@ NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_vpn_plugin_failure_to_string, NMVpnPluginFai
NM_UTILS_LOOKUP_STR_ITEM (NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED, "connect-failed"),
NM_UTILS_LOOKUP_STR_ITEM (NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG, "bad-ip-config"),
);
#define vpn_plugin_failure_to_string(failure) NM_UTILS_LOOKUP_STR (_vpn_plugin_failure_to_string, failure)
#define vpn_plugin_failure_to_string_a(failure) NM_UTILS_LOOKUP_STR_A (_vpn_plugin_failure_to_string, failure)
static void
plugin_failed (NMVpnConnection *self, guint reason)
{
NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
_LOGW ("VPN plugin: failed: %s (%d)", vpn_plugin_failure_to_string (reason), reason);
_LOGW ("VPN plugin: failed: %s (%d)", vpn_plugin_failure_to_string_a (reason), reason);
switch (reason) {
case NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED:
@ -916,7 +917,8 @@ NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_vpn_service_state_to_string, NMVpnServiceSta
NM_UTILS_LOOKUP_STR_ITEM (NM_VPN_SERVICE_STATE_STOPPING, "stopping"),
NM_UTILS_LOOKUP_STR_ITEM (NM_VPN_SERVICE_STATE_STOPPED, "stopped"),
);
#define vpn_service_state_to_string(state) NM_UTILS_LOOKUP_STR (_vpn_service_state_to_string, state)
#define vpn_service_state_to_string_a(state) NM_UTILS_LOOKUP_STR_A (_vpn_service_state_to_string, state)
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_vpn_state_to_string, VpnState,
NM_UTILS_LOOKUP_DEFAULT (NULL),
@ -932,7 +934,8 @@ NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_vpn_state_to_string, VpnState,
NM_UTILS_LOOKUP_STR_ITEM (STATE_DISCONNECTED, "disconnected"),
NM_UTILS_LOOKUP_STR_ITEM (STATE_FAILED, "failed"),
);
#define vpn_state_to_string(state) NM_UTILS_LOOKUP_STR (_vpn_state_to_string, state)
#define vpn_state_to_string_a(state) NM_UTILS_LOOKUP_STR_A (_vpn_state_to_string, state)
static void
plugin_state_changed (NMVpnConnection *self, NMVpnServiceState new_service_state)
@ -941,7 +944,7 @@ plugin_state_changed (NMVpnConnection *self, NMVpnServiceState new_service_state
NMVpnServiceState old_service_state = priv->service_state;
_LOGI ("VPN plugin: state changed: %s (%d)",
vpn_service_state_to_string (new_service_state), new_service_state);
vpn_service_state_to_string_a (new_service_state), new_service_state);
priv->service_state = new_service_state;
if (new_service_state == NM_VPN_SERVICE_STATE_STOPPED) {
@ -2690,12 +2693,12 @@ plugin_interactive_secrets_required (NMVpnConnection *self,
if (!NM_IN_SET (priv->vpn_state, STATE_CONNECT,
STATE_NEED_AUTH)) {
_LOGD ("VPN plugin: requested secrets; state %s (%d); ignore request in current state",
vpn_state_to_string (priv->vpn_state), priv->vpn_state);
vpn_state_to_string_a (priv->vpn_state), priv->vpn_state);
return;
}
_LOGI ("VPN plugin: requested secrets; state %s (%d)",
vpn_state_to_string (priv->vpn_state), priv->vpn_state);
vpn_state_to_string_a (priv->vpn_state), priv->vpn_state);
priv->secrets_idx = SECRETS_REQ_INTERACTIVE;
_set_vpn_state (self, STATE_NEED_AUTH, NM_ACTIVE_CONNECTION_STATE_REASON_NONE, FALSE);