From 9a73db17d5e90e28d36e2b1adf51a96afaa7cc79 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Tue, 11 Jun 2013 11:20:44 -0300 Subject: [PATCH] libnm-util: add nm_utils_hwaddr_valid() --- libnm-util/libnm-util.ver | 1 + libnm-util/nm-utils.c | 25 +++++++++++++++++++++++++ libnm-util/nm-utils.h | 2 ++ 3 files changed, 28 insertions(+) diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver index 44d18d2ad1..82700b20f1 100644 --- a/libnm-util/libnm-util.ver +++ b/libnm-util/libnm-util.ver @@ -546,6 +546,7 @@ global: nm_utils_hwaddr_ntoa; nm_utils_hwaddr_ntoa_len; nm_utils_hwaddr_type; + nm_utils_hwaddr_valid; nm_utils_iface_valid_name; nm_utils_init; nm_utils_ip4_addresses_from_gvalue; diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c index f3f2e5adfd..29b08c02b9 100644 --- a/libnm-util/nm-utils.c +++ b/libnm-util/nm-utils.c @@ -2063,6 +2063,31 @@ nm_utils_hwaddr_ntoa_len (gconstpointer addr, gsize length) return g_string_free (out, FALSE); } +/** + * nm_utils_hwaddr_valid: + * @asc: the ASCII representation of a hardware address + * + * Parses @asc to see if it is a valid hardware address of some type. + * + * Return value: %TRUE if @asc appears to be a valid hardware address + * of some type, %FALSE if not. + * + * Since: 0.9.10 + */ +gboolean +nm_utils_hwaddr_valid (const char *asc) +{ + guint8 buf[NM_UTILS_HWADDR_LEN_MAX]; + int in_len = strlen (asc), out_len; + + if ((in_len + 1) % 3 != 0) + return FALSE; + out_len = (in_len + 1) / 3; + if (out_len > NM_UTILS_HWADDR_LEN_MAX) + return FALSE; + return nm_utils_hwaddr_aton_len (asc, buf, out_len) != NULL; +} + /** * nm_utils_bin2hexstr: * @bytes: an array of bytes diff --git a/libnm-util/nm-utils.h b/libnm-util/nm-utils.h index f77f30e513..25f4a5609e 100644 --- a/libnm-util/nm-utils.h +++ b/libnm-util/nm-utils.h @@ -144,6 +144,8 @@ guint8 *nm_utils_hwaddr_aton (const char *asc, int type, gpointer buffer); char *nm_utils_hwaddr_ntoa_len (gconstpointer addr, gsize length); guint8 *nm_utils_hwaddr_aton_len (const char *asc, gpointer buffer, gsize length); +gboolean nm_utils_hwaddr_valid (const char *asc); + char *nm_utils_bin2hexstr (const char *bytes, int len, int final_len); int nm_utils_hex2byte (const char *hex); char *nm_utils_hexstr2bin (const char *hex, size_t len);