2000-09-28  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/posix/getaddrinfo.c (gaih_inet): Handle req->ai_socktype
	correctly.  Reported by Felix von Leitner <leitner@convergence.de>.
This commit is contained in:
Ulrich Drepper 2000-09-29 05:29:24 +00:00
parent f091f00a06
commit 84a4fd3331
3 changed files with 37 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2000-09-28 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Handle req->ai_socktype
correctly. Reported by Felix von Leitner <leitner@convergence.de>.
2000-09-19 H.J. Lu <hjl@gnu.org>
* malloc/malloc.h (__memalign_hook): Fix the parameter order.

View File

@ -30,7 +30,7 @@ tmpnam (char *s)
/* By using two buffers we manage to be thread safe in the case
where S != NULL. */
char tmpbufmem[L_tmpnam];
char tmpbuf = s ?: tmpbufmem;
char *tmpbuf = s ?: tmpbufmem;
/* In the following call we use the buffer pointed to by S if
non-NULL although we don't know the size. But we limit the size

View File

@ -356,6 +356,10 @@ gaih_inet (const char *name, const struct gaih_service *service,
if ((tp->protoflag & GAI_PROTO_NOSERVICE) != 0)
continue;
if (req->ai_socktype != 0
&& req->ai_socktype != tp->socktype)
continue;
newp = (struct gaih_servtuple *)
__alloca (sizeof (struct gaih_servtuple));
@ -382,6 +386,33 @@ gaih_inet (const char *name, const struct gaih_service *service,
st->port = htons (service->num);
}
}
else if (req->ai_socktype || req->ai_protocol)
{
st = __alloca (sizeof (struct gaih_servtuple));
st->next = NULL;
st->socktype = req->ai_socktype;
st->protocol = req->ai_protocol;
st->port = 0;
}
else
{
/* Neither socket type nor protocol is set. Return all socket types
we know about. */
struct gaih_servtuple **lastp = &st;
for (++tp; tp->name != NULL; ++tp)
{
struct gaih_servtuple *newp;
newp = __alloca (sizeof (struct gaih_servtuple));
newp->next = NULL;
newp->socktype = tp->socktype;
newp->protocol = tp->protocol;
newp->port = 0;
*lastp = newp;
lastp = &newp->next;
}
}
if (name != NULL)
{