diff --git a/src/Network/network_types.c b/src/Network/network_types.c index 82f2c12..fe173b9 100644 --- a/src/Network/network_types.c +++ b/src/Network/network_types.c @@ -71,13 +71,16 @@ Maybe knIPV4Endpoint_fromStr(char* endStr, knIPV4Endpoint* endVal){ i32 sep_i = cptr_seekChar(endStr, ':', 0, 48); if(sep_i < 7) safethrow(cptr_concat("can't find ':' in '", endStr, "'"), ;); - char* portBegin = endStr+sep_i+1; + const char* portBegin = endStr+sep_i+1; u64 port = knPort_INVALID; if(sscanf(portBegin, IFWIN("%llu", "%lu"), &port)!=1) safethrow(cptr_concat("can't recognise port number in '", portBegin, "'"), ;) knIPV4Address addr = knIPV4Address_INVALID; - try(knIPV4Address_fromStr(endStr, &addr), _m865, ;); + char* addrStr = cptr_copy(endStr); + addrStr[sep_i] = 0; + try(knIPV4Address_fromStr(addrStr, &addr), _m865, ;); + free(addrStr); *endVal = knIPV4Endpoint_create(addr, port); return MaybeNull; diff --git a/src/Network/network_types.h b/src/Network/network_types.h index f167ddd..24d228a 100644 --- a/src/Network/network_types.h +++ b/src/Network/network_types.h @@ -23,7 +23,7 @@ kt_declare(knIPV4Address); #define knIPV4Address_ANY knIPV4Address_fromBytes(0,0,0,0) #define knIPV4Address_LOOPBACK knIPV4Address_fromBytes(127,0,0,1) #define knIPV4Address_INVALID knIPV4Address_fromBytes(255,255,255,255) -#define knIPV4Address_isINVALID(ADDR) (ADDR.UintBigEndian == ~0) +#define knIPV4Address_isINVALID(ADDR) (ADDR.UintBigEndian == (u32)~0) ///@return Maybe Maybe knIPV4Address_fromStr(char* addrStr, knIPV4Address* addrPtr);