|
|
|
|
@ -223,6 +223,20 @@ char *
|
|
|
|
|
ipaddr_ntoa(ip_addr_t *addr) |
|
|
|
|
{ |
|
|
|
|
static char str[16]; |
|
|
|
|
return ipaddr_ntoa_r(addr, str, 16); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used. |
|
|
|
|
* |
|
|
|
|
* @param addr ip address in network order to convert |
|
|
|
|
* @param buf target buffer where the string is stored |
|
|
|
|
* @param buflen length of buf |
|
|
|
|
* @return either pointer to buf which now holds the ASCII |
|
|
|
|
* representation of addr or NULL if buf was too small |
|
|
|
|
*/ |
|
|
|
|
char *ipaddr_ntoa_r(ip_addr_t *addr, char *buf, int buflen) |
|
|
|
|
{ |
|
|
|
|
u32_t s_addr; |
|
|
|
|
char inv[3]; |
|
|
|
|
char *rp; |
|
|
|
|
@ -230,10 +244,11 @@ ipaddr_ntoa(ip_addr_t *addr)
|
|
|
|
|
u8_t rem; |
|
|
|
|
u8_t n; |
|
|
|
|
u8_t i; |
|
|
|
|
int len = 0; |
|
|
|
|
|
|
|
|
|
s_addr = ip4_addr_get_u32(addr); |
|
|
|
|
|
|
|
|
|
rp = str; |
|
|
|
|
rp = buf; |
|
|
|
|
ap = (u8_t *)&s_addr; |
|
|
|
|
for(n = 0; n < 4; n++) { |
|
|
|
|
i = 0; |
|
|
|
|
@ -242,11 +257,18 @@ ipaddr_ntoa(ip_addr_t *addr)
|
|
|
|
|
*ap /= (u8_t)10; |
|
|
|
|
inv[i++] = '0' + rem; |
|
|
|
|
} while(*ap); |
|
|
|
|
while(i--) |
|
|
|
|
while(i--) { |
|
|
|
|
if (len++ >= buflen) { |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
*rp++ = inv[i]; |
|
|
|
|
} |
|
|
|
|
if (len++ >= buflen) { |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
*rp++ = '.'; |
|
|
|
|
ap++; |
|
|
|
|
} |
|
|
|
|
*--rp = 0; |
|
|
|
|
return str; |
|
|
|
|
} |
|
|
|
|
return buf; |
|
|
|
|
} |
|
|
|
|
|