X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=addr.c;h=370519a9fc20033748a1317ca6af1bd9f5d1f8e9;hb=4e8c6809edc239dcfae1f9333375776e4c488dff;hp=e997257d8474851b450a132bcd0af327006dda9c;hpb=eff3085797a5b229272b7ad2b6a1f85efaf8def9;p=dragonnet.git diff --git a/addr.c b/addr.c index e997257..370519a 100644 --- a/addr.c +++ b/addr.c @@ -1,45 +1,29 @@ +#include #include #include #include #include #include -#include "addr.h" - 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); + size_t ip_addr_i = 0, port_i = 0; + for (size_t i = 0; i < strlen(str); ++i) { + if (i < colon_i && str[i] != '[' && str[i] != ']') + addr.ip[ip_addr_i++] = str[i]; + else if (i > colon_i) + addr.port[port_i++] = str[i]; + } return addr; }