From: Florian Weimer Date: Thu, 12 Feb 2026 11:18:54 +0000 (+0100) Subject: support: Clean up NSS formatting and checking functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1a730b0119a5b35dfa59c70c6744246ac1ee7fa;p=thirdparty%2Fglibc.git support: Clean up NSS formatting and checking functions Move includes into the implementation files. Use const where appropriate. Introduce support_check_nss and use it to implement the check_* functions. Reviewed-by: DJ Delorie --- diff --git a/nss/tst-nss-gai-actions.c b/nss/tst-nss-gai-actions.c index e42bbd6cae..4dd8a0918f 100644 --- a/nss/tst-nss-gai-actions.c +++ b/nss/tst-nss-gai-actions.c @@ -18,6 +18,7 @@ #include #include +#include #include #include #include diff --git a/resolv/tst-resolv-ai_idn-common.c b/resolv/tst-resolv-ai_idn-common.c index d2a17d6f25..f55405eb27 100644 --- a/resolv/tst-resolv-ai_idn-common.c +++ b/resolv/tst-resolv-ai_idn-common.c @@ -20,6 +20,7 @@ 0, depending on whether a UTF-8 locale is used or a Latin-1 locale. */ +#include #include #include #include diff --git a/resolv/tst-resolv-basic.c b/resolv/tst-resolv-basic.c index d64da33898..5457d68e9e 100644 --- a/resolv/tst-resolv-basic.c +++ b/resolv/tst-resolv-basic.c @@ -17,6 +17,7 @@ . */ #include +#include #include #include #include diff --git a/resolv/tst-resolv-getaddrinfo-fqdn.c b/resolv/tst-resolv-getaddrinfo-fqdn.c index 8703afc042..094b443f6a 100644 --- a/resolv/tst-resolv-getaddrinfo-fqdn.c +++ b/resolv/tst-resolv-getaddrinfo-fqdn.c @@ -17,6 +17,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #include #include diff --git a/resolv/tst-resolv-search.c b/resolv/tst-resolv-search.c index 2c0f80da21..5d905c0188 100644 --- a/resolv/tst-resolv-search.c +++ b/resolv/tst-resolv-search.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #include #include diff --git a/resolv/tst-resolv-semi-failure.c b/resolv/tst-resolv-semi-failure.c index f82840cc56..da5a0c72ea 100644 --- a/resolv/tst-resolv-semi-failure.c +++ b/resolv/tst-resolv-semi-failure.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #include #include diff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c index ddb91f158f..c39afe67fc 100644 --- a/resolv/tst-resolv-short-response.c +++ b/resolv/tst-resolv-short-response.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #include #include diff --git a/resolv/tst-resolv-txnid-collision.c b/resolv/tst-resolv-txnid-collision.c index a7af10a938..b9f95fac51 100644 --- a/resolv/tst-resolv-txnid-collision.c +++ b/resolv/tst-resolv-txnid-collision.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/support/Makefile b/support/Makefile index bd60466ad0..935503c9b3 100644 --- a/support/Makefile +++ b/support/Makefile @@ -46,6 +46,7 @@ libsupport-routines = \ support_can_chroot \ support_capture_subprocess \ support_capture_subprocess_check \ + support_check_nss \ support_check_stat_fd \ support_check_stat_path \ support_chroot \ diff --git a/support/check_addrinfo.c b/support/check_addrinfo.c index d643737469..e42184a662 100644 --- a/support/check_addrinfo.c +++ b/support/check_addrinfo.c @@ -18,26 +18,12 @@ #include -#include -#include -#include -#include #include -#include void -check_addrinfo (const char *query_description, struct addrinfo *ai, int ret, - const char *expected) +check_addrinfo (const char *query_description, const struct addrinfo *ai, + int ret, const char *expected) { char *formatted = support_format_addrinfo (ai, ret); - if (strcmp (formatted, expected) != 0) - { - support_record_failure (); - printf ("error: addrinfo comparison failure\n"); - if (query_description != NULL) - printf ("query: %s\n", query_description); - support_run_diff ("expected", expected, - "actual", formatted); - } - free (formatted); + support_check_nss (query_description, "addrinfo", formatted, expected); } diff --git a/support/check_dns_packet.c b/support/check_dns_packet.c index 57e6623ba4..f143ef36c0 100644 --- a/support/check_dns_packet.c +++ b/support/check_dns_packet.c @@ -18,12 +18,7 @@ #include -#include -#include -#include -#include #include -#include void check_dns_packet (const char *query_description, @@ -31,13 +26,5 @@ check_dns_packet (const char *query_description, const char *expected) { char *formatted = support_format_dns_packet (buffer, length); - if (strcmp (formatted, expected) != 0) - { - support_record_failure (); - printf ("error: packet comparison failure\n"); - if (query_description != NULL) - printf ("query: %s\n", query_description); - support_run_diff ("expected", expected, "actual", formatted); - } - free (formatted); + support_check_nss (query_description, "packet", formatted, expected); } diff --git a/support/check_hostent.c b/support/check_hostent.c index 09123486ed..72ddb25ba1 100644 --- a/support/check_hostent.c +++ b/support/check_hostent.c @@ -18,26 +18,12 @@ #include -#include -#include -#include -#include #include -#include void -check_hostent (const char *query_description, struct hostent *h, +check_hostent (const char *query_description, const struct hostent *h, const char *expected) { char *formatted = support_format_hostent (h); - if (strcmp (formatted, expected) != 0) - { - support_record_failure (); - printf ("error: hostent comparison failure\n"); - if (query_description != NULL) - printf ("query: %s\n", query_description); - support_run_diff ("expected", expected, - "actual", formatted); - } - free (formatted); + support_check_nss (query_description, "hostent", formatted, expected); } diff --git a/support/check_netent.c b/support/check_netent.c index 822e1aba3f..fa7a892bb0 100644 --- a/support/check_netent.c +++ b/support/check_netent.c @@ -18,26 +18,12 @@ #include -#include -#include -#include -#include #include -#include void -check_netent (const char *query_description, struct netent *e, +check_netent (const char *query_description, const struct netent *e, const char *expected) { char *formatted = support_format_netent (e); - if (strcmp (formatted, expected) != 0) - { - support_record_failure (); - printf ("error: netent comparison failure\n"); - if (query_description != NULL) - printf ("query: %s\n", query_description); - support_run_diff ("expected", expected, - "actual", formatted); - } - free (formatted); + support_check_nss (query_description, "netent", formatted, expected); } diff --git a/support/check_nss.h b/support/check_nss.h index ec87fa44a1..6bacb9978f 100644 --- a/support/check_nss.h +++ b/support/check_nss.h @@ -19,23 +19,33 @@ #ifndef SUPPORT_CHECK_NSS_H #define SUPPORT_CHECK_NSS_H -#include #include +#include __BEGIN_DECLS +struct addrinfo; +struct hostent; +struct netent; + /* Compare the data structures against the expected values (which have to be formatted according to the support_format_* functions in ). If there is a difference, a delayed test failure is recorded, and a diff is written to standard output. */ void check_addrinfo (const char *query_description, - struct addrinfo *, int ret, const char *expected); + const struct addrinfo *, int ret, const char *expected); void check_dns_packet (const char *query_description, const unsigned char *, size_t, const char *expected); void check_hostent (const char *query_description, - struct hostent *, const char *expected); + const struct hostent *, const char *expected); void check_netent (const char *query_description, - struct netent *, const char *expected); + const struct netent *, const char *expected); + +/* Helper routine for implementing the functions above. Report an + error if ACTUAL and EXPECTED are not equal. ACTUAL is always freed. */ +void support_check_nss (const char *query_description, + const char *type_name, + char *actual, const char *expected); __END_DECLS diff --git a/support/format_nss.h b/support/format_nss.h index 7ce7cc9c71..a81658cfcb 100644 --- a/support/format_nss.h +++ b/support/format_nss.h @@ -19,22 +19,26 @@ #ifndef SUPPORT_FORMAT_NSS_H #define SUPPORT_FORMAT_NSS_H -#include #include +#include __BEGIN_DECLS +struct addrinfo; +struct hostent; +struct netent; + /* The following functions format their arguments as human-readable strings (which can span multiple lines). The caller must free the returned buffer. For NULL pointers or failure status arguments, error variables such as h_errno and errno are included in the result. */ char *support_format_address_family (int); -char *support_format_addrinfo (struct addrinfo *, int ret); +char *support_format_addrinfo (const struct addrinfo *, int ret); char *support_format_dns_packet (const unsigned char *buffer, size_t length); char *support_format_herrno (int); -char *support_format_hostent (struct hostent *); -char *support_format_netent (struct netent *); +char *support_format_hostent (const struct hostent *); +char *support_format_netent (const struct netent *); __END_DECLS diff --git a/support/support_check_nss.c b/support/support_check_nss.c new file mode 100644 index 0000000000..5c91af32cb --- /dev/null +++ b/support/support_check_nss.c @@ -0,0 +1,41 @@ +/* Report a NSS struct comparison failure. + Copyright (C) 2016-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +#include +#include +#include +#include +#include + +void +support_check_nss (const char *query_description, const char *type_name, + char *actual, const char *expected) +{ + if (strcmp (actual, expected) != 0) + { + support_record_failure (); + printf ("error: %s comparison failure\n", type_name); + if (query_description != NULL) + printf ("query: %s\n", query_description); + support_run_diff ("expected", expected, + "actual", actual); + } + free (actual); +} diff --git a/support/support_format_address_family.c b/support/support_format_address_family.c index 5be0f8ab67..30c4c69fc3 100644 --- a/support/support_format_address_family.c +++ b/support/support_format_address_family.c @@ -18,6 +18,7 @@ #include +#include #include char * diff --git a/support/support_format_addrinfo.c b/support/support_format_addrinfo.c index f6fda5ab49..dc6041f74b 100644 --- a/support/support_format_addrinfo.c +++ b/support/support_format_addrinfo.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -41,8 +42,8 @@ socket_address_length (int family) } static void -format_ai_flags_1 (FILE *out, struct addrinfo *ai, int flag, const char *name, - int * flags_printed) +format_ai_flags_1 (FILE *out, const struct addrinfo *ai, int flag, + const char *name, int *flags_printed) { if ((ai->ai_flags & flag) != 0) fprintf (out, " %s", name); @@ -50,7 +51,7 @@ format_ai_flags_1 (FILE *out, struct addrinfo *ai, int flag, const char *name, } static void -format_ai_flags (FILE *out, struct addrinfo *ai) +format_ai_flags (FILE *out, const struct addrinfo *ai) { if (ai == NULL) return; @@ -91,7 +92,7 @@ format_ai_flags (FILE *out, struct addrinfo *ai) } static void -format_ai_canonname (FILE *out, struct addrinfo *ai) +format_ai_canonname (FILE *out, const struct addrinfo *ai) { if (ai == NULL) return; @@ -113,7 +114,7 @@ format_ai_canonname (FILE *out, struct addrinfo *ai) } static void -format_ai_one (FILE *out, struct addrinfo *ai) +format_ai_one (FILE *out, const struct addrinfo *ai) { { char type_buf[32]; @@ -200,7 +201,7 @@ format_ai_one (FILE *out, struct addrinfo *ai) /* Format all the addresses in one address family. */ static void -format_ai_family (FILE *out, struct addrinfo *ai, int family) +format_ai_family (FILE *out, const struct addrinfo *ai, int family) { while (ai) { @@ -211,7 +212,7 @@ format_ai_family (FILE *out, struct addrinfo *ai, int family) } char * -support_format_addrinfo (struct addrinfo *ai, int ret) +support_format_addrinfo (const struct addrinfo *ai, int ret) { int errno_copy = errno; diff --git a/support/support_format_herrno.c b/support/support_format_herrno.c index 4644b022d4..9c3a52c78e 100644 --- a/support/support_format_herrno.c +++ b/support/support_format_herrno.c @@ -18,6 +18,7 @@ #include +#include #include char * diff --git a/support/support_format_hostent.c b/support/support_format_hostent.c index e1b3f078d4..f76ec459cd 100644 --- a/support/support_format_hostent.c +++ b/support/support_format_hostent.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -39,7 +40,7 @@ address_length (int family) } char * -support_format_hostent (struct hostent *h) +support_format_hostent (const struct hostent *h) { if (h == NULL) { diff --git a/support/support_format_netent.c b/support/support_format_netent.c index e96e71c737..7f08476dd3 100644 --- a/support/support_format_netent.c +++ b/support/support_format_netent.c @@ -19,13 +19,14 @@ #include #include +#include #include #include #include #include char * -support_format_netent (struct netent *e) +support_format_netent (const struct netent *e) { if (e == NULL) {