]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
getaddrinfo: Unconditionally use malloc for address list
authorFlorian Weimer <fweimer@redhat.com>
Thu, 11 May 2017 08:01:49 +0000 (10:01 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Thu, 11 May 2017 08:01:49 +0000 (10:01 +0200)
getaddrinfo has to call malloc eventually anyway, so the complexity
of avoiding malloc calls is not worth potential savings.

ChangeLog
sysdeps/posix/getaddrinfo.c

index 0528b5a02f10e196b47b60a959093f2f954c98e9..4231a68860f2447ebef417e366965167b05dc0f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-11  Florian Weimer  <fweimer@redhat.com>
+
+       * sysdeps/posix/getaddrinfo.c (gethosts): Remove malloc_addrmem.
+       (gaih_inet): Likewise.
+
 2017-05-10  Andreas Schwab  <schwab@suse.de>
 
        * nptl/tst-fork1.c: Include <support/test-driver.c>.
index a55cc39be77a220af66a340c4f87d08d6f66087e..dc02b11d6e9dcdd9a7246d7f41125be491887cec 100644 (file)
@@ -278,9 +278,6 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req,
     }                                                                        \
   else if (h != NULL)                                                        \
     {                                                                        \
-      /* Make sure that addrmem can be freed.  */                            \
-      if (!malloc_addrmem)                                                   \
-       addrmem = NULL;                                                       \
       if (!convert_hostent_to_gaih_addrtuple (req, _family,h, &addrmem))      \
        {                                                                     \
          _res.options |= old_res_options & DEPRECATED_RES_USE_INET6;         \
@@ -288,8 +285,6 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req,
          goto free_and_return;                                               \
        }                                                                     \
       *pat = addrmem;                                                        \
-      /* The conversion uses malloc unconditionally.  */                     \
-      malloc_addrmem = true;                                                 \
                                                                              \
       if (localcanon !=        NULL && canon == NULL)                                \
        canon = strdupa (localcanon);                                         \
@@ -447,7 +442,6 @@ gaih_inet (const char *name, const struct gaih_service *service,
     }
 
   bool malloc_name = false;
-  bool malloc_addrmem = false;
   struct gaih_addrtuple *addrmem = NULL;
   bool malloc_canonbuf = false;
   char *canonbuf = NULL;
@@ -633,8 +627,6 @@ gaih_inet (const char *name, const struct gaih_service *service,
                          goto free_and_return;
                        }
                      *pat = addrmem;
-                     /* The conversion uses malloc unconditionally.  */
-                     malloc_addrmem = true;
                    }
                }
              else
@@ -675,21 +667,11 @@ gaih_inet (const char *name, const struct gaih_service *service,
                  bool added_canon = (req->ai_flags & AI_CANONNAME) == 0;
                  char *addrs = air->addrs;
 
-                 if (__libc_use_alloca (alloca_used
-                                        + air->naddrs * sizeof (struct gaih_addrtuple)))
-                   addrmem = alloca_account (air->naddrs
-                                             * sizeof (struct gaih_addrtuple),
-                                             alloca_used);
-                 else
+                 addrmem = calloc (air->naddrs, sizeof (*addrmem));
+                 if (addrmem == NULL)
                    {
-                     addrmem = malloc (air->naddrs
-                                       * sizeof (struct gaih_addrtuple));
-                     if (addrmem == NULL)
-                       {
-                         result = -EAI_MEMORY;
-                         goto free_and_return;
-                       }
-                     malloc_addrmem = true;
+                     result = -EAI_MEMORY;
+                     goto free_and_return;
                    }
 
                  struct gaih_addrtuple *addrfree = addrmem;
@@ -1232,8 +1214,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
  free_and_return:
   if (malloc_name)
     free ((char *) name);
-  if (malloc_addrmem)
-    free (addrmem);
+  free (addrmem);
   if (malloc_canonbuf)
     free (canonbuf);