Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 29 Sep 2000 05:29:24 +0000 (05:29 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 29 Sep 2000 05:29:24 +0000 (05:29 +0000)
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>.

ChangeLog
stdio-common/tmpnam.c
sysdeps/posix/getaddrinfo.c

index e895596..8449304 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index fc30026..e1e11ae 100644 (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
index 7a84cd3..bbd4dd1 100644 (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)
     {