From de5f39acda83d6ec938d481042adbbc2cea1d9f0 Mon Sep 17 00:00:00 2001 From: minexew Date: Fri, 13 Nov 2020 10:12:30 +0100 Subject: [PATCH] Replace inet_ntoa with inet_ntop --- Adam/Net/Dns.HC | 3 ++- Adam/Net/IPv4.HC | 3 ++- Adam/Net/NativeSocket.HC | 15 ++++++++++----- Adam/Net/Netcfg.HC | 3 ++- Demo/Network/UdpListen.HC | 5 ++++- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Adam/Net/Dns.HC b/Adam/Net/Dns.HC index a5ac4fd..0875285 100644 --- a/Adam/Net/Dns.HC +++ b/Adam/Net/Dns.HC @@ -516,9 +516,10 @@ public U0 Host(U8* hostname) { else { addrinfo* curr = res; while (curr) { + U8 buffer[INET_ADDRSTRLEN]; "flags %04Xh, family %d, socktype %d, proto %d, addrlen %d, addr %s\n", curr->ai_flags, curr->ai_family, curr->ai_socktype, curr->ai_protocol, curr->ai_addrlen, - inet_ntoa((curr->ai_addr(sockaddr_in*))->sin_addr); + inet_ntop(AF_INET, &(curr->ai_addr(sockaddr_in*))->sin_addr, buffer, sizeof(buffer)); curr = curr->ai_next; } } diff --git a/Adam/Net/IPv4.HC b/Adam/Net/IPv4.HC index f4af420..034b747 100644 --- a/Adam/Net/IPv4.HC +++ b/Adam/Net/IPv4.HC @@ -132,7 +132,8 @@ static I64 GetEthernetAddressForIP(U32 ip, U8** mac_out) { in_addr in; in.s_addr = htonl(ip); - "$FG,6$IPv4: Failed to resolve address %s\n$FG$", inet_ntoa(in); + U8 buffer[INET_ADDRSTRLEN]; + "$FG,6$IPv4: Failed to resolve address %s\n$FG$", inet_ntop(AF_INET, &in.s_addr, buffer, sizeof(buffer)); return IPV4_EHOST_UNREACHABLE; } } diff --git a/Adam/Net/NativeSocket.HC b/Adam/Net/NativeSocket.HC index 626d97a..a190502 100644 --- a/Adam/Net/NativeSocket.HC +++ b/Adam/Net/NativeSocket.HC @@ -8,6 +8,8 @@ #define INADDR_ANY 0 +#define INET_ADDRSTRLEN 16 + #define NS_INADDRSZ 4 #define SOL_SOCKET 1 @@ -89,11 +91,14 @@ I64 inet_pton(I64 af, U8 *src, U8 *dst) { return 1; } -U8* inet_ntoa(in_addr in) { - static U8 buffer[16]; - StrPrint(buffer, "%d.%d.%d.%d", in.s_addr & 0xff, (in.s_addr >> 8) & 0xff, - (in.s_addr >> 16) & 0xff, (in.s_addr >> 24) & 0xff); - return buffer; +U8* inet_ntop(I64 af, U8* src, U8* dst, I64 size) { + if (af == AF_INET && size >= INET_ADDRSTRLEN) { + StrPrint(dst, "%d.%d.%d.%d", src[0], src[1], src[2], src[3]); + return dst; + } + else { + return 0; + } } class CSocket { diff --git a/Adam/Net/Netcfg.HC b/Adam/Net/Netcfg.HC index ff67d44..ca63d91 100644 --- a/Adam/Net/Netcfg.HC +++ b/Adam/Net/Netcfg.HC @@ -116,7 +116,8 @@ I64 DhcpConfigure() { if (state == CLIENT_REQUEST_ACCEPTED) { in_addr in; in.s_addr = htonl(yiaddr); - "$FG,2$Obtained IP address %s\n$FG$", inet_ntoa(in); + U8 buffer[INET_ADDRSTRLEN]; + "$FG,2$Obtained IP address %s\n$FG$", inet_ntop(AF_INET, &in.s_addr, buffer, sizeof(buffer)); IPv4SetAddress(yiaddr); IPv4SetSubnet(router_ip, subnet_mask); DnsSetResolverIPv4(dns_ip); diff --git a/Demo/Network/UdpListen.HC b/Demo/Network/UdpListen.HC index bf5043f..8b03746 100644 --- a/Demo/Network/UdpListen.HC +++ b/Demo/Network/UdpListen.HC @@ -29,6 +29,7 @@ I64 UdpListen() { while (1) { U8 buffer[2048 + 1]; + U8 addr_buffer[INET_ADDRSTRLEN]; I64 count = recvfrom(sock, buffer, sizeof(buffer) - 1, 0, &addr, sizeof(addr)); if (count == 0) @@ -40,8 +41,10 @@ I64 UdpListen() { else { buffer[count] = 0; + inet_ntop(addr.sin_family, &addr.sin_addr, addr_buffer, sizeof(addr_buffer)); + "$FG,8$Received %d bytes from %s:%d:\n$FG$%s\n", count, - inet_ntoa(addr.sin_addr), ntohs(addr.sin_port), buffer; + addr_buffer, ntohs(addr.sin_port), buffer; } }