1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-25 16:13:17 +00:00

Silently handle freeaddrinfo(NULL) for compatibility with code which

works on other OSes.  Also avoid unnecessary NULL check, free(NULL) is
valid.

Reviewed by:	bjk (man page), hrs, hselasky, ume
Sponsored by:	Mellanox Technologies
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D12354
This commit is contained in:
Konstantin Belousov 2017-09-14 19:18:24 +00:00
parent 314e8196ea
commit 587e285e97
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323597
2 changed files with 16 additions and 6 deletions

View File

@ -18,7 +18,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd December 21, 2015
.Dd September 13, 2017
.Dt GETADDRINFO 3
.Os
.Sh NAME
@ -351,6 +351,17 @@ pointer should be a
.Li addrinfo
structure created by a call to
.Fn getaddrinfo .
.Sh IMPLEMENTATION NOTES
The behavior of
.Li freeadrinfo(NULL)
is left unspecified by both
.St -susv4
and
.Dv "RFC 3493" .
The current implementation ignores a
.Dv NULL
argument for compatibility with programs that rely on the implementation
details of other operating systems.
.Sh RETURN VALUES
.Fn getaddrinfo
returns zero on success or one of the error codes listed in

View File

@ -35,7 +35,7 @@
* in the source code. This is because RFC2553 is silent about which error
* code must be returned for which situation.
* - freeaddrinfo(NULL). RFC2553 is silent about it. XNET 5.2 says it is
* invalid. current code - SEGV on freeaddrinfo(NULL)
* invalid. Current code accepts NULL to be compatible with other OSes.
*
* Note:
* - The code filters out AFs that are not supported by the kernel,
@ -359,14 +359,13 @@ freeaddrinfo(struct addrinfo *ai)
{
struct addrinfo *next;
do {
while (ai != NULL) {
next = ai->ai_next;
if (ai->ai_canonname)
free(ai->ai_canonname);
free(ai->ai_canonname);
/* no need to free(ai->ai_addr) */
free(ai);
ai = next;
} while (ai);
}
}
static int