summaryrefslogtreecommitdiff
path: root/src/basic/ether-addr-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/basic/ether-addr-util.c')
-rw-r--r--src/basic/ether-addr-util.c13
1 files changed, 10 insertions, 3 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;
}