[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
BSD freeadrinfo() implementation Was: smtp TA's SIGSEGV in getmxrr()
On Thu, Nov 16, 2000 at 07:06:51PM +0200, Matti Aarnio wrote:
> Could you check what BSD libc does in freeaddrinfo() ?
> Is the struct addrinfo block really single one, or is it
> made of multiple segments, which need separate free() calls ?
> (glibc's 'struct addrinfo' is single block where its head has
> the common structure, then it has address(es), and finally
> the ai_canonname buffer -- all of it will be freed when
> that leading structure is freed.)
That one is from FreeBSD 4.2-BETA. Probably standard KAME code.
You see, canonname is in separate chunk.
void
freeaddrinfo(ai)
struct addrinfo *ai;
{
struct addrinfo *next;
do {
next = ai->ai_next;
if (ai->ai_canonname)
free(ai->ai_canonname);
/* no need to free(ai->ai_addr) */
free(ai);
ai = next;
} while (ai);
}
OpenBSD has almost exactly the same code but 'next' structure is called 'p'.