summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-11-11 14:36:28 +0100
committerGitHub <noreply@github.com>2021-11-11 14:36:28 +0100
commit371264b6c63bc65c27850410781ce7abfc72b200 (patch)
treeb37a91aed0a9ba92b72f927e636ca1f2881d6493
parent126c02a8fd86040ce97e6d0ebb4b282cb6298cf0 (diff)
parentdfa4876c417e2a9935d58100d44d94bb41cd5bfb (diff)
downloadsystemd-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.c13
-rw-r--r--src/basic/ether-addr-util.h15
-rw-r--r--src/udev/udev-builtin-net_id.c2
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);