From b9a75fe625a02a9d499aee4a9b68cf1687d509fc Mon Sep 17 00:00:00 2001 From: HimbeerserverDE Date: Tue, 5 Oct 2021 18:03:21 +0200 Subject: [PATCH] Tidy address string parser --- addr.c | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/addr.c b/addr.c index e997257..d675674 100644 --- a/addr.c +++ b/addr.c @@ -8,38 +8,22 @@ DragonnetAddr dragonnet_addr_parse_str(char *str) { - // Reverse string for easier splitting - char buf[1+strlen(str)]; - memset(buf, 0, sizeof buf); - - for (size_t i = 0; i < strlen(str); ++i) - buf[i] = str[strlen(str)-1-i]; - - char *r_port = strtok(buf, ":"); - char r_ip_addr[2+INET6_ADDRSTRLEN]; + DragonnetAddr addr = {0}; - char *tok = NULL; - while (tok != NULL) { - tok = strtok(NULL, ":"); - strcat(r_ip_addr, tok); + size_t colon_i = 0; + for (ssize_t i = strlen(str)-1; i >= 0; --i) { + if (str[i] == ':') { + colon_i = i; + break; + } } - // Reverse strings again - char ip_addr[1+strlen(r_ip_addr)]; - memset(ip_addr, 0, sizeof ip_addr); - - for (size_t i = 0; i < strlen(r_ip_addr); ++i) - ip_addr[i] = r_ip_addr[strlen(r_ip_addr)-1-i]; - - char port[1+strlen(r_port)]; - memset(port, 0, sizeof port); - - for (size_t i = 0; i < strlen(r_port); ++i) - port[i] = r_port[strlen(r_port)-1-i]; - - DragonnetAddr addr = {0}; - strcpy(addr.ip, ip_addr); - strcpy(addr.port, port); + for (size_t i = 0; i < strlen(str); ++i) { + if (i < colon_i) + addr.ip[i] = str[i]; + else if (i > colon_i) + addr.port[i-colon_i-1] = str[i]; + } return addr; } -- 2.44.0