xref: /aosp_15_r20/external/musl/src/network/freeaddrinfo.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <stdlib.h>
2*c9945492SAndroid Build Coastguard Worker #include <stddef.h>
3*c9945492SAndroid Build Coastguard Worker #include <netdb.h>
4*c9945492SAndroid Build Coastguard Worker #include "lookup.h"
5*c9945492SAndroid Build Coastguard Worker #include "lock.h"
6*c9945492SAndroid Build Coastguard Worker 
freeaddrinfo(struct addrinfo * p)7*c9945492SAndroid Build Coastguard Worker void freeaddrinfo(struct addrinfo *p)
8*c9945492SAndroid Build Coastguard Worker {
9*c9945492SAndroid Build Coastguard Worker 	size_t cnt;
10*c9945492SAndroid Build Coastguard Worker 	for (cnt=1; p->ai_next; cnt++, p=p->ai_next);
11*c9945492SAndroid Build Coastguard Worker 	struct aibuf *b = (void *)((char *)p - offsetof(struct aibuf, ai));
12*c9945492SAndroid Build Coastguard Worker 	b -= b->slot;
13*c9945492SAndroid Build Coastguard Worker 	LOCK(b->lock);
14*c9945492SAndroid Build Coastguard Worker 	if (!(b->ref -= cnt)) free(b);
15*c9945492SAndroid Build Coastguard Worker 	else UNLOCK(b->lock);
16*c9945492SAndroid Build Coastguard Worker }
17