Page MenuHomeFreeBSD

D12354.id.diff
No OneTemporary

D12354.id.diff

Index: head/lib/libc/net/getaddrinfo.3
===================================================================
--- head/lib/libc/net/getaddrinfo.3
+++ head/lib/libc/net/getaddrinfo.3
@@ -18,7 +18,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 21, 2015
+.Dd September 13, 2017
.Dt GETADDRINFO 3
.Os
.Sh NAME
@@ -351,6 +351,17 @@
.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
Index: head/lib/libc/net/getaddrinfo.c
===================================================================
--- head/lib/libc/net/getaddrinfo.c
+++ head/lib/libc/net/getaddrinfo.c
@@ -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 @@
{
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

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 19, 6:40 AM (25 m, 24 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35224492
Default Alt Text
D12354.id.diff (1 KB)

Event Timeline