diff options
author | Florian Weimer <fweimer@redhat.com> | 2017-05-11 10:01:49 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2017-05-11 10:01:49 +0200 |
commit | 46ce8881ade788db56079622f47f648d4aaa003b (patch) | |
tree | 3d162805ea88b3d23c70c6a5381f99ab9480c000 | |
parent | faa9066c4b4a758bb97a8a38173630d821bb6db5 (diff) | |
download | glibc-46ce8881ade788db56079622f47f648d4aaa003b.tar.gz glibc-46ce8881ade788db56079622f47f648d4aaa003b.tar.xz glibc-46ce8881ade788db56079622f47f648d4aaa003b.zip |
getaddrinfo: Unconditionally use malloc for address list
getaddrinfo has to call malloc eventually anyway, so the complexity of avoiding malloc calls is not worth potential savings.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/posix/getaddrinfo.c | 29 |
2 files changed, 10 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog index 0528b5a02f..4231a68860 100644 --- 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>. diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index a55cc39be7..dc02b11d6e 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -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); |