diff options
author | Thomas Haller <thaller@redhat.com> | 2016-06-15 11:23:39 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-06-30 08:29:54 +0200 |
commit | c7b7305b5938b8a4b8b77f65c459f5c89708c2d0 (patch) | |
tree | 177210c704fea827306c17dff620d3f9c290bb44 /src/nm-core-utils.c | |
parent | fc527a237cc9619a12e8abe14757087487b2e588 (diff) | |
download | NetworkManager-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.c | 14 |
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; |