diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-11-11 14:36:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-11 14:36:28 +0100 |
commit | 371264b6c63bc65c27850410781ce7abfc72b200 (patch) | |
tree | b37a91aed0a9ba92b72f927e636ca1f2881d6493 | |
parent | 126c02a8fd86040ce97e6d0ebb4b282cb6298cf0 (diff) | |
parent | dfa4876c417e2a9935d58100d44d94bb41cd5bfb (diff) | |
download | systemd-371264b6c63bc65c27850410781ce7abfc72b200.tar.gz |
Merge pull request #21302 from yuwata/udev-drop-colon-from-ID_NET_NAME_MAC
udev: drop colon from ID_NET_NAME_MAC
-rw-r--r-- | src/basic/ether-addr-util.c | 13 | ||||
-rw-r--r-- | src/basic/ether-addr-util.h | 15 | ||||
-rw-r--r-- | src/udev/udev-builtin-net_id.c | 2 |
3 files changed, 24 insertions, 6 deletions
diff --git a/src/basic/ether-addr-util.c b/src/basic/ether-addr-util.c index b97997e1bf..c609ea6ce0 100644 --- a/src/basic/ether-addr-util.c +++ b/src/basic/ether-addr-util.c @@ -11,7 +11,11 @@ #include "macro.h" #include "string-util.h" -char* hw_addr_to_string(const struct hw_addr_data *addr, char buffer[HW_ADDR_TO_STRING_MAX]) { +char *hw_addr_to_string_full( + const struct hw_addr_data *addr, + HardwareAddressToStringFlags flags, + char buffer[static HW_ADDR_TO_STRING_MAX]) { + assert(addr); assert(buffer); assert(addr->length <= HW_ADDR_MAX_SIZE); @@ -19,10 +23,13 @@ char* hw_addr_to_string(const struct hw_addr_data *addr, char buffer[HW_ADDR_TO_ for (size_t i = 0, j = 0; i < addr->length; i++) { buffer[j++] = hexchar(addr->bytes[i] >> 4); buffer[j++] = hexchar(addr->bytes[i] & 0x0f); - buffer[j++] = ':'; + if (!FLAGS_SET(flags, HW_ADDR_TO_STRING_NO_COLON)) + buffer[j++] = ':'; } - buffer[addr->length > 0 ? addr->length * 3 - 1 : 0] = '\0'; + buffer[addr->length == 0 || FLAGS_SET(flags, HW_ADDR_TO_STRING_NO_COLON) ? + addr->length * 2 : + addr->length * 3 - 1] = '\0'; return buffer; } diff --git a/src/basic/ether-addr-util.h b/src/basic/ether-addr-util.h index b2a3f0d58c..bee1fc9c7a 100644 --- a/src/basic/ether-addr-util.h +++ b/src/basic/ether-addr-util.h @@ -31,13 +31,24 @@ static inline int parse_hw_addr(const char *s, struct hw_addr_data *ret) { } int parse_ether_addr(const char *s, struct ether_addr *ret); +typedef enum HardwareAddressToStringFlags { + HW_ADDR_TO_STRING_NO_COLON = 1 << 0, +} HardwareAddressToStringFlags; + #define HW_ADDR_TO_STRING_MAX (3*HW_ADDR_MAX_SIZE) -char* hw_addr_to_string(const struct hw_addr_data *addr, char buffer[HW_ADDR_TO_STRING_MAX]); +char *hw_addr_to_string_full( + const struct hw_addr_data *addr, + HardwareAddressToStringFlags flags, + char buffer[static HW_ADDR_TO_STRING_MAX]); +static inline char *hw_addr_to_string(const struct hw_addr_data *addr, char buffer[static HW_ADDR_TO_STRING_MAX]) { + return hw_addr_to_string_full(addr, 0, buffer); +} /* Note: the lifetime of the compound literal is the immediately surrounding block, * see C11 ยง6.5.2.5, and * https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */ -#define HW_ADDR_TO_STR(hw_addr) hw_addr_to_string((hw_addr), (char[HW_ADDR_TO_STRING_MAX]){}) +#define HW_ADDR_TO_STR_FULL(hw_addr, flags) hw_addr_to_string_full((hw_addr), flags, (char[HW_ADDR_TO_STRING_MAX]){}) +#define HW_ADDR_TO_STR(hw_addr) HW_ADDR_TO_STR_FULL(hw_addr, 0) #define HW_ADDR_NULL ((const struct hw_addr_data){}) diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index c52f796361..4d16591750 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -957,7 +957,7 @@ static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *arg if (names_mac(dev, &info) >= 0) { char str[ALTIFNAMSIZ]; - xsprintf(str, "%s%s", prefix, HW_ADDR_TO_STR(&info.hw_addr)); + xsprintf(str, "%s%s", prefix, HW_ADDR_TO_STR_FULL(&info.hw_addr, HW_ADDR_TO_STRING_NO_COLON)); udev_builtin_add_property(dev, test, "ID_NET_NAME_MAC", str); ieee_oui(dev, &info, test); |