diff options
author | Sam James <sam@gentoo.org> | 2023-11-25 05:07:30 +0000 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-11-25 05:07:30 +0000 |
commit | 3916c5f320bb2e37603c4df389aefd9c371eb5fd (patch) | |
tree | e16cc8ac5f3219bae730834f2d23a360fa48dc88 /net-dns | |
parent | dev-libs/libxml2: drop 2.12.0 (diff) | |
download | gentoo-3916c5f320bb2e37603c4df389aefd9c371eb5fd.tar.gz gentoo-3916c5f320bb2e37603c4df389aefd9c371eb5fd.tar.bz2 gentoo-3916c5f320bb2e37603c4df389aefd9c371eb5fd.zip |
net-dns/c-ares: drop 1.20.1, 1.22.0, 1.22.0-r1
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'net-dns')
-rw-r--r-- | net-dns/c-ares/Manifest | 4 | ||||
-rw-r--r-- | net-dns/c-ares/c-ares-1.20.1.ebuild | 88 | ||||
-rw-r--r-- | net-dns/c-ares/c-ares-1.22.0-r1.ebuild | 109 | ||||
-rw-r--r-- | net-dns/c-ares/c-ares-1.22.0.ebuild | 104 | ||||
-rw-r--r-- | net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup-perf.patch | 403 | ||||
-rw-r--r-- | net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup.patch | 109 |
6 files changed, 0 insertions, 817 deletions
diff --git a/net-dns/c-ares/Manifest b/net-dns/c-ares/Manifest index 93f5a36b42fa..790088c7b050 100644 --- a/net-dns/c-ares/Manifest +++ b/net-dns/c-ares/Manifest @@ -1,10 +1,6 @@ DIST c-ares-1.19.1.tar.gz 1579100 BLAKE2B 4b6c9593edb1a91ab76d54ddacb1cd5d67006d5e628ea1f3289f54e9360be32abeb5d8fc7d23e193feab3e7928e8efde82757eb12fe217dc92ed0d9132bedf5d SHA512 466a94efda626e815a6ef7a890637056339f883d549ea6055e289fd8cd2391130e5682c905c0fb3bd7e955af7f6deb793562c170eb0ee066a4a62085a82ba470 DIST c-ares-1.19.1.tar.gz.asc 488 BLAKE2B 9c47d7b3e67d9a2bd1e332912d21d20ca591fc34f81707c18a4615ea14ba2da00146d1998250a5f4dd2a0b1c04f9bd2013d4940ac734674c0bdff6815985e19d SHA512 1b204ab1a667af1326be4b7c62c0919aacd447a2e00efea4b8ef2ec9f2b13ffb236a836ff8953b0b3359727faf3fb8cfcd71d0b06a0e533a09f9e9ea66024f4e -DIST c-ares-1.20.1.tar.gz 1599175 BLAKE2B 44d160e04dcbd78f0ad7c1f2eb3f34ff07017fd9b5c4bc12b81b123022297adccfff45f43630f8c73afdfd9424ff6ee9fb96c627405ec486c8d78bb0c7e518ca SHA512 83400fb276ebcf16dfe6f43d56ca87839d132b5a0544420eda9fa148eb85468b3f215593fcefc2a7a3a8ed8b0d4ef093ed99616a4e466b01f6913934240539e4 -DIST c-ares-1.20.1.tar.gz.asc 488 BLAKE2B 5a6a9e60dd3fb675cafbbf60c7b6c75b385786d1171afa9b1effcdf0187dbd044c93f6a0e87f685b5fdf2992892fdd760e2dc3246c196d011c157fc88bbb5ab4 SHA512 f0622f6df863c599028f20462fb6f5604f30243f51f382c8430abe2afbf3583cb6ffe527f0a38e646700d753d90fa9a2a4d197a7540b2fc9bed1d779fe3b43df DIST c-ares-1.21.0.tar.gz 1623742 BLAKE2B 708933603dfc6c0286e798b3244eb9d8bce500acb915a255b82e00133509e5c2ceaad6b9b4cd081fcd9193b64fdb72e4e7ff6deeca8eb1744124ab9239cacac0 SHA512 c526b0a28d8ea1c6a53215dfd52e8250c968513a667c5414459d97d46288da7e7a2193d757fc78225e56c6684b3d30e756dd3e5a31917e996c871773a34892ea DIST c-ares-1.21.0.tar.gz.asc 488 BLAKE2B b1985393dfc147abe729b5622c4c92585072173a169947caf1a9521d341dac2119e34691b96e31716df66a251dbba3a5284cddd4c47af0d0bd91e20576d5671e SHA512 0e75e51ebf97ec4ed0880811ddb60f741ea190c2e63011aad9a4233fe4e2481d0c660d401a5cf596fe257930365a366082c2b5faa34bb7b346d147cfc51392ff -DIST c-ares-1.22.0.tar.gz 1662808 BLAKE2B 0f70c2cfe9e5076eaa97262a9b34d915d755618dc89884a2d743a0d47827bb99d2a1d1bb655aff92d8c85a19a4420a1e685d91f82b9f7a55cc2feb5daa27fd41 SHA512 b84b774090bbeae7ad2eabeb223a12474e42f2efcc4e2209fcda260b1fe29337549eb7827eb7f75475fade65b6e1ab719abdae0ff543309c1914aa9cef65cd01 -DIST c-ares-1.22.0.tar.gz.asc 488 BLAKE2B 93d378c92aef3ef1bfedc1d09ffb171c735c029c1d0440ea4e154db14b14d7eb68166fb00172dee20a826c39bd112bdc80b66ac23e7eb8bc6c47f0fe8f6fa412 SHA512 83c99f7d67a403628e407814c6829fb6ca14c102eec85bf9d3bb628677b3cba61343ca5d4fb06d95f2fa7df55681f3b1aebba2997b91c9156688075a445a1485 DIST c-ares-1.22.1.tar.gz 1665059 BLAKE2B 720d0efdbcb591cf9a8b99a60f24c9c720eee4283608d12af45890f3a534e334487c9ce9eeaaed992c78ce5ff683e57ec08f5a3ba84efa818e1e39fc1ad91ed6 SHA512 9b9aa3ff48a76e7d1464f5fc644e736d09898b2245c81292c510d1a3b967dca13e4711bab564947ec99c118094c385d12a92ddd767a84153fdd21df03da75349 DIST c-ares-1.22.1.tar.gz.asc 488 BLAKE2B a3723365cd733ca4551b039038baeb94b4e53dda3dac1c479606c07fbc09b8ea0ebbd83b26ede8e0a1782ac06dfb62b53472e0024239175d763fb1f3e6834b50 SHA512 37ad0a9c72e7a98bf83e4be107040c3223880a784e01a917dbe72861e2f4ca692100d2b8543be3c960d21fc8d3d57a7075f99ba6de61366a93783cea07cc9f76 diff --git a/net-dns/c-ares/c-ares-1.20.1.ebuild b/net-dns/c-ares/c-ares-1.20.1.ebuild deleted file mode 100644 index 3f0ca563d3b2..000000000000 --- a/net-dns/c-ares/c-ares-1.20.1.ebuild +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright 1999-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/danielstenberg.asc -inherit edo multilib-minimal verify-sig - -DESCRIPTION="C library that resolves names asynchronously" -HOMEPAGE="https://c-ares.org/" -SRC_URI=" - https://c-ares.org/download/${P}.tar.gz - verify-sig? ( https://c-ares.org/download/${P}.tar.gz.asc ) -" - -# ISC for lib/{bitncmp.c,inet_ntop.c,inet_net_pton.c} (bug #912405) -LICENSE="MIT ISC" -# Subslot = SONAME of libcares.so.2 -SLOT="0/2" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" -IUSE="static-libs test" -RESTRICT="!test? ( test )" - -BDEPEND="verify-sig? ( sec-keys/openpgp-keys-danielstenberg )" - -DOCS=( AUTHORS CHANGES NEWS README.md RELEASE-NOTES TODO ) - -MULTILIB_WRAPPED_HEADERS=( - /usr/include/ares_build.h -) - -QA_CONFIG_IMPL_DECL_SKIP=( - # Checking for obsolete headers - malloc - calloc - free - - # Non-existent on Linux - closesocket - CloseSocket - ioctlsocket - bitncmp -) - -multilib_src_configure() { - local myeconfargs=( - --enable-nonblocking - --enable-symbol-hiding - $(use_enable static-libs static) - $(use_enable test tests) - ) - - # Needed for running unit tests only - # Violates sandbox and tests pass fine without - export ax_cv_uts_namespace=no - export ax_cv_user_namespace=no - ECONF_SOURCE="${S}" econf "${myeconfargs[@]}" -} - -multilib_src_test() { - cd "${BUILD_DIR}"/test || die - - # We're skipping the "real" network tests with the filter - # see https://github.com/c-ares/c-ares/tree/main/test - local network_tests=( - # Most live tests have Live in the name - *Live* - # These don't but are still in ares-test-live.cc => live - *GetTCPSock* - *TimeoutValue* - *GetSock* - *GetSock_virtualized* - *VerifySocketFunctionCallback* - # Seems flaky, even run manually - # https://github.com/c-ares/c-ares/commit/9e542a8839f81c990bb0dff14beeaf9aa6bcc18d - *MockUDPMaxQueriesTest.GetHostByNameParallelLookups* - ) - - # The format for disabling test1, test2, and test3 looks like: - # -test1:test2:test3 - edo ./arestest --gtest_filter=-$(echo $(IFS=:; echo "${network_tests[*]}")) -} - -multilib_src_install_all() { - einstalldocs - - find "${ED}" -name "*.la" -delete || die -} diff --git a/net-dns/c-ares/c-ares-1.22.0-r1.ebuild b/net-dns/c-ares/c-ares-1.22.0-r1.ebuild deleted file mode 100644 index 5356eceefd2a..000000000000 --- a/net-dns/c-ares/c-ares-1.22.0-r1.ebuild +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright 1999-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/danielstenberg.asc -inherit edo multilib-minimal verify-sig - -DESCRIPTION="C library that resolves names asynchronously" -HOMEPAGE="https://c-ares.org/" -SRC_URI=" - https://c-ares.org/download/${P}.tar.gz - verify-sig? ( https://c-ares.org/download/${P}.tar.gz.asc ) -" - -# ISC for lib/{bitncmp.c,inet_ntop.c,inet_net_pton.c} (bug #912405) -LICENSE="MIT ISC" -# Subslot = SONAME of libcares.so.2 -SLOT="0/2" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" -IUSE="static-libs test" -RESTRICT="!test? ( test )" - -BDEPEND="verify-sig? ( sec-keys/openpgp-keys-danielstenberg )" - -DOCS=( AUTHORS CHANGES NEWS README.md RELEASE-NOTES TODO ) - -PATCHES=( - "${FILESDIR}"/${P}-hosts-lookup.patch - "${FILESDIR}"/${P}-hosts-lookup-perf.patch -) - -MULTILIB_WRAPPED_HEADERS=( - /usr/include/ares_build.h -) - -QA_CONFIG_IMPL_DECL_SKIP=( - # Checking for obsolete headers - malloc - calloc - free - - # Non-existent on Linux - closesocket - CloseSocket - ioctlsocket - bitncmp -) - -multilib_src_configure() { - # These configure tests take a long time to run. The args one runs in O(n^4). - export ac_cv_func_getnameinfo='yes' - export ac_cv_func_recvfrom='yes' - export ac_cv_func_recv='yes' - export ac_cv_func_send='yes' - export curl_cv_func_getnameinfo_args='const struct sockaddr *,socklen_t,size_t,int' - export curl_cv_func_recv_args='int,void *,size_t,int,int' - export curl_cv_func_recvfrom_args='int,void *,size_t,int,struct sockaddr *,socklen_t *,int' - export curl_cv_func_send_args='int,const void *,size_t,int,int' - export curl_cv_getnameinfo='yes' - export curl_cv_recv='yes' - export curl_cv_recvfrom='yes' - export curl_cv_send='yes' - - local myeconfargs=( - --cache-file="${BUILD_DIR}"/config.cache - - --enable-nonblocking - --enable-symbol-hiding - $(use_enable static-libs static) - $(use_enable test tests) - ) - - # Needed for running unit tests only - # Violates sandbox and tests pass fine without - export ax_cv_uts_namespace=no - export ax_cv_user_namespace=no - ECONF_SOURCE="${S}" econf "${myeconfargs[@]}" -} - -multilib_src_test() { - cd "${BUILD_DIR}"/test || die - - # We're skipping the "real" network tests with the filter - # see https://github.com/c-ares/c-ares/tree/main/test - local network_tests=( - # Most live tests have Live in the name - *Live* - # These don't but are still in ares-test-live.cc => live - *GetTCPSock* - *TimeoutValue* - *GetSock* - *GetSock_virtualized* - *VerifySocketFunctionCallback* - # Seems flaky, even run manually - # https://github.com/c-ares/c-ares/commit/9e542a8839f81c990bb0dff14beeaf9aa6bcc18d - *MockUDPMaxQueriesTest.GetHostByNameParallelLookups* - ) - - # The format for disabling test1, test2, and test3 looks like: - # -test1:test2:test3 - edo ./arestest --gtest_filter=-$(echo $(IFS=:; echo "${network_tests[*]}")) -} - -multilib_src_install_all() { - einstalldocs - - find "${ED}" -name "*.la" -delete || die -} diff --git a/net-dns/c-ares/c-ares-1.22.0.ebuild b/net-dns/c-ares/c-ares-1.22.0.ebuild deleted file mode 100644 index 8fbe8498c19b..000000000000 --- a/net-dns/c-ares/c-ares-1.22.0.ebuild +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright 1999-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/danielstenberg.asc -inherit edo multilib-minimal verify-sig - -DESCRIPTION="C library that resolves names asynchronously" -HOMEPAGE="https://c-ares.org/" -SRC_URI=" - https://c-ares.org/download/${P}.tar.gz - verify-sig? ( https://c-ares.org/download/${P}.tar.gz.asc ) -" - -# ISC for lib/{bitncmp.c,inet_ntop.c,inet_net_pton.c} (bug #912405) -LICENSE="MIT ISC" -# Subslot = SONAME of libcares.so.2 -SLOT="0/2" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" -IUSE="static-libs test" -RESTRICT="!test? ( test )" - -BDEPEND="verify-sig? ( sec-keys/openpgp-keys-danielstenberg )" - -DOCS=( AUTHORS CHANGES NEWS README.md RELEASE-NOTES TODO ) - -MULTILIB_WRAPPED_HEADERS=( - /usr/include/ares_build.h -) - -QA_CONFIG_IMPL_DECL_SKIP=( - # Checking for obsolete headers - malloc - calloc - free - - # Non-existent on Linux - closesocket - CloseSocket - ioctlsocket - bitncmp -) - -multilib_src_configure() { - # These configure tests take a long time to run. The args one runs in O(n^4). - export ac_cv_func_getnameinfo='yes' - export ac_cv_func_recvfrom='yes' - export ac_cv_func_recv='yes' - export ac_cv_func_send='yes' - export curl_cv_func_getnameinfo_args='const struct sockaddr *,socklen_t,size_t,int' - export curl_cv_func_recv_args='int,void *,size_t,int,int' - export curl_cv_func_recvfrom_args='int,void *,size_t,int,struct sockaddr *,socklen_t *,int' - export curl_cv_func_send_args='int,const void *,size_t,int,int' - export curl_cv_getnameinfo='yes' - export curl_cv_recv='yes' - export curl_cv_recvfrom='yes' - export curl_cv_send='yes' - - local myeconfargs=( - --cache-file="${BUILD_DIR}"/config.cache - - --enable-nonblocking - --enable-symbol-hiding - $(use_enable static-libs static) - $(use_enable test tests) - ) - - # Needed for running unit tests only - # Violates sandbox and tests pass fine without - export ax_cv_uts_namespace=no - export ax_cv_user_namespace=no - ECONF_SOURCE="${S}" econf "${myeconfargs[@]}" -} - -multilib_src_test() { - cd "${BUILD_DIR}"/test || die - - # We're skipping the "real" network tests with the filter - # see https://github.com/c-ares/c-ares/tree/main/test - local network_tests=( - # Most live tests have Live in the name - *Live* - # These don't but are still in ares-test-live.cc => live - *GetTCPSock* - *TimeoutValue* - *GetSock* - *GetSock_virtualized* - *VerifySocketFunctionCallback* - # Seems flaky, even run manually - # https://github.com/c-ares/c-ares/commit/9e542a8839f81c990bb0dff14beeaf9aa6bcc18d - *MockUDPMaxQueriesTest.GetHostByNameParallelLookups* - ) - - # The format for disabling test1, test2, and test3 looks like: - # -test1:test2:test3 - edo ./arestest --gtest_filter=-$(echo $(IFS=:; echo "${network_tests[*]}")) -} - -multilib_src_install_all() { - einstalldocs - - find "${ED}" -name "*.la" -delete || die -} diff --git a/net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup-perf.patch b/net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup-perf.patch deleted file mode 100644 index 4830c9cb97e9..000000000000 --- a/net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup-perf.patch +++ /dev/null @@ -1,403 +0,0 @@ -https://github.com/c-ares/c-ares/commit/2724f0e26c8875ce194d68dc15840e9435a1c805 - -From 2724f0e26c8875ce194d68dc15840e9435a1c805 Mon Sep 17 00:00:00 2001 -From: Brad House <brad@brad-house.com> -Date: Thu, 16 Nov 2023 15:20:48 -0500 -Subject: [PATCH] optimize: large /etc/hosts files reading - -profiling found some hot paths that could be optimized to reduce -insert times into the cache. - -Fix By: Brad House (@bradh352) ---- a/src/lib/ares__hosts_file.c -+++ b/src/lib/ares__hosts_file.c -@@ -313,81 +313,51 @@ static ares_hosts_file_t *ares__hosts_file_create(const char *filename) - return NULL; - } - --static ares_bool_t ares__hosts_entry_ipaddr_exists(ares_hosts_entry_t *entry, -- const char *ipaddr) --{ -- ares__llist_node_t *node; -- -- for (node = ares__llist_node_first(entry->ips); node != NULL; -- node = ares__llist_node_next(node)) { -- const char *myaddr = ares__llist_node_val(node); -- if (strcmp(myaddr, ipaddr) == 0) { -- return ARES_TRUE; -- } -- } -- -- return ARES_FALSE; --} -- --static ares_bool_t ares__hosts_entry_host_exists(ares_hosts_entry_t *entry, -- const char *host) --{ -- ares__llist_node_t *node; -- -- for (node = ares__llist_node_first(entry->ips); node != NULL; -- node = ares__llist_node_next(node)) { -- const char *myhost = ares__llist_node_val(node); -- if (strcasecmp(myhost, host) == 0) { -- return ARES_TRUE; -- } -- } -- -- return ARES_FALSE; --} -+typedef enum { -+ ARES_MATCH_NONE = 0, -+ ARES_MATCH_IPADDR = 1, -+ ARES_MATCH_HOST = 2 -+} ares_hosts_file_match_t; - --static ares_status_t ares__hosts_file_merge_entry(ares_hosts_entry_t *existing, -- ares_hosts_entry_t *entry) -+static ares_status_t ares__hosts_file_merge_entry(ares_hosts_file_t *hf, -+ ares_hosts_entry_t *existing, -+ ares_hosts_entry_t *entry, -+ ares_hosts_file_match_t matchtype) - { - ares__llist_node_t *node; - -- while ((node = ares__llist_node_first(entry->ips)) != NULL) { -- char *ipaddr = ares__llist_node_claim(node); -+ /* If we matched on IP address, we know there can only be 1, so there's no -+ * reason to do anything */ -+ if (matchtype != ARES_MATCH_IPADDR) { -+ while ((node = ares__llist_node_first(entry->ips)) != NULL) { -+ const char *ipaddr = ares__llist_node_val(node); - -- if (ares__hosts_entry_ipaddr_exists(existing, ipaddr)) { -- ares_free(ipaddr); -- continue; -- } -+ if (ares__htable_strvp_get_direct(hf->iphash, ipaddr) != NULL) { -+ ares__llist_node_destroy(node); -+ continue; -+ } - -- if (ares__llist_insert_last(existing->ips, ipaddr) == NULL) { -- ares_free(ipaddr); -- return ARES_ENOMEM; -+ ares__llist_node_move_parent_last(node, existing->ips); - } - } - - - while ((node = ares__llist_node_first(entry->hosts)) != NULL) { -- char *hostname = ares__llist_node_claim(node); -+ const char *hostname = ares__llist_node_val(node); - -- if (ares__hosts_entry_host_exists(existing, hostname)) { -- ares_free(hostname); -+ if (ares__htable_strvp_get_direct(hf->hosthash, hostname) != NULL) { -+ ares__llist_node_destroy(node); - continue; - } - -- if (ares__llist_insert_last(existing->hosts, hostname) == NULL) { -- ares_free(hostname); -- return ARES_ENOMEM; -- } -+ ares__llist_node_move_parent_last(node, existing->hosts); - } - - ares__hosts_entry_destroy(entry); - return ARES_SUCCESS; - } - --typedef enum { -- ARES_MATCH_NONE = 0, -- ARES_MATCH_IPADDR = 1, -- ARES_MATCH_HOST = 2 --} ares_hosts_file_match_t; -+ - - static ares_hosts_file_match_t - ares__hosts_file_match(const ares_hosts_file_t *hf, ares_hosts_entry_t *entry, -@@ -435,7 +405,7 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, - matchtype = ares__hosts_file_match(hosts, entry, &match); - - if (matchtype != ARES_MATCH_NONE) { -- status = ares__hosts_file_merge_entry(match, entry); -+ status = ares__hosts_file_merge_entry(hosts, match, entry, matchtype); - if (status != ARES_SUCCESS) { - ares__hosts_entry_destroy(entry); - return status; -@@ -481,6 +451,22 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, - return ARES_SUCCESS; - } - -+static ares_bool_t ares__hosts_entry_isdup(ares_hosts_entry_t *entry, -+ const char *host) -+{ -+ ares__llist_node_t *node; -+ -+ for (node = ares__llist_node_first(entry->ips); node != NULL; -+ node = ares__llist_node_next(node)) { -+ const char *myhost = ares__llist_node_val(node); -+ if (strcasecmp(myhost, host) == 0) { -+ return ARES_TRUE; -+ } -+ } -+ -+ return ARES_FALSE; -+} -+ - static ares_status_t ares__parse_hosts_hostnames(ares__buf_t *buf, - ares_hosts_entry_t *entry) - { -@@ -531,7 +517,7 @@ static ares_status_t ares__parse_hosts_hostnames(ares__buf_t *buf, - } - - /* Don't add a duplicate to the same entry */ -- if (ares__hosts_entry_host_exists(entry, hostname)) { -+ if (ares__hosts_entry_isdup(entry, hostname)) { - continue; - } - ---- a/src/lib/ares__htable.c -+++ b/src/lib/ares__htable.c -@@ -66,7 +66,7 @@ static unsigned int ares__htable_generate_seed(ares__htable_t *htable) - - static void ares__htable_buckets_destroy(ares__llist_t **buckets, - unsigned int size, -- unsigned char destroy_vals) -+ ares_bool_t destroy_vals) - { - unsigned int i; - -@@ -94,7 +94,7 @@ void ares__htable_destroy(ares__htable_t *htable) - if (htable == NULL) { - return; - } -- ares__htable_buckets_destroy(htable->buckets, htable->size, 1); -+ ares__htable_buckets_destroy(htable->buckets, htable->size, ARES_TRUE); - ares_free(htable); - } - -@@ -180,11 +180,40 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) - - for (i = 0; i < old_size; i++) { - ares__llist_node_t *node; -- for (node = ares__llist_node_first(htable->buckets[i]); node != NULL; -- node = ares__llist_node_next(node)) { -+ -+ /* Nothing in this bucket */ -+ if (htable->buckets[i] == NULL) -+ continue; -+ -+ /* Fast past optimization (most likely case), there is likely only a single -+ * entry in both the source and destination, check for this to confirm and -+ * if so, just move the bucket over */ -+ if (ares__llist_len(htable->buckets[i]) == 1) { -+ void *val = ares__llist_first_val(htable->buckets[i]); -+ size_t idx = HASH_IDX(htable, htable->bucket_key(val)); -+ -+ if (buckets[idx] == NULL) { -+ /* Swap! */ -+ buckets[idx] = htable->buckets[i]; -+ htable->buckets[i] = NULL; -+ continue; -+ } -+ } -+ -+ /* Slow path, collisions */ -+ while ((node = ares__llist_node_first(htable->buckets[i])) != NULL) { - void *val = ares__llist_node_val(node); - size_t idx = HASH_IDX(htable, htable->bucket_key(val)); - -+ /* Try fast path again as maybe we popped one collision off and the -+ * next we can reuse the llist parent */ -+ if (buckets[idx] == NULL && ares__llist_len(htable->buckets[i]) == 1) { -+ /* Swap! */ -+ buckets[idx] = htable->buckets[i]; -+ htable->buckets[i] = NULL; -+ break; -+ } -+ - if (buckets[idx] == NULL) { - buckets[idx] = ares__llist_create(htable->bucket_free); - } -@@ -192,19 +221,17 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) - goto fail; - } - -- if (ares__llist_insert_first(buckets[idx], val) == NULL) { -- goto fail; -- } -+ ares__llist_node_move_parent_first(node, buckets[idx]); - } - } - - /* Swap out buckets */ -- ares__htable_buckets_destroy(htable->buckets, old_size, 0); -+ ares__htable_buckets_destroy(htable->buckets, old_size, ARES_FALSE); - htable->buckets = buckets; - return ARES_TRUE; - - fail: -- ares__htable_buckets_destroy(buckets, htable->size, 0); -+ ares__htable_buckets_destroy(buckets, htable->size, ARES_FALSE); - htable->size = old_size; - - return ARES_FALSE; ---- a/src/lib/ares__llist.c -+++ b/src/lib/ares__llist.c -@@ -71,24 +71,14 @@ typedef enum { - ARES__LLIST_INSERT_BEFORE - } ares__llist_insert_type_t; - --static ares__llist_node_t *ares__llist_insert_at(ares__llist_t *list, -- ares__llist_insert_type_t type, -- ares__llist_node_t *at, -- void *val) -+static void ares__llist_attach_at(ares__llist_t *list, -+ ares__llist_insert_type_t type, -+ ares__llist_node_t *at, -+ ares__llist_node_t *node) - { -- ares__llist_node_t *node = NULL; -- -- if (list == NULL || val == NULL) { -- return NULL; -- } -- -- node = ares_malloc_zero(sizeof(*node)); -- -- if (node == NULL) { -- return NULL; -- } -+ if (list == NULL || node == NULL) -+ return; - -- node->data = val; - node->parent = list; - - if (type == ARES__LLIST_INSERT_BEFORE && (at == list->head || at == NULL)) { -@@ -126,6 +116,27 @@ static ares__llist_node_t *ares__llist_insert_at(ares__llist_t *list, - } - - list->cnt++; -+} -+ -+static ares__llist_node_t *ares__llist_insert_at(ares__llist_t *list, -+ ares__llist_insert_type_t type, -+ ares__llist_node_t *at, -+ void *val) -+{ -+ ares__llist_node_t *node = NULL; -+ -+ if (list == NULL || val == NULL) { -+ return NULL; -+ } -+ -+ node = ares_malloc_zero(sizeof(*node)); -+ -+ if (node == NULL) { -+ return NULL; -+ } -+ -+ node->data = val; -+ ares__llist_attach_at(list, type, at, node); - - return node; - } -@@ -233,17 +244,14 @@ void *ares__llist_last_val(ares__llist_t *list) - return ares__llist_node_val(ares__llist_node_last(list)); - } - --void *ares__llist_node_claim(ares__llist_node_t *node) -+static void ares__llist_node_detach(ares__llist_node_t *node) - { -- void *val; - ares__llist_t *list; - -- if (node == NULL) { -- return NULL; -- } -+ if (node == NULL) -+ return; - - list = node->parent; -- val = node->data; - - if (node->prev) { - node->prev->next = node->next; -@@ -260,9 +268,22 @@ void *ares__llist_node_claim(ares__llist_node_t *node) - if (node == list->tail) { - list->tail = node->prev; - } -- ares_free(node); - -+ node->parent = NULL; - list->cnt--; -+} -+ -+void *ares__llist_node_claim(ares__llist_node_t *node) -+{ -+ void *val; -+ -+ if (node == NULL) { -+ return NULL; -+ } -+ -+ val = node->data; -+ ares__llist_node_detach(node); -+ ares_free(node); - - return val; - } -@@ -313,3 +334,23 @@ void ares__llist_destroy(ares__llist_t *list) - } - ares_free(list); - } -+ -+void ares__llist_node_move_parent_last(ares__llist_node_t *node, -+ ares__llist_t *new_parent) -+{ -+ if (node == NULL || new_parent == NULL) -+ return; -+ -+ ares__llist_node_detach(node); -+ ares__llist_attach_at(new_parent, ARES__LLIST_INSERT_TAIL, NULL, node); -+} -+ -+void ares__llist_node_move_parent_first(ares__llist_node_t *node, -+ ares__llist_t *new_parent) -+{ -+ if (node == NULL || new_parent == NULL) -+ return; -+ -+ ares__llist_node_detach(node); -+ ares__llist_attach_at(new_parent, ARES__LLIST_INSERT_HEAD, NULL, node); -+} ---- a/src/lib/ares__llist.h -+++ b/src/lib/ares__llist.h -@@ -198,6 +198,23 @@ void ares__llist_node_destroy(ares__llist_node_t *node); - */ - void ares__llist_destroy(ares__llist_t *list); - -+/*! Detach node from the current list and re-attach it to the new list as the -+ * last entry. -+ * -+ * \param[in] node node to move -+ * \param[in] parent new list -+ */ -+void ares__llist_node_move_parent_last(ares__llist_node_t *node, -+ ares__llist_t *new_parent); -+ -+/*! Detach node from the current list and re-attach it to the new list as the -+ * first entry. -+ * -+ * \param[in] node node to move -+ * \param[in] parent new list -+ */ -+void ares__llist_node_move_parent_first(ares__llist_node_t *node, -+ ares__llist_t *new_parent); - /*! @} */ - - #endif /* __ARES__LLIST_H */ - diff --git a/net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup.patch b/net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup.patch deleted file mode 100644 index c0e76ca7e83c..000000000000 --- a/net-dns/c-ares/files/c-ares-1.22.0-hosts-lookup.patch +++ /dev/null @@ -1,109 +0,0 @@ -https://github.com/c-ares/c-ares/commit/a3631763ca30804c3095d99474e05625f0c9b0fa - -From a3631763ca30804c3095d99474e05625f0c9b0fa Mon Sep 17 00:00:00 2001 -From: Brad House <brad@brad-house.com> -Date: Thu, 16 Nov 2023 12:19:39 -0500 -Subject: [PATCH] Fix /etc/hosts processing performance with all entries using - same IP address - -Some users use blacklist files like https://github.com/StevenBlack/hosts which -can contain 200k+ host entries all pointing to 0.0.0.0. Due to the merge -logic in the new hosts processor, all those entries will be associated as -aliases for the same ip address. - -The first issue is that it attempts to check the status of all the hosts for -the merged entry, when it should only be checking the new hosts added to the -merged entry, so this caused exponential time as the entries got longer. - -The next issue is if searching for one of those hosts, it would append all -the matches as cnames/aliases, but there is zero use for 200k aliases -being appended to a lookup, so we are artificially capping this to 100. - -Bug report reference: https://bugs.gentoo.org/917400 - -Fix By: Brad House (@bradh352) ---- a/src/lib/ares__hosts_file.c -+++ b/src/lib/ares__hosts_file.c -@@ -422,9 +422,15 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, - ares_hosts_entry_t *entry) - { - ares_hosts_entry_t *match = NULL; -- ares_status_t status = ARES_SUCCESS; -+ ares_status_t status = ARES_SUCCESS; - ares__llist_node_t *node; - ares_hosts_file_match_t matchtype; -+ size_t num_hostnames; -+ -+ /* Record the number of hostnames in this entry file. If we merge into an -+ * existing record, these will be *appended* to the entry, so we'll count -+ * backwards when adding to the hosts hashtable */ -+ num_hostnames = ares__llist_len(entry->hosts); - - matchtype = ares__hosts_file_match(hosts, entry, &match); - -@@ -450,10 +456,17 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, - } - } - -- for (node = ares__llist_node_first(entry->hosts); node != NULL; -- node = ares__llist_node_next(node)) { -+ /* Go backwards, on a merge, hostnames are appended. Breakout once we've -+ * consumed all the hosts that we appended */ -+ for (node = ares__llist_node_last(entry->hosts); node != NULL; -+ node = ares__llist_node_prev(node)) { - const char *val = ares__llist_node_val(node); - -+ if (num_hostnames == 0) -+ break; -+ -+ num_hostnames--; -+ - /* first hostname match wins. If we detect a duplicate hostname for another - * ip it will automatically be added to the same entry */ - if (ares__htable_strvp_get(hosts->hosthash, val, NULL)) { -@@ -950,6 +963,12 @@ ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, - - /* Copy aliases */ - naliases = ares__llist_len(entry->hosts) - 1; -+ -+ /* Cap at 100, some people use https://github.com/StevenBlack/hosts and we -+ * don't need 200k+ aliases */ -+ if (naliases > 100) -+ naliases = 100; -+ - (*hostent)->h_aliases = - ares_malloc_zero((naliases + 1) * sizeof(*(*hostent)->h_aliases)); - if ((*hostent)->h_aliases == NULL) { -@@ -968,6 +987,10 @@ ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, - goto fail; - } - idx++; -+ -+ /* Break out if artificially capped */ -+ if (idx == naliases) -+ break; - node = ares__llist_node_next(node); - } - -@@ -988,6 +1011,7 @@ static ares_status_t - const char *primaryhost; - ares__llist_node_t *node; - ares_status_t status; -+ size_t cnt = 0; - - node = ares__llist_node_first(entry->hosts); - primaryhost = ares__llist_node_val(node); -@@ -997,6 +1021,12 @@ static ares_status_t - while (node != NULL) { - const char *host = ares__llist_node_val(node); - -+ /* Cap at 100 entries. , some people use https://github.com/StevenBlack/hosts -+ * and we don't need 200k+ aliases */ -+ cnt++; -+ if (cnt > 100) -+ break; -+ - cname = ares__append_addrinfo_cname(&cnames); - if (cname == NULL) { - status = ARES_ENOMEM; - |