mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-01 04:12:07 +00:00
Added reentrant versions of inet_ntoa/ipaddr_ntoa inet_ntoa_r/ipaddr_ntoa_r
This commit is contained in:
parent
ececc3ca45
commit
79e6b4c819
@ -20,7 +20,11 @@ HISTORY
|
|||||||
++ New features:
|
++ New features:
|
||||||
|
|
||||||
2010-02-08: Simon Goldschmidt
|
2010-02-08: Simon Goldschmidt
|
||||||
* netif.h: Added
|
* inet.h, ip_addr.c/.h: Added reentrant versions of inet_ntoa/ipaddr_ntoa
|
||||||
|
inet_ntoa_r/ipaddr_ntoa_r
|
||||||
|
|
||||||
|
2010-02-08: Simon Goldschmidt
|
||||||
|
* netif.h: Added netif_s/get_igmp_mac_filter() macros
|
||||||
|
|
||||||
2010-02-05: Simon Goldschmidt
|
2010-02-05: Simon Goldschmidt
|
||||||
* netif.h: Added function-like macros to get/set the hostname on a netif
|
* netif.h: Added function-like macros to get/set the hostname on a netif
|
||||||
|
@ -223,6 +223,20 @@ char *
|
|||||||
ipaddr_ntoa(ip_addr_t *addr)
|
ipaddr_ntoa(ip_addr_t *addr)
|
||||||
{
|
{
|
||||||
static char str[16];
|
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;
|
u32_t s_addr;
|
||||||
char inv[3];
|
char inv[3];
|
||||||
char *rp;
|
char *rp;
|
||||||
@ -230,10 +244,11 @@ ipaddr_ntoa(ip_addr_t *addr)
|
|||||||
u8_t rem;
|
u8_t rem;
|
||||||
u8_t n;
|
u8_t n;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
s_addr = ip4_addr_get_u32(addr);
|
s_addr = ip4_addr_get_u32(addr);
|
||||||
|
|
||||||
rp = str;
|
rp = buf;
|
||||||
ap = (u8_t *)&s_addr;
|
ap = (u8_t *)&s_addr;
|
||||||
for(n = 0; n < 4; n++) {
|
for(n = 0; n < 4; n++) {
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -242,11 +257,18 @@ ipaddr_ntoa(ip_addr_t *addr)
|
|||||||
*ap /= (u8_t)10;
|
*ap /= (u8_t)10;
|
||||||
inv[i++] = '0' + rem;
|
inv[i++] = '0' + rem;
|
||||||
} while(*ap);
|
} while(*ap);
|
||||||
while(i--)
|
while(i--) {
|
||||||
|
if (len++ >= buflen) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
*rp++ = inv[i];
|
*rp++ = inv[i];
|
||||||
|
}
|
||||||
|
if (len++ >= buflen) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
*rp++ = '.';
|
*rp++ = '.';
|
||||||
ap++;
|
ap++;
|
||||||
}
|
}
|
||||||
*--rp = 0;
|
*--rp = 0;
|
||||||
return str;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@ -96,6 +96,7 @@ struct in_addr {
|
|||||||
#define inet_addr(cp) ipaddr_addr(cp)
|
#define inet_addr(cp) ipaddr_addr(cp)
|
||||||
#define inet_aton(cp, addr) ipaddr_aton(cp, (ip_addr_t*)addr)
|
#define inet_aton(cp, addr) ipaddr_aton(cp, (ip_addr_t*)addr)
|
||||||
#define inet_ntoa(addr) ipaddr_ntoa((ip_addr_t*)&(addr))
|
#define inet_ntoa(addr) ipaddr_ntoa((ip_addr_t*)&(addr))
|
||||||
|
#define inet_ntoa_r(addr, buf, buflen) ipaddr_ntoa_r((ip_addr_t*)&(addr), buf, buflen)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -204,6 +204,7 @@ u32_t ipaddr_addr(const char *cp);
|
|||||||
int ipaddr_aton(const char *cp, ip_addr_t *addr);
|
int ipaddr_aton(const char *cp, ip_addr_t *addr);
|
||||||
/** returns ptr to static buffer; not reentrant! */
|
/** returns ptr to static buffer; not reentrant! */
|
||||||
char *ipaddr_ntoa(ip_addr_t *addr);
|
char *ipaddr_ntoa(ip_addr_t *addr);
|
||||||
|
char *ipaddr_ntoa_r(ip_addr_t *addr, char *buf, int buflen);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user