From 44d9d2c668f4fa953730ac2197a0e12715f51d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Thu, 26 May 2022 04:31:32 +0200 Subject: [PATCH] Allow "address_mac_from_ascii()" to parse hex 1-6 bytes (#284) This function is used for BIP MAC, but also for DADR. Some real devices use 2-byte DADR. This can now be expressed e.g. as CA:FE --- src/bacnet/basic/binding/address.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/bacnet/basic/binding/address.c b/src/bacnet/basic/binding/address.c index 91700465..f23158dd 100644 --- a/src/bacnet/basic/binding/address.c +++ b/src/bacnet/basic/binding/address.c @@ -325,21 +325,13 @@ bool address_mac_from_ascii(BACNET_MAC_ADDRESS *mac, const char *arg) } else { c = sscanf(arg, "%2x:%2x:%2x:%2x:%2x:%2x", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); - if (c == 6) { - mac->adr[0] = a[0]; - mac->adr[1] = a[1]; - mac->adr[2] = a[2]; - mac->adr[3] = a[3]; - mac->adr[4] = a[4]; - mac->adr[5] = a[5]; - mac->len = 6; - status = true; - } else if (c == 1) { - if (a[0] <= 255) { - mac->adr[0] = a[0]; - mac->len = 1; - status = true; + + if (c > 0) { + for (int i = 0; i < c; i++) { + mac->adr[i] = a[i]; } + mac->len = c; + status = true; } }