From c7b7305b5938b8a4b8b77f65c459f5c89708c2d0 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 15 Jun 2016 11:23:39 +0200 Subject: core/utils: convert MAC address in nm_match_spec_hwaddr() from string once --- src/nm-core-utils.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/nm-core-utils.c') 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; -- cgit v1.2.1