summaryrefslogtreecommitdiff
path: root/src/nm-core-utils.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-06-15 11:23:39 +0200
committerThomas Haller <thaller@redhat.com>2016-06-30 08:29:54 +0200
commitc7b7305b5938b8a4b8b77f65c459f5c89708c2d0 (patch)
tree177210c704fea827306c17dff620d3f9c290bb44 /src/nm-core-utils.c
parentfc527a237cc9619a12e8abe14757087487b2e588 (diff)
downloadNetworkManager-c7b7305b5938b8a4b8b77f65c459f5c89708c2d0.tar.gz
core/utils: convert MAC address in nm_match_spec_hwaddr() from string once
Diffstat (limited to 'src/nm-core-utils.c')
-rw-r--r--src/nm-core-utils.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c
index 2b1eb36401..eb85fa0eb7 100644
--- a/src/nm-core-utils.c
+++ b/src/nm-core-utils.c
@@ -1271,8 +1271,10 @@ nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
{
const GSList *iter;
NMMatchSpecMatchType match = NM_MATCH_SPEC_NO_MATCH;
+ guint hwaddr_len = 0;
+ guint8 hwaddr_bin[NM_UTILS_HWADDR_LEN_MAX];
- g_return_val_if_fail (hwaddr != NULL, NM_MATCH_SPEC_NO_MATCH);
+ nm_assert (nm_utils_hwaddr_valid (hwaddr, -1));
for (iter = specs; iter; iter = g_slist_next (iter)) {
const char *spec_str = iter->data;
@@ -1293,7 +1295,15 @@ nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
else if (except)
continue;
- if (nm_utils_hwaddr_matches (spec_str, -1, hwaddr, -1)) {
+ if (G_UNLIKELY (hwaddr_len == 0)) {
+ hwaddr_len = _nm_utils_hwaddr_length (hwaddr);
+ if (!hwaddr_len)
+ g_return_val_if_reached (NM_MATCH_SPEC_NO_MATCH);
+ if (!nm_utils_hwaddr_aton (hwaddr, hwaddr_bin, hwaddr_len))
+ nm_assert_not_reached ();
+ }
+
+ if (nm_utils_hwaddr_matches (spec_str, -1, hwaddr_bin, hwaddr_len)) {
if (except)
return NM_MATCH_SPEC_NEG_MATCH;
match = NM_MATCH_SPEC_MATCH;