aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-11-27 22:58:34 +0000
committerUlrich Drepper <drepper@redhat.com>2005-11-27 22:58:34 +0000
commit29546dd9b4047c709ceb4f898907f252e9b2b688 (patch)
tree02b45c953917b8c81d966eb73a38992401709aac
parent9d88758aab128725f30f3bc3352f8f5bf96b8569 (diff)
downloadglibc-29546dd9b4047c709ceb4f898907f252e9b2b688.tar
glibc-29546dd9b4047c709ceb4f898907f252e9b2b688.tar.gz
glibc-29546dd9b4047c709ceb4f898907f252e9b2b688.tar.bz2
glibc-29546dd9b4047c709ceb4f898907f252e9b2b688.zip
(gaih_inet): Avoid some code duplication.
-rw-r--r--sysdeps/posix/getaddrinfo.c79
1 files changed, 29 insertions, 50 deletions
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index 81a56a0794..b85b68c925 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -393,6 +393,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
}
}
+ int port = 0;
if (service != NULL)
{
if ((tp->protoflag & GAI_PROTO_NOSERVICE) != 0)
@@ -445,63 +446,41 @@ gaih_inet (const char *name, const struct gaih_service *service,
}
else
{
- if (req->ai_socktype || req->ai_protocol)
- {
- st = __alloca (sizeof (struct gaih_servtuple));
- st->next = NULL;
- st->socktype = tp->socktype;
- st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY)
- ? req->ai_protocol : tp->protocol);
- st->port = htons (service->num);
- }
- else
- {
- /* Neither socket type nor protocol is set. Return all
- socket types we know about. */
- struct gaih_servtuple **lastp = &st;
- for (tp = gaih_inet_typeproto + 1; tp->name[0]; ++tp)
- if ((tp->protoflag & GAI_PROTO_NOSERVICE) == 0)
- {
- struct gaih_servtuple *newp;
-
- newp = __alloca (sizeof (struct gaih_servtuple));
- newp->next = NULL;
- newp->socktype = tp->socktype;
- newp->protocol = tp->protocol;
- newp->port = htons (service->num);
-
- *lastp = newp;
- lastp = &newp->next;
- }
- }
+ port = htons (service->num);
+ goto got_port;
}
}
- else if (req->ai_socktype || req->ai_protocol)
- {
- st = __alloca (sizeof (struct gaih_servtuple));
- st->next = NULL;
- st->socktype = tp->socktype;
- st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY)
- ? req->ai_protocol : tp->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[0]; ++tp)
+ got_port:
+
+ if (req->ai_socktype || req->ai_protocol)
+ {
+ st = __alloca (sizeof (struct gaih_servtuple));
+ st->next = NULL;
+ st->socktype = tp->socktype;
+ st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY)
+ ? req->ai_protocol : tp->protocol);
+ st->port = port;
+ }
+ else
{
- struct gaih_servtuple *newp;
+ /* Neither socket type nor protocol is set. Return all socket types
+ we know about. */
+ struct gaih_servtuple **lastp = &st;
+ for (++tp; tp->name[0]; ++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;
+ newp = __alloca (sizeof (struct gaih_servtuple));
+ newp->next = NULL;
+ newp->socktype = tp->socktype;
+ newp->protocol = tp->protocol;
+ newp->port = port;
- *lastp = newp;
- lastp = &newp->next;
+ *lastp = newp;
+ lastp = &newp->next;
+ }
}
}