Add inet_ntoa_r, a reentrant version of inet_ntoa. This is

available on a lot of platforms, as well as libkern for years.

Submitted by:	"MQ"
This commit is contained in:
Xin LI 2007-06-11 07:21:21 +00:00
parent 43b0ef8114
commit 0c927cdd8e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=170548
5 changed files with 25 additions and 2 deletions

View File

@ -130,6 +130,7 @@ struct in_addr {
#define inet_cidr_ntop __inet_cidr_ntop #define inet_cidr_ntop __inet_cidr_ntop
#define inet_cidr_pton __inet_cidr_pton #define inet_cidr_pton __inet_cidr_pton
#define inet_ntoa __inet_ntoa #define inet_ntoa __inet_ntoa
#define inet_ntoa_r __inet_ntoa_r
#define inet_pton __inet_pton #define inet_pton __inet_pton
#define inet_ntop __inet_ntop #define inet_ntop __inet_ntop
#define inet_nsap_addr __inet_nsap_addr #define inet_nsap_addr __inet_nsap_addr
@ -147,6 +148,7 @@ uint16_t ntohs(uint16_t);
in_addr_t inet_addr(const char *); in_addr_t inet_addr(const char *);
/*const*/ char *inet_ntoa(struct in_addr); /*const*/ char *inet_ntoa(struct in_addr);
char *inet_ntoa_r(struct in_addr, char *buf);
const char *inet_ntop(int, const void * __restrict, char * __restrict, const char *inet_ntop(int, const void * __restrict, char * __restrict,
socklen_t); socklen_t);
int inet_pton(int, const char * __restrict, void * __restrict); int inet_pton(int, const char * __restrict, void * __restrict);

View File

@ -25,6 +25,8 @@ FBSD_1.0 {
inet_network; inet_network;
__inet_ntoa; __inet_ntoa;
inet_ntoa; inet_ntoa;
__inet_ntoa_r;
inet_ntoa_r;
__inet_ntop; __inet_ntop;
inet_ntop; inet_ntop;
__inet_pton; __inet_pton;

View File

@ -59,11 +59,19 @@ inet_ntoa(struct in_addr in) {
return (ret); return (ret);
} }
char *
inet_ntoa_r(struct in_addr in, char *buf)
{
(void) inet_ntop(AF_INET, &in, buf, sizeof("255.255.255.255"));
return (buf);
}
/* /*
* Weak aliases for applications that use certain private entry points, * Weak aliases for applications that use certain private entry points,
* and fail to include <arpa/inet.h>. * and fail to include <arpa/inet.h>.
*/ */
#undef inet_ntoa #undef inet_ntoa
__weak_reference(__inet_ntoa, inet_ntoa); __weak_reference(__inet_ntoa, inet_ntoa);
__weak_reference(__inet_ntoa_r, inet_ntoa_r);
/*! \file */ /*! \file */

View File

@ -80,7 +80,7 @@ MLINKS+=if_indextoname.3 if_nametoindex.3 if_indextoname.3 if_nameindex.3 \
if_indextoname.3 if_freenameindex.3 if_indextoname.3 if_freenameindex.3
MLINKS+=inet.3 addr.3 inet.3 inet_addr.3 inet.3 inet_aton.3 \ MLINKS+=inet.3 addr.3 inet.3 inet_addr.3 inet.3 inet_aton.3 \
inet.3 inet_lnaof.3 inet.3 inet_makeaddr.3 inet.3 inet_netof.3 \ inet.3 inet_lnaof.3 inet.3 inet_makeaddr.3 inet.3 inet_netof.3 \
inet.3 inet_network.3 inet.3 inet_ntoa.3 \ inet.3 inet_network.3 inet.3 inet_ntoa.3 inet.3 inet_ntoa_r.3\
inet.3 inet_ntop.3 inet.3 inet_pton.3 \ inet.3 inet_ntop.3 inet.3 inet_pton.3 \
inet.3 network.3 inet.3 ntoa.3 inet.3 network.3 inet.3 ntoa.3
MLINKS+= sctp_send.3 sctp_sendx.3 MLINKS+= sctp_send.3 sctp_sendx.3

View File

@ -28,7 +28,7 @@
.\" From: @(#)inet.3 8.1 (Berkeley) 6/4/93 .\" From: @(#)inet.3 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd March 21, 2007 .Dd June 11, 2007
.Dt INET 3 .Dt INET 3
.Os .Os
.Sh NAME .Sh NAME
@ -36,6 +36,7 @@
.Nm inet_addr , .Nm inet_addr ,
.Nm inet_network , .Nm inet_network ,
.Nm inet_ntoa , .Nm inet_ntoa ,
.Nm inet_ntoa_r ,
.Nm inet_ntop , .Nm inet_ntop ,
.Nm inet_pton , .Nm inet_pton ,
.Nm inet_makeaddr , .Nm inet_makeaddr ,
@ -57,6 +58,11 @@
.Fn inet_network "const char *cp" .Fn inet_network "const char *cp"
.Ft char * .Ft char *
.Fn inet_ntoa "struct in_addr in" .Fn inet_ntoa "struct in_addr in"
.Ft char *
.Fo inet_ntoa_r
.Fa "struct in_addr in"
.Fa "char *buf"
.Fc
.Ft const char * .Ft const char *
.Fo inet_ntop .Fo inet_ntop
.Fa "int af" .Fa "int af"
@ -147,6 +153,11 @@ string representing the address in
.Ql .\& .Ql .\&
notation. notation.
The routine The routine
.Fn inet_ntoa_r
is the reentrant version of
.Fn inet_ntoa .
It requires a buffer large enough to contain an IPv4 address.
The routine
.Fn inet_makeaddr .Fn inet_makeaddr
takes an Internet network number and a local takes an Internet network number and a local
network address and constructs an Internet address network address and constructs an Internet address