aboutsummaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/Makefile146
-rw-r--r--support/README29
-rw-r--r--support/README-testing.c19
-rw-r--r--support/capture_subprocess.h61
-rw-r--r--support/check.c57
-rw-r--r--support/check.h94
-rw-r--r--support/check_addrinfo.c42
-rw-r--r--support/check_dns_packet.c42
-rw-r--r--support/check_hostent.c42
-rw-r--r--support/check_netent.c42
-rw-r--r--support/check_nss.h42
-rw-r--r--support/delayed_exit.c55
-rw-r--r--support/format_nss.h41
-rw-r--r--support/ignore_stderr.c38
-rw-r--r--support/namespace.h65
-rw-r--r--support/oom_error.c29
-rw-r--r--support/resolv_test.c1202
-rw-r--r--support/resolv_test.h180
-rw-r--r--support/run_diff.h31
-rw-r--r--support/set_fortify_handler.c34
-rw-r--r--support/support-xstat.c30
-rw-r--r--support/support.h74
-rw-r--r--support/support_become_root.c40
-rw-r--r--support/support_can_chroot.c65
-rw-r--r--support/support_capture_subprocess.c108
-rw-r--r--support/support_capture_subprocess_check.c67
-rw-r--r--support/support_enter_network_namespace.c75
-rw-r--r--support/support_format_address_family.c35
-rw-r--r--support/support_format_addrinfo.c239
-rw-r--r--support/support_format_dns_packet.c222
-rw-r--r--support/support_format_herrno.c45
-rw-r--r--support/support_format_hostent.c75
-rw-r--r--support/support_format_netent.c52
-rw-r--r--support/support_isolate_in_subprocess.c38
-rw-r--r--support/support_record_failure.c106
-rw-r--r--support/support_run_diff.c76
-rw-r--r--support/support_shared_allocate.c57
-rw-r--r--support/support_test_main.c423
-rw-r--r--support/support_test_verify_impl.c33
-rw-r--r--support/support_write_file_string.c39
-rw-r--r--support/temp_file-internal.h31
-rw-r--r--support/temp_file.c132
-rw-r--r--support/temp_file.h37
-rw-r--r--support/test-driver.c156
-rw-r--r--support/test-driver.h74
-rw-r--r--support/tst-support-namespace.c34
-rw-r--r--support/tst-support_capture_subprocess.c188
-rw-r--r--support/tst-support_format_dns_packet.c101
-rw-r--r--support/tst-support_record_failure-2.sh69
-rw-r--r--support/tst-support_record_failure.c153
-rw-r--r--support/write_message.c29
-rw-r--r--support/xaccept.c32
-rw-r--r--support/xaccept4.c32
-rw-r--r--support/xasprintf.c36
-rw-r--r--support/xbind.c30
-rw-r--r--support/xcalloc.c34
-rw-r--r--support/xchroot.c28
-rw-r--r--support/xclose.c28
-rw-r--r--support/xconnect.c30
-rw-r--r--support/xdup2.c28
-rw-r--r--support/xfclose.c33
-rw-r--r--support/xfopen.c31
-rw-r--r--support/xfork.c32
-rw-r--r--support/xgetsockname.c30
-rw-r--r--support/xlisten.c30
-rw-r--r--support/xmalloc.c34
-rw-r--r--support/xmemstream.c42
-rw-r--r--support/xmemstream.h49
-rw-r--r--support/xmkdir.c28
-rw-r--r--support/xmmap.c31
-rw-r--r--support/xmunmap.c28
-rw-r--r--support/xopen.c30
-rw-r--r--support/xpipe.c28
-rw-r--r--support/xpoll.c32
-rw-r--r--support/xpthread_attr_destroy.c26
-rw-r--r--support/xpthread_attr_init.c25
-rw-r--r--support/xpthread_attr_setdetachstate.c27
-rw-r--r--support/xpthread_attr_setstacksize.c26
-rw-r--r--support/xpthread_barrier_destroy.c26
-rw-r--r--support/xpthread_barrier_init.c27
-rw-r--r--support/xpthread_barrier_wait.c28
-rw-r--r--support/xpthread_cancel.c25
-rw-r--r--support/xpthread_check_return.c34
-rw-r--r--support/xpthread_cond_wait.c26
-rw-r--r--support/xpthread_create.c29
-rw-r--r--support/xpthread_detach.c25
-rw-r--r--support/xpthread_join.c27
-rw-r--r--support/xpthread_mutex_consistent.c26
-rw-r--r--support/xpthread_mutex_destroy.c26
-rw-r--r--support/xpthread_mutex_init.c26
-rw-r--r--support/xpthread_mutex_lock.c25
-rw-r--r--support/xpthread_mutex_unlock.c25
-rw-r--r--support/xpthread_mutexattr_destroy.c26
-rw-r--r--support/xpthread_mutexattr_init.c25
-rw-r--r--support/xpthread_mutexattr_setprotocol.c26
-rw-r--r--support/xpthread_mutexattr_setpshared.c26
-rw-r--r--support/xpthread_mutexattr_setrobust.c26
-rw-r--r--support/xpthread_mutexattr_settype.c26
-rw-r--r--support/xpthread_once.c25
-rw-r--r--support/xpthread_sigmask.c34
-rw-r--r--support/xpthread_spin_lock.c25
-rw-r--r--support/xpthread_spin_unlock.c25
-rw-r--r--support/xrealloc.c32
-rw-r--r--support/xrecvfrom.c33
-rw-r--r--support/xsendto.c35
-rw-r--r--support/xsetsockopt.c31
-rw-r--r--support/xsignal.h34
-rw-r--r--support/xsocket.c32
-rw-r--r--support/xsocket.h39
-rw-r--r--support/xstdio.h32
-rw-r--r--support/xstrdup.c30
-rw-r--r--support/xthread.h77
-rw-r--r--support/xunistd.h56
-rw-r--r--support/xwaitpid.c33
-rw-r--r--support/xwrite.c39
115 files changed, 0 insertions, 7176 deletions
diff --git a/support/Makefile b/support/Makefile
deleted file mode 100644
index 20b0343ade..0000000000
--- a/support/Makefile
+++ /dev/null
@@ -1,146 +0,0 @@
-# Makefile for support library, used only at build and test time
-# Copyright (C) 2016-2017 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
-# <http://www.gnu.org/licenses/>.
-
-subdir := support
-
-include ../Makeconfig
-
-extra-libs := libsupport
-extra-libs-others = $(extra-libs)
-extra-libs-noinstall := $(extra-libs)
-
-libsupport-routines = \
- check \
- check_addrinfo \
- check_dns_packet \
- check_hostent \
- check_netent \
- delayed_exit \
- ignore_stderr \
- oom_error \
- resolv_test \
- set_fortify_handler \
- support-xstat \
- support_become_root \
- support_can_chroot \
- support_capture_subprocess \
- support_capture_subprocess_check \
- support_enter_network_namespace \
- support_format_address_family \
- support_format_addrinfo \
- support_format_dns_packet \
- support_format_herrno \
- support_format_hostent \
- support_format_netent \
- support_isolate_in_subprocess \
- support_record_failure \
- support_run_diff \
- support_shared_allocate \
- support_write_file_string \
- support_test_main \
- support_test_verify_impl \
- temp_file \
- write_message \
- xaccept \
- xaccept4 \
- xasprintf \
- xbind \
- xcalloc \
- xchroot \
- xclose \
- xconnect \
- xdup2 \
- xfclose \
- xfopen \
- xfork \
- xgetsockname \
- xlisten \
- xmalloc \
- xmemstream \
- xmkdir \
- xmmap \
- xmunmap \
- xopen \
- xpipe \
- xpoll \
- xpthread_attr_destroy \
- xpthread_attr_init \
- xpthread_attr_setdetachstate \
- xpthread_attr_setstacksize \
- xpthread_barrier_destroy \
- xpthread_barrier_init \
- xpthread_barrier_wait \
- xpthread_cancel \
- xpthread_check_return \
- xpthread_cond_wait \
- xpthread_create \
- xpthread_detach \
- xpthread_join \
- xpthread_mutex_consistent \
- xpthread_mutex_destroy \
- xpthread_mutex_init \
- xpthread_mutex_lock \
- xpthread_mutex_unlock \
- xpthread_mutexattr_destroy \
- xpthread_mutexattr_init \
- xpthread_mutexattr_setprotocol \
- xpthread_mutexattr_setpshared \
- xpthread_mutexattr_setrobust \
- xpthread_mutexattr_settype \
- xpthread_once \
- xpthread_sigmask \
- xpthread_spin_lock \
- xpthread_spin_unlock \
- xrealloc \
- xrecvfrom \
- xsendto \
- xsetsockopt \
- xsocket \
- xstrdup \
- xwaitpid \
- xwrite \
-
-libsupport-static-only-routines := $(libsupport-routines)
-# Only build one variant of the library.
-libsupport-inhibit-o := .os
-ifeq ($(build-shared),yes)
-libsupport-inhibit-o += .o
-endif
-
-tests = \
- README-testing \
- tst-support-namespace \
- tst-support_capture_subprocess \
- tst-support_format_dns_packet \
- tst-support_record_failure \
-
-ifeq ($(run-built-tests),yes)
-tests-special = \
- $(objpfx)tst-support_record_failure-2.out
-
-$(objpfx)tst-support_record_failure-2.out: tst-support_record_failure-2.sh \
- $(objpfx)tst-support_record_failure
- $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
- '$(run-program-env)' '$(test-program-prefix-after-env)' \
- > $@; \
- $(evaluate-test)
-endif
-
-$(objpfx)tst-support_format_dns_packet: $(common-objpfx)resolv/libresolv.so
-
-include ../Rules
diff --git a/support/README b/support/README
deleted file mode 100644
index 476cfcda59..0000000000
--- a/support/README
+++ /dev/null
@@ -1,29 +0,0 @@
-This subdirectory contains infrastructure which is not put into
-installed libraries, but may be linked into programs (installed or
-not) and tests.
-
-# Error-checking wrappers
-
-These wrappers test for error return codes an terminate the process on
-error. They are declared in these header files:
-
-* support.h
-* xsignal.h
-* xthread.h
-
-In general, new wrappers should be added to support.h if possible.
-However, support.h must remain fully compatible with C90 and therefore
-cannot include headers which use identifers not reserved in C90. If
-the wrappers need additional types, additional headers such as
-signal.h need to be introduced.
-
-# Test framework
-
-The test framework provides a main program for tests, including a
-timeout for hanging tests. See README-testing.c for a minimal
-example, and test-driver.c for details how to use it. The following
-header files provide related declarations:
-
-* check.h
-* temp_file.h
-* test-driver.h
diff --git a/support/README-testing.c b/support/README-testing.c
deleted file mode 100644
index 9d289c3020..0000000000
--- a/support/README-testing.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* This file contains an example test case which shows minimal use of
- the test framework. Additional testing hooks are described in
- <support/test-driver.c>. */
-
-/* This function will be called from the test driver. */
-static int
-do_test (void)
-{
- if (3 == 5)
- /* Indicate failure. */
- return 1;
- else
- /* Indicate success. */
- return 0;
-}
-
-/* This file references do_test above and contains the definition of
- the main function. */
-#include <support/test-driver.c>
diff --git a/support/capture_subprocess.h b/support/capture_subprocess.h
deleted file mode 100644
index 43caf9bce4..0000000000
--- a/support/capture_subprocess.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Capture output from a subprocess.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_CAPTURE_SUBPROCESS_H
-#define SUPPORT_CAPTURE_SUBPROCESS_H
-
-#include <support/xmemstream.h>
-
-struct support_capture_subprocess
-{
- struct xmemstream out;
- struct xmemstream err;
- int status;
-};
-
-/* Invoke CALLBACK (CLOSURE) in a subprocess and capture standard
- output, standard error, and the exit status. The out.buffer and
- err.buffer members in the result are null-terminated strings which
- can be examined by the caller (out.out and err.out are NULL). */
-struct support_capture_subprocess support_capture_subprocess
- (void (*callback) (void *), void *closure);
-
-/* Deallocate the subprocess data captured by
- support_capture_subprocess. */
-void support_capture_subprocess_free (struct support_capture_subprocess *);
-
-enum support_capture_allow
-{
- /* No output is allowed. */
- sc_allow_none = 0x01,
- /* Output to stdout is permitted. */
- sc_allow_stdout = 0x02,
- /* Output to standard error is permitted. */
- sc_allow_stderr = 0x04,
-};
-
-/* Check that the subprocess exited with STATUS and that only the
- allowed outputs happened. ALLOWED is a combination of
- support_capture_allow flags. Report errors under the CONTEXT
- message. */
-void support_capture_subprocess_check (struct support_capture_subprocess *,
- const char *context, int status,
- int allowed)
- __attribute__ ((nonnull (1, 2)));
-
-#endif /* SUPPORT_CAPTURE_SUBPROCESS_H */
diff --git a/support/check.c b/support/check.c
deleted file mode 100644
index 592f2bc856..0000000000
--- a/support/check.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Support code for reporting test results.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/test-driver.h>
-
-static void
-print_failure (const char *file, int line, const char *format, va_list ap)
-{
- printf ("error: %s:%d: ", file, line);
- vprintf (format, ap);
- puts ("");
-}
-
-int
-support_print_failure_impl (const char *file, int line,
- const char *format, ...)
-{
- support_record_failure ();
- va_list ap;
- va_start (ap, format);
- print_failure (file, line, format, ap);
- va_end (ap);
- return 1;
-}
-
-void
-support_exit_failure_impl (int status, const char *file, int line,
- const char *format, ...)
-{
- if (status != EXIT_SUCCESS && status != EXIT_UNSUPPORTED)
- support_record_failure ();
- va_list ap;
- va_start (ap, format);
- print_failure (file, line, format, ap);
- va_end (ap);
- exit (status);
-}
diff --git a/support/check.h b/support/check.h
deleted file mode 100644
index 1d244a3557..0000000000
--- a/support/check.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Functionality for reporting test results.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_CHECK_H
-#define SUPPORT_CHECK_H
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Record a test failure, print the failure message to standard output
- and return 1. */
-#define FAIL_RET(...) \
- return support_print_failure_impl (__FILE__, __LINE__, __VA_ARGS__)
-
-/* Print the failure message and terminate the process with STATUS.
- Record a the process as failed if STATUS is neither EXIT_SUCCESS
- nor EXIT_UNSUPPORTED. */
-#define FAIL_EXIT(status, ...) \
- support_exit_failure_impl (status, __FILE__, __LINE__, __VA_ARGS__)
-
-/* Record a test failure, print the failure message and terminate with
- exit status 1. */
-#define FAIL_EXIT1(...) \
- support_exit_failure_impl (1, __FILE__, __LINE__, __VA_ARGS__)
-
-/* Print failure message and terminate with as unsupported test (exit
- status of 77). */
-#define FAIL_UNSUPPORTED(...) \
- support_exit_failure_impl (77, __FILE__, __LINE__, __VA_ARGS__)
-
-/* Record a test failure (but continue executing) if EXPR evaluates to
- false. */
-#define TEST_VERIFY(expr) \
- ({ \
- if (expr) \
- ; \
- else \
- support_test_verify_impl (-1, __FILE__, __LINE__, #expr); \
- })
-
-/* Record a test failure and exit if EXPR evaluates to false. */
-#define TEST_VERIFY_EXIT(expr) \
- ({ \
- if (expr) \
- ; \
- else \
- support_test_verify_impl (1, __FILE__, __LINE__, #expr); \
- })
-
-int support_print_failure_impl (const char *file, int line,
- const char *format, ...)
- __attribute__ ((nonnull (1), format (printf, 3, 4)));
-void support_exit_failure_impl (int exit_status,
- const char *file, int line,
- const char *format, ...)
- __attribute__ ((noreturn, nonnull (2), format (printf, 4, 5)));
-void support_test_verify_impl (int status, const char *file, int line,
- const char *expr);
-
-/* Record a test failure. This function returns and does not
- terminate the process. The failure counter is stored in a shared
- memory mapping, so that failures reported in child processes are
- visible to the parent process and test driver. This function
- depends on initialization by an ELF constructor, so it can only be
- invoked after the test driver has run. Note that this function
- does not support reporting failures from a DSO. */
-void support_record_failure (void);
-
-/* Internal function called by the test driver. */
-int support_report_failure (int status)
- __attribute__ ((weak, warn_unused_result));
-
-/* Internal function used to test the failure recording framework. */
-void support_record_failure_reset (void);
-
-__END_DECLS
-
-#endif /* SUPPORT_CHECK_H */
diff --git a/support/check_addrinfo.c b/support/check_addrinfo.c
deleted file mode 100644
index 55895ace3c..0000000000
--- a/support/check_addrinfo.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Compare struct addrinfo values against a formatted string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check_nss.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <support/format_nss.h>
-#include <support/run_diff.h>
-
-void
-check_addrinfo (const char *query_description, 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);
-}
diff --git a/support/check_dns_packet.c b/support/check_dns_packet.c
deleted file mode 100644
index d2a31bed7b..0000000000
--- a/support/check_dns_packet.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Check that a DNS packet buffer has the expected contents.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check_nss.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <support/format_nss.h>
-#include <support/run_diff.h>
-
-void
-check_dns_packet (const char *query_description,
- const unsigned char *buffer, size_t length,
- 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);
-}
diff --git a/support/check_hostent.c b/support/check_hostent.c
deleted file mode 100644
index 890d672d50..0000000000
--- a/support/check_hostent.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Compare struct hostent values against a formatted string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check_nss.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <support/format_nss.h>
-#include <support/run_diff.h>
-
-void
-check_hostent (const char *query_description, 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);
-}
diff --git a/support/check_netent.c b/support/check_netent.c
deleted file mode 100644
index daa3083fd1..0000000000
--- a/support/check_netent.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Compare struct netent values against a formatted string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check_nss.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <support/format_nss.h>
-#include <support/run_diff.h>
-
-void
-check_netent (const char *query_description, 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);
-}
diff --git a/support/check_nss.h b/support/check_nss.h
deleted file mode 100644
index 2893f2c295..0000000000
--- a/support/check_nss.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Test verification functions for NSS- and DNS-related data.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_CHECK_NSS_H
-#define SUPPORT_CHECK_NSS_H
-
-#include <netdb.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Compare the data structures against the expected values (which have
- to be formatted according to the support_format_* functions in
- <support/format_nss.h>). 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);
-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);
-void check_netent (const char *query_description,
- struct netent *, const char *expected);
-
-__END_DECLS
-
-#endif /* SUPPORT_CHECK_NSS_H */
diff --git a/support/delayed_exit.c b/support/delayed_exit.c
deleted file mode 100644
index 67442f95df..0000000000
--- a/support/delayed_exit.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Time-triggered process termination.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-#include <support/xsignal.h>
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <time.h>
-
-static void *
-delayed_exit_thread (void *seconds_as_ptr)
-{
- int seconds = (uintptr_t) seconds_as_ptr;
- struct timespec delay = { seconds, 0 };
- struct timespec remaining = { 0 };
- if (nanosleep (&delay, &remaining) != 0)
- FAIL_EXIT1 ("nanosleep: %m");
- /* Exit the process sucessfully. */
- exit (0);
- return NULL;
-}
-
-void
-delayed_exit (int seconds)
-{
- /* Create the new thread with all signals blocked. */
- sigset_t all_blocked;
- sigfillset (&all_blocked);
- sigset_t old_set;
- xpthread_sigmask (SIG_SETMASK, &all_blocked, &old_set);
- /* Create a detached thread. */
- pthread_t thr = xpthread_create
- (NULL, delayed_exit_thread, (void *) (uintptr_t) seconds);
- xpthread_detach (thr);
- /* Restore the original signal mask. */
- xpthread_sigmask (SIG_SETMASK, &old_set, NULL);
-}
diff --git a/support/format_nss.h b/support/format_nss.h
deleted file mode 100644
index fb4597c238..0000000000
--- a/support/format_nss.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* String formatting functions for NSS- and DNS-related data.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_FORMAT_NSS_H
-#define SUPPORT_FORMAT_NSS_H
-
-#include <netdb.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* 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_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 *);
-
-__END_DECLS
-
-#endif /* SUPPORT_FORMAT_NSS_H */
diff --git a/support/ignore_stderr.c b/support/ignore_stderr.c
deleted file mode 100644
index 7b77a2cd56..0000000000
--- a/support/ignore_stderr.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Avoid all the buffer overflow messages on stderr.
- Copyright (C) 2015-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <fcntl.h>
-#include <paths.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-void
-ignore_stderr (void)
-{
- int fd = open (_PATH_DEVNULL, O_WRONLY);
- if (fd == -1)
- close (STDERR_FILENO);
- else
- {
- dup2 (fd, STDERR_FILENO);
- close (fd);
- }
- setenv ("LIBC_FATAL_STDERR_", "1", 1);
-}
diff --git a/support/namespace.h b/support/namespace.h
deleted file mode 100644
index e1ccaa1ef0..0000000000
--- a/support/namespace.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Entering namespaces for test case isolation.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_NAMESPACE_H
-#define SUPPORT_NAMESPACE_H
-
-#include <stdbool.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Attempts to become root (or acquire root-like privileges), possibly
- with the help of user namespaces. Return true if (restricted) root
- privileges could be attained in some way. Print diagnostics to
- standard output.
-
- Note that this function generally has to be called before a process
- becomes multi-threaded, otherwise it may fail with insufficient
- privileges on systems which would support this operation for
- single-threaded processes. */
-bool support_become_root (void);
-
-/* Return true if this process can perform a chroot operation. In
- general, this is only possible if support_become_root has been
- called. Note that the actual test is performed in a subprocess,
- after fork, so that the file system root of the original process is
- not changed. */
-bool support_can_chroot (void);
-
-/* Enter a network namespace (and a UTS namespace if possible) and
- configure the loopback interface. Return true if a network
- namespace could be created. Print diagnostics to standard output.
- If a network namespace could be created, but networking in it could
- not be configured, terminate the process. It is recommended to
- call support_become_root before this function so that the process
- has sufficient privileges. */
-bool support_enter_network_namespace (void);
-
-/* Return true if support_enter_network_namespace managed to enter a
- UTS namespace. */
-bool support_in_uts_namespace (void);
-
-/* Invoke CALLBACK (CLOSURE) in a subprocess created using fork.
- Terminate the calling process if the subprocess exits with a
- non-zero exit status. */
-void support_isolate_in_subprocess (void (*callback) (void *), void *closure);
-
-__END_DECLS
-
-#endif
diff --git a/support/oom_error.c b/support/oom_error.c
deleted file mode 100644
index 7816978273..0000000000
--- a/support/oom_error.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Reporting out-of-memory errors.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-void
-oom_error (const char *function, size_t size)
-{
- printf ("%s: unable to allocate %zu bytes: %m\n", function, size);
- exit (1);
-}
diff --git a/support/resolv_test.c b/support/resolv_test.c
deleted file mode 100644
index 050cd7154b..0000000000
--- a/support/resolv_test.c
+++ /dev/null
@@ -1,1202 +0,0 @@
-/* DNS test framework and libresolv redirection.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/resolv_test.h>
-
-#include <arpa/inet.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <nss.h>
-#include <resolv.h>
-#include <search.h>
-#include <stdlib.h>
-#include <string.h>
-#include <support/check.h>
-#include <support/namespace.h>
-#include <support/support.h>
-#include <support/test-driver.h>
-#include <support/xsocket.h>
-#include <support/xthread.h>
-#include <support/xunistd.h>
-#include <sys/uio.h>
-#include <unistd.h>
-
-/* Response builder. */
-
-enum
- {
- max_response_length = 65536
- };
-
-/* List of pointers to be freed. The hash table implementation
- (struct hsearch_data) does not provide a way to deallocate all
- objects, so this approach is used to avoid memory leaks. */
-struct to_be_freed
-{
- struct to_be_freed *next;
- void *ptr;
-};
-
-struct resolv_response_builder
-{
- const unsigned char *query_buffer;
- size_t query_length;
-
- size_t offset; /* Bytes written so far in buffer. */
- ns_sect section; /* Current section in the DNS packet. */
- unsigned int truncate_bytes; /* Bytes to remove at end of response. */
- bool drop; /* Discard generated response. */
- bool close; /* Close TCP client connection. */
-
- /* Offset of the two-byte RDATA length field in the currently
- written RDATA sub-structure. 0 if no RDATA is being written. */
- size_t current_rdata_offset;
-
- /* Hash table for locating targets for label compression. */
- struct hsearch_data compression_offsets;
- /* List of pointers which need to be freed. Used for domain names
- involved in label compression. */
- struct to_be_freed *to_be_freed;
-
- /* Must be last. Not zeroed for performance reasons. */
- unsigned char buffer[max_response_length];
-};
-
-/* Response builder. */
-
-/* Add a pointer to the list of pointers to be freed when B is
- deallocated. */
-static void
-response_push_pointer_to_free (struct resolv_response_builder *b, void *ptr)
-{
- if (ptr == NULL)
- return;
- struct to_be_freed *e = xmalloc (sizeof (*e));
- *e = (struct to_be_freed) {b->to_be_freed, ptr};
- b->to_be_freed = e;
-}
-
-void
-resolv_response_init (struct resolv_response_builder *b,
- struct resolv_response_flags flags)
-{
- if (b->offset > 0)
- FAIL_EXIT1 ("response_init: called at offset %zu", b->offset);
- if (b->query_length < 12)
- FAIL_EXIT1 ("response_init called for a query of size %zu",
- b->query_length);
- if (flags.rcode > 15)
- FAIL_EXIT1 ("response_init: invalid RCODE %u", flags.rcode);
-
- /* Copy the transaction ID. */
- b->buffer[0] = b->query_buffer[0];
- b->buffer[1] = b->query_buffer[1];
-
- /* Initialize the flags. */
- b->buffer[2] = 0x80; /* Mark as response. */
- b->buffer[2] |= b->query_buffer[2] & 0x01; /* Copy the RD bit. */
- if (flags.tc)
- b->buffer[2] |= 0x02;
- b->buffer[3] = 0x80 | flags.rcode; /* Always set RA. */
-
- /* Fill in the initial section count values. */
- b->buffer[4] = flags.qdcount >> 8;
- b->buffer[5] = flags.qdcount;
- b->buffer[6] = flags.ancount >> 8;
- b->buffer[7] = flags.ancount;
- b->buffer[8] = flags.nscount >> 8;
- b->buffer[9] = flags.nscount;
- b->buffer[10] = flags.adcount >> 8;
- b->buffer[11] = flags.adcount;
-
- b->offset = 12;
-}
-
-void
-resolv_response_section (struct resolv_response_builder *b, ns_sect section)
-{
- if (b->offset == 0)
- FAIL_EXIT1 ("resolv_response_section: response_init not called before");
- if (section < b->section)
- FAIL_EXIT1 ("resolv_response_section: cannot go back to previous section");
- b->section = section;
-}
-
-/* Add a single byte to B. */
-static inline void
-response_add_byte (struct resolv_response_builder *b, unsigned char ch)
-{
- if (b->offset == max_response_length)
- FAIL_EXIT1 ("DNS response exceeds 64 KiB limit");
- b->buffer[b->offset] = ch;
- ++b->offset;
-}
-
-/* Add a 16-bit word VAL to B, in big-endian format. */
-static void
-response_add_16 (struct resolv_response_builder *b, uint16_t val)
-{
- response_add_byte (b, val >> 8);
- response_add_byte (b, val);
-}
-
-/* Increment the pers-section record counter in the packet header. */
-static void
-response_count_increment (struct resolv_response_builder *b)
-{
- unsigned int offset = b->section;
- offset = 4 + 2 * offset;
- ++b->buffer[offset + 1];
- if (b->buffer[offset + 1] == 0)
- {
- /* Carry. */
- ++b->buffer[offset];
- if (b->buffer[offset] == 0)
- /* Overflow. */
- FAIL_EXIT1 ("too many records in section");
- }
-}
-
-void
-resolv_response_add_question (struct resolv_response_builder *b,
- const char *name, uint16_t class, uint16_t type)
-{
- if (b->offset == 0)
- FAIL_EXIT1 ("resolv_response_add_question: "
- "resolv_response_init not called");
- if (b->section != ns_s_qd)
- FAIL_EXIT1 ("resolv_response_add_question: "
- "must be called in the question section");
-
- resolv_response_add_name (b, name);
- response_add_16 (b, type);
- response_add_16 (b, class);
-
- response_count_increment (b);
-}
-
-void
-resolv_response_add_name (struct resolv_response_builder *b,
- const char *const origname)
-{
- /* Normalized name. */
- char *name;
- /* Normalized name with case preserved. */
- char *name_case;
- {
- size_t namelen = strlen (origname);
- /* Remove trailing dots. FIXME: Handle trailing quoted dots. */
- while (namelen > 0 && origname[namelen - 1] == '.')
- --namelen;
- name = xmalloc (namelen + 1);
- name_case = xmalloc (namelen + 1);
- /* Copy and convert to lowercase. FIXME: This needs to normalize
- escaping as well. */
- for (size_t i = 0; i < namelen; ++i)
- {
- char ch = origname[i];
- name_case[i] = ch;
- if ('A' <= ch && ch <= 'Z')
- ch = ch - 'A' + 'a';
- name[i] = ch;
- }
- name[namelen] = 0;
- name_case[namelen] = 0;
- }
- char *name_start = name;
- char *name_case_start = name_case;
-
- bool compression = false;
- while (*name)
- {
- /* Search for a previous name we can reference. */
- ENTRY new_entry =
- {
- .key = name,
- .data = (void *) (uintptr_t) b->offset,
- };
-
- /* If the label can be a compression target because it is at a
- reachable offset, add it to the hash table. */
- ACTION action;
- if (b->offset < (1 << 12))
- action = ENTER;
- else
- action = FIND;
-
- /* Search for known compression offsets in the hash table. */
- ENTRY *e;
- if (hsearch_r (new_entry, action, &e, &b->compression_offsets) == 0)
- {
- if (action == FIND && errno == ESRCH)
- /* Fall through. */
- e = NULL;
- else
- FAIL_EXIT1 ("hsearch_r failure in name compression: %m");
- }
-
- /* The name is known. Reference the previous location. */
- if (e != NULL && e->data != new_entry.data)
- {
- size_t old_offset = (uintptr_t) e->data;
- response_add_byte (b, 0xC0 | (old_offset >> 8));
- response_add_byte (b, old_offset);
- compression = true;
- break;
- }
-
- /* The name does not exist yet. Write one label. First, add
- room for the label length. */
- size_t buffer_label_offset = b->offset;
- response_add_byte (b, 0);
-
- /* Copy the label. */
- while (true)
- {
- char ch = *name_case;
- if (ch == '\0')
- break;
- ++name;
- ++name_case;
- if (ch == '.')
- break;
- /* FIXME: Handle escaping. */
- response_add_byte (b, ch);
- }
-
- /* Patch in the label length. */
- size_t label_length = b->offset - buffer_label_offset - 1;
- if (label_length == 0)
- FAIL_EXIT1 ("empty label in name compression: %s", origname);
- if (label_length > 63)
- FAIL_EXIT1 ("label too long in name compression: %s", origname);
- b->buffer[buffer_label_offset] = label_length;
-
- /* Continue with the tail of the name and the next label. */
- }
-
- if (compression)
- {
- /* If we found an immediate match for the name, we have not put
- it into the hash table, and can free it immediately. */
- if (name == name_start)
- free (name_start);
- else
- response_push_pointer_to_free (b, name_start);
- }
- else
- {
- /* Terminate the sequence of labels. With compression, this is
- implicit in the compression reference. */
- response_add_byte (b, 0);
- response_push_pointer_to_free (b, name_start);
- }
-
- free (name_case_start);
-}
-
-void
-resolv_response_open_record (struct resolv_response_builder *b,
- const char *name,
- uint16_t class, uint16_t type, uint32_t ttl)
-{
- if (b->section == ns_s_qd)
- FAIL_EXIT1 ("resolv_response_open_record called in question section");
- if (b->current_rdata_offset != 0)
- FAIL_EXIT1 ("resolv_response_open_record called with open record");
-
- resolv_response_add_name (b, name);
- response_add_16 (b, type);
- response_add_16 (b, class);
- response_add_16 (b, ttl >> 16);
- response_add_16 (b, ttl);
-
- b->current_rdata_offset = b->offset;
- /* Add room for the RDATA length. */
- response_add_16 (b, 0);
-}
-
-
-void
-resolv_response_close_record (struct resolv_response_builder *b)
-{
- size_t rdata_offset = b->current_rdata_offset;
- if (rdata_offset == 0)
- FAIL_EXIT1 ("response_close_record called without open record");
- size_t rdata_length = b->offset - rdata_offset - 2;
- if (rdata_length > 65535)
- FAIL_EXIT1 ("RDATA length %zu exceeds limit", rdata_length);
- b->buffer[rdata_offset] = rdata_length >> 8;
- b->buffer[rdata_offset + 1] = rdata_length;
- response_count_increment (b);
- b->current_rdata_offset = 0;
-}
-
-void
-resolv_response_add_data (struct resolv_response_builder *b,
- const void *data, size_t length)
-{
- size_t remaining = max_response_length - b->offset;
- if (remaining < length)
- FAIL_EXIT1 ("resolv_response_add_data: not enough room for %zu bytes",
- length);
- memcpy (b->buffer + b->offset, data, length);
- b->offset += length;
-}
-
-void
-resolv_response_drop (struct resolv_response_builder *b)
-{
- b->drop = true;
-}
-
-void
-resolv_response_close (struct resolv_response_builder *b)
-{
- b->close = true;
-}
-
-void
-resolv_response_truncate_data (struct resolv_response_builder *b, size_t count)
-{
- if (count > 65535)
- FAIL_EXIT1 ("resolv_response_truncate_data: argument too large: %zu",
- count);
- b->truncate_bytes = count;
-}
-
-
-size_t
-resolv_response_length (const struct resolv_response_builder *b)
-{
- return b->offset;
-}
-
-unsigned char *
-resolv_response_buffer (const struct resolv_response_builder *b)
-{
- unsigned char *result = xmalloc (b->offset);
- memcpy (result, b->buffer, b->offset);
- return result;
-}
-
-static struct resolv_response_builder *
-response_builder_allocate
- (const unsigned char *query_buffer, size_t query_length)
-{
- struct resolv_response_builder *b = xmalloc (sizeof (*b));
- memset (b, 0, offsetof (struct resolv_response_builder, buffer));
- b->query_buffer = query_buffer;
- b->query_length = query_length;
- TEST_VERIFY_EXIT (hcreate_r (10000, &b->compression_offsets) != 0);
- return b;
-}
-
-static void
-response_builder_free (struct resolv_response_builder *b)
-{
- struct to_be_freed *current = b->to_be_freed;
- while (current != NULL)
- {
- struct to_be_freed *next = current->next;
- free (current->ptr);
- free (current);
- current = next;
- }
- hdestroy_r (&b->compression_offsets);
- free (b);
-}
-
-/* DNS query processing. */
-
-/* Data extracted from the question section of a DNS packet. */
-struct query_info
-{
- char qname[MAXDNAME];
- uint16_t qclass;
- uint16_t qtype;
- struct resolv_edns_info edns;
-};
-
-/* Update *INFO from the specified DNS packet. */
-static void
-parse_query (struct query_info *info,
- const unsigned char *buffer, size_t length)
-{
- HEADER hd;
- _Static_assert (sizeof (hd) == 12, "DNS header size");
- if (length < sizeof (hd))
- FAIL_EXIT1 ("malformed DNS query: too short: %zu bytes", length);
- memcpy (&hd, buffer, sizeof (hd));
-
- if (ntohs (hd.qdcount) != 1)
- FAIL_EXIT1 ("malformed DNS query: wrong question count: %d",
- (int) ntohs (hd.qdcount));
- if (ntohs (hd.ancount) != 0)
- FAIL_EXIT1 ("malformed DNS query: wrong answer count: %d",
- (int) ntohs (hd.ancount));
- if (ntohs (hd.nscount) != 0)
- FAIL_EXIT1 ("malformed DNS query: wrong authority count: %d",
- (int) ntohs (hd.nscount));
- if (ntohs (hd.arcount) > 1)
- FAIL_EXIT1 ("malformed DNS query: wrong additional count: %d",
- (int) ntohs (hd.arcount));
-
- int ret = dn_expand (buffer, buffer + length, buffer + sizeof (hd),
- info->qname, sizeof (info->qname));
- if (ret < 0)
- FAIL_EXIT1 ("malformed DNS query: cannot uncompress QNAME");
-
- /* Obtain QTYPE and QCLASS. */
- size_t remaining = length - (12 + ret);
- struct
- {
- uint16_t qtype;
- uint16_t qclass;
- } qtype_qclass;
- if (remaining < sizeof (qtype_qclass))
- FAIL_EXIT1 ("malformed DNS query: "
- "query lacks QCLASS/QTYPE, QNAME: %s", info->qname);
- memcpy (&qtype_qclass, buffer + 12 + ret, sizeof (qtype_qclass));
- info->qclass = ntohs (qtype_qclass.qclass);
- info->qtype = ntohs (qtype_qclass.qtype);
-
- memset (&info->edns, 0, sizeof (info->edns));
- if (ntohs (hd.arcount) > 0)
- {
- /* Parse EDNS record. */
- struct __attribute__ ((packed, aligned (1)))
- {
- uint8_t root;
- uint16_t rtype;
- uint16_t payload;
- uint8_t edns_extended_rcode;
- uint8_t edns_version;
- uint16_t flags;
- uint16_t rdatalen;
- } rr;
- _Static_assert (sizeof (rr) == 11, "EDNS record size");
-
- if (remaining < 4 + sizeof (rr))
- FAIL_EXIT1 ("mailformed DNS query: no room for EDNS record");
- memcpy (&rr, buffer + 12 + ret + 4, sizeof (rr));
- if (rr.root != 0)
- FAIL_EXIT1 ("malformed DNS query: invalid OPT RNAME: %d\n", rr.root);
- if (rr.rtype != htons (41))
- FAIL_EXIT1 ("malformed DNS query: invalid OPT type: %d\n",
- ntohs (rr.rtype));
- info->edns.active = true;
- info->edns.extended_rcode = rr.edns_extended_rcode;
- info->edns.version = rr.edns_version;
- info->edns.flags = ntohs (rr.flags);
- info->edns.payload_size = ntohs (rr.payload);
- }
-}
-
-
-/* Main testing framework. */
-
-/* Per-server information. One struct is allocated for each test
- server. */
-struct resolv_test_server
-{
- /* Local address of the server. UDP and TCP use the same port. */
- struct sockaddr_in address;
-
- /* File descriptor of the UDP server, or -1 if this server is
- disabled. */
- int socket_udp;
-
- /* File descriptor of the TCP server, or -1 if this server is
- disabled. */
- int socket_tcp;
-
- /* Counter of the number of responses processed so far. */
- size_t response_number;
-
- /* Thread handles for the server threads (if not disabled in the
- configuration). */
- pthread_t thread_udp;
- pthread_t thread_tcp;
-};
-
-/* Main struct for keeping track of libresolv redirection and
- testing. */
-struct resolv_test
-{
- /* After initialization, any access to the struct must be performed
- while this lock is acquired. */
- pthread_mutex_t lock;
-
- /* Data for each test server. */
- struct resolv_test_server servers[resolv_max_test_servers];
-
- /* Used if config.single_thread_udp is true. */
- pthread_t thread_udp_single;
-
- struct resolv_redirect_config config;
- bool termination_requested;
-};
-
-/* Function implementing a server thread. */
-typedef void (*thread_callback) (struct resolv_test *, int server_index);
-
-/* Storage for thread-specific data, for passing to the
- thread_callback function. */
-struct thread_closure
-{
- struct resolv_test *obj; /* Current test object. */
- thread_callback callback; /* Function to call. */
- int server_index; /* Index of the implemented server. */
-};
-
-/* Wrap response_callback as a function which can be passed to
- pthread_create. */
-static void *
-thread_callback_wrapper (void *arg)
-{
- struct thread_closure *closure = arg;
- closure->callback (closure->obj, closure->server_index);
- free (closure);
- return NULL;
-}
-
-/* Start a server thread for the specified SERVER_INDEX, implemented
- by CALLBACK. */
-static pthread_t
-start_server_thread (struct resolv_test *obj, int server_index,
- thread_callback callback)
-{
- struct thread_closure *closure = xmalloc (sizeof (*closure));
- *closure = (struct thread_closure)
- {
- .obj = obj,
- .callback = callback,
- .server_index = server_index,
- };
- return xpthread_create (NULL, thread_callback_wrapper, closure);
-}
-
-/* Process one UDP query. Return false if a termination requested has
- been detected. */
-static bool
-server_thread_udp_process_one (struct resolv_test *obj, int server_index)
-{
- unsigned char query[512];
- struct sockaddr_storage peer;
- socklen_t peerlen = sizeof (peer);
- size_t length = xrecvfrom (obj->servers[server_index].socket_udp,
- query, sizeof (query), 0,
- (struct sockaddr *) &peer, &peerlen);
- /* Check for termination. */
- {
- bool termination_requested;
- xpthread_mutex_lock (&obj->lock);
- termination_requested = obj->termination_requested;
- xpthread_mutex_unlock (&obj->lock);
- if (termination_requested)
- return false;
- }
-
-
- struct query_info qinfo;
- parse_query (&qinfo, query, length);
- if (test_verbose > 0)
- {
- if (test_verbose > 1)
- printf ("info: UDP server %d: incoming query:"
- " %zd bytes, %s/%u/%u, tnxid=0x%02x%02x\n",
- server_index, length, qinfo.qname, qinfo.qclass, qinfo.qtype,
- query[0], query[1]);
- else
- printf ("info: UDP server %d: incoming query:"
- " %zd bytes, %s/%u/%u\n",
- server_index, length, qinfo.qname, qinfo.qclass, qinfo.qtype);
- }
-
- struct resolv_response_context ctx =
- {
- .query_buffer = query,
- .query_length = length,
- .server_index = server_index,
- .tcp = false,
- .edns = qinfo.edns,
- };
- struct resolv_response_builder *b = response_builder_allocate (query, length);
- obj->config.response_callback
- (&ctx, b, qinfo.qname, qinfo.qclass, qinfo.qtype);
-
- if (b->drop)
- {
- if (test_verbose)
- printf ("info: UDP server %d: dropping response to %s/%u/%u\n",
- server_index, qinfo.qname, qinfo.qclass, qinfo.qtype);
- }
- else
- {
- if (test_verbose)
- {
- if (b->offset >= 12)
- printf ("info: UDP server %d: sending response:"
- " %zu bytes, RCODE %d (for %s/%u/%u)\n",
- server_index, b->offset, b->buffer[3] & 0x0f,
- qinfo.qname, qinfo.qclass, qinfo.qtype);
- else
- printf ("info: UDP server %d: sending response: %zu bytes"
- " (for %s/%u/%u)\n",
- server_index, b->offset,
- qinfo.qname, qinfo.qclass, qinfo.qtype);
- if (b->truncate_bytes > 0)
- printf ("info: truncated by %u bytes\n", b->truncate_bytes);
- }
- size_t to_send = b->offset;
- if (to_send < b->truncate_bytes)
- to_send = 0;
- else
- to_send -= b->truncate_bytes;
-
- /* Ignore most errors here because the other end may have closed
- the socket. */
- if (sendto (obj->servers[server_index].socket_udp,
- b->buffer, to_send, 0,
- (struct sockaddr *) &peer, peerlen) < 0)
- TEST_VERIFY_EXIT (errno != EBADF);
- }
- response_builder_free (b);
- return true;
-}
-
-/* UDP thread_callback function. Variant for one thread per
- server. */
-static void
-server_thread_udp (struct resolv_test *obj, int server_index)
-{
- while (server_thread_udp_process_one (obj, server_index))
- ;
-}
-
-/* Single-threaded UDP processing function, for the single_thread_udp
- case. */
-static void *
-server_thread_udp_single (void *closure)
-{
- struct resolv_test *obj = closure;
-
- struct pollfd fds[resolv_max_test_servers];
- for (int server_index = 0; server_index < resolv_max_test_servers;
- ++server_index)
- if (obj->config.servers[server_index].disable_udp)
- fds[server_index] = (struct pollfd) {.fd = -1};
- else
- {
- fds[server_index] = (struct pollfd)
- {
- .fd = obj->servers[server_index].socket_udp,
- .events = POLLIN
- };
-
- /* Make the socket non-blocking. */
- int flags = fcntl (obj->servers[server_index].socket_udp, F_GETFL, 0);
- if (flags < 0)
- FAIL_EXIT1 ("fcntl (F_GETFL): %m");
- flags |= O_NONBLOCK;
- if (fcntl (obj->servers[server_index].socket_udp, F_SETFL, flags) < 0)
- FAIL_EXIT1 ("fcntl (F_SETFL): %m");
- }
-
- while (true)
- {
- xpoll (fds, resolv_max_test_servers, -1);
- for (int server_index = 0; server_index < resolv_max_test_servers;
- ++server_index)
- if (fds[server_index].revents != 0)
- {
- if (!server_thread_udp_process_one (obj, server_index))
- goto out;
- fds[server_index].revents = 0;
- }
- }
-
- out:
- return NULL;
-}
-
-/* Start the single UDP handler thread (for the single_thread_udp
- case). */
-static void
-start_server_thread_udp_single (struct resolv_test *obj)
-{
- obj->thread_udp_single
- = xpthread_create (NULL, server_thread_udp_single, obj);
-}
-
-/* Data describing a TCP client connect. */
-struct tcp_thread_closure
-{
- struct resolv_test *obj;
- int server_index;
- int client_socket;
-};
-
-/* Read a complete DNS query packet. If EOF_OK, an immediate
- end-of-file condition is acceptable. */
-static bool
-read_fully (int fd, void *buf, size_t len, bool eof_ok)
-{
- const void *const end = buf + len;
- while (buf < end)
- {
- ssize_t ret = read (fd, buf, end - buf);
- if (ret == 0)
- {
- if (!eof_ok)
- {
- support_record_failure ();
- printf ("error: unexpected EOF on TCP connection\n");
- }
- return false;
- }
- else if (ret < 0)
- {
- if (!eof_ok || errno != ECONNRESET)
- {
- support_record_failure ();
- printf ("error: TCP read: %m\n");
- }
- return false;
- }
- buf += ret;
- eof_ok = false;
- }
- return true;
-}
-
-/* Write an array of iovecs. Terminate the process on failure. */
-static void
-writev_fully (int fd, struct iovec *buffers, size_t count)
-{
- while (count > 0)
- {
- /* Skip zero-length write requests. */
- if (buffers->iov_len == 0)
- {
- ++buffers;
- --count;
- continue;
- }
- /* Try to rewrite the remaing buffers. */
- ssize_t ret = writev (fd, buffers, count);
- if (ret < 0)
- FAIL_EXIT1 ("writev: %m");
- if (ret == 0)
- FAIL_EXIT1 ("writev: invalid return value zero");
- /* Find the buffers that were successfully written. */
- while (ret > 0)
- {
- if (count == 0)
- FAIL_EXIT1 ("internal writev consistency failure");
- /* Current buffer was partially written. */
- if (buffers->iov_len > (size_t) ret)
- {
- buffers->iov_base += ret;
- buffers->iov_len -= ret;
- ret = 0;
- }
- else
- {
- ret -= buffers->iov_len;
- buffers->iov_len = 0;
- ++buffers;
- --count;
- }
- }
- }
-}
-
-/* Thread callback for handling a single established TCP connection to
- a client. */
-static void *
-server_thread_tcp_client (void *arg)
-{
- struct tcp_thread_closure *closure = arg;
-
- while (true)
- {
- /* Read packet length. */
- uint16_t query_length;
- if (!read_fully (closure->client_socket,
- &query_length, sizeof (query_length), true))
- break;
- query_length = ntohs (query_length);
-
- /* Read the packet. */
- unsigned char *query_buffer = xmalloc (query_length);
- read_fully (closure->client_socket, query_buffer, query_length, false);
-
- struct query_info qinfo;
- parse_query (&qinfo, query_buffer, query_length);
- if (test_verbose > 0)
- {
- if (test_verbose > 1)
- printf ("info: UDP server %d: incoming query:"
- " %d bytes, %s/%u/%u, tnxid=0x%02x%02x\n",
- closure->server_index, query_length,
- qinfo.qname, qinfo.qclass, qinfo.qtype,
- query_buffer[0], query_buffer[1]);
- else
- printf ("info: TCP server %d: incoming query:"
- " %u bytes, %s/%u/%u\n",
- closure->server_index, query_length,
- qinfo.qname, qinfo.qclass, qinfo.qtype);
- }
-
- struct resolv_response_context ctx =
- {
- .query_buffer = query_buffer,
- .query_length = query_length,
- .server_index = closure->server_index,
- .tcp = true,
- .edns = qinfo.edns,
- };
- struct resolv_response_builder *b = response_builder_allocate
- (query_buffer, query_length);
- closure->obj->config.response_callback
- (&ctx, b, qinfo.qname, qinfo.qclass, qinfo.qtype);
-
- if (b->drop)
- {
- if (test_verbose)
- printf ("info: TCP server %d: dropping response to %s/%u/%u\n",
- closure->server_index,
- qinfo.qname, qinfo.qclass, qinfo.qtype);
- }
- else
- {
- if (test_verbose)
- printf ("info: TCP server %d: sending response: %zu bytes"
- " (for %s/%u/%u)\n",
- closure->server_index, b->offset,
- qinfo.qname, qinfo.qclass, qinfo.qtype);
- uint16_t length = htons (b->offset);
- size_t to_send = b->offset;
- if (to_send < b->truncate_bytes)
- to_send = 0;
- else
- to_send -= b->truncate_bytes;
- struct iovec buffers[2] =
- {
- {&length, sizeof (length)},
- {b->buffer, to_send}
- };
- writev_fully (closure->client_socket, buffers, 2);
- }
- bool close_flag = b->close;
- response_builder_free (b);
- free (query_buffer);
- if (close_flag)
- break;
- }
-
- xclose (closure->client_socket);
- free (closure);
- return NULL;
-}
-
-/* thread_callback for the TCP case. Accept connections and create a
- new thread for each client. */
-static void
-server_thread_tcp (struct resolv_test *obj, int server_index)
-{
- while (true)
- {
- /* Get the client conenction. */
- int client_socket = xaccept
- (obj->servers[server_index].socket_tcp, NULL, NULL);
-
- /* Check for termination. */
- xpthread_mutex_lock (&obj->lock);
- if (obj->termination_requested)
- {
- xpthread_mutex_unlock (&obj->lock);
- xclose (client_socket);
- break;
- }
- xpthread_mutex_unlock (&obj->lock);
-
- /* Spawn a new thread for handling this connection. */
- struct tcp_thread_closure *closure = xmalloc (sizeof (*closure));
- *closure = (struct tcp_thread_closure)
- {
- .obj = obj,
- .server_index = server_index,
- .client_socket = client_socket,
- };
-
- pthread_t thr
- = xpthread_create (NULL, server_thread_tcp_client, closure);
- /* TODO: We should keep track of this thread so that we can
- block in resolv_test_end until it has exited. */
- xpthread_detach (thr);
- }
-}
-
-/* Create UDP and TCP server sockets. */
-static void
-make_server_sockets (struct resolv_test_server *server)
-{
- while (true)
- {
- server->socket_udp = xsocket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- server->socket_tcp = xsocket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
-
- /* Pick the address for the UDP socket. */
- server->address = (struct sockaddr_in)
- {
- .sin_family = AF_INET,
- .sin_addr = {.s_addr = htonl (INADDR_LOOPBACK)}
- };
- xbind (server->socket_udp,
- (struct sockaddr *)&server->address, sizeof (server->address));
-
- /* Retrieve the address. */
- socklen_t addrlen = sizeof (server->address);
- xgetsockname (server->socket_udp,
- (struct sockaddr *)&server->address, &addrlen);
-
- /* Bind the TCP socket to the same address. */
- {
- int on = 1;
- xsetsockopt (server->socket_tcp, SOL_SOCKET, SO_REUSEADDR,
- &on, sizeof (on));
- }
- if (bind (server->socket_tcp,
- (struct sockaddr *)&server->address,
- sizeof (server->address)) != 0)
- {
- /* Port collision. The UDP bind succeeded, but the TCP BIND
- failed. We assume here that the kernel will pick the
- next local UDP address randomly. */
- if (errno == EADDRINUSE)
- {
- xclose (server->socket_udp);
- xclose (server->socket_tcp);
- continue;
- }
- FAIL_EXIT1 ("TCP bind: %m");
- }
- xlisten (server->socket_tcp, 5);
- break;
- }
-}
-
-/* One-time initialization of NSS. */
-static void
-resolv_redirect_once (void)
-{
- /* Only use nss_dns. */
- __nss_configure_lookup ("hosts", "dns");
- __nss_configure_lookup ("networks", "dns");
- /* Enter a network namespace for isolation and firewall state
- cleanup. The tests will still work if these steps fail, but they
- may be less reliable. */
- support_become_root ();
- support_enter_network_namespace ();
-}
-pthread_once_t resolv_redirect_once_var = PTHREAD_ONCE_INIT;
-
-void
-resolv_test_init (void)
-{
- /* Perform one-time initialization of NSS. */
- xpthread_once (&resolv_redirect_once_var, resolv_redirect_once);
-}
-
-/* Copy the search path from CONFIG.search to the _res object. */
-static void
-set_search_path (struct resolv_redirect_config config)
-{
- memset (_res.defdname, 0, sizeof (_res.defdname));
- memset (_res.dnsrch, 0, sizeof (_res.dnsrch));
-
- char *current = _res.defdname;
- char *end = current + sizeof (_res.defdname);
-
- for (unsigned int i = 0;
- i < sizeof (config.search) / sizeof (config.search[0]); ++i)
- {
- if (config.search[i] == NULL)
- continue;
-
- size_t length = strlen (config.search[i]) + 1;
- size_t remaining = end - current;
- TEST_VERIFY_EXIT (length <= remaining);
- memcpy (current, config.search[i], length);
- _res.dnsrch[i] = current;
- current += length;
- }
-}
-
-struct resolv_test *
-resolv_test_start (struct resolv_redirect_config config)
-{
- /* Apply configuration defaults. */
- if (config.nscount == 0)
- config.nscount = resolv_max_test_servers;
-
- struct resolv_test *obj = xmalloc (sizeof (*obj));
- *obj = (struct resolv_test) {
- .config = config,
- .lock = PTHREAD_MUTEX_INITIALIZER,
- };
-
- resolv_test_init ();
-
- /* Create all the servers, to reserve the necessary ports. */
- for (int server_index = 0; server_index < config.nscount; ++server_index)
- make_server_sockets (obj->servers + server_index);
-
- /* Start server threads. Disable the server ports, as
- requested. */
- for (int server_index = 0; server_index < config.nscount; ++server_index)
- {
- struct resolv_test_server *server = obj->servers + server_index;
- if (config.servers[server_index].disable_udp)
- {
- xclose (server->socket_udp);
- server->socket_udp = -1;
- }
- else if (!config.single_thread_udp)
- server->thread_udp = start_server_thread (obj, server_index,
- server_thread_udp);
- if (config.servers[server_index].disable_tcp)
- {
- xclose (server->socket_tcp);
- server->socket_tcp = -1;
- }
- else
- server->thread_tcp = start_server_thread (obj, server_index,
- server_thread_tcp);
- }
- if (config.single_thread_udp)
- start_server_thread_udp_single (obj);
-
- int timeout = 1;
-
- /* Initialize libresolv. */
- TEST_VERIFY_EXIT (res_init () == 0);
-
- /* Disable IPv6 name server addresses. The code below only
- overrides the IPv4 addresses. */
- __res_iclose (&_res, true);
- _res._u._ext.nscount = 0;
-
- /* Redirect queries to the server socket. */
- if (test_verbose)
- {
- printf ("info: old timeout value: %d\n", _res.retrans);
- printf ("info: old retry attempt value: %d\n", _res.retry);
- printf ("info: old _res.options: 0x%lx\n", _res.options);
- printf ("info: old _res.nscount value: %d\n", _res.nscount);
- printf ("info: old _res.ndots value: %d\n", _res.ndots);
- }
- _res.retrans = timeout;
- _res.retry = 4;
- _res.nscount = config.nscount;
- _res.options = RES_INIT | RES_RECURSE | RES_DEFNAMES | RES_DNSRCH;
- _res.ndots = 1;
- if (test_verbose)
- {
- printf ("info: new timeout value: %d\n", _res.retrans);
- printf ("info: new retry attempt value: %d\n", _res.retry);
- printf ("info: new _res.options: 0x%lx\n", _res.options);
- printf ("info: new _res.nscount value: %d\n", _res.nscount);
- printf ("info: new _res.ndots value: %d\n", _res.ndots);
- }
- for (int server_index = 0; server_index < config.nscount; ++server_index)
- {
- _res.nsaddr_list[server_index] = obj->servers[server_index].address;
- if (test_verbose)
- {
- char buf[256];
- TEST_VERIFY_EXIT
- (inet_ntop (AF_INET, &obj->servers[server_index].address.sin_addr,
- buf, sizeof (buf)) != NULL);
- printf ("info: server %d: %s/%u\n",
- server_index, buf,
- htons (obj->servers[server_index].address.sin_port));
- }
- }
-
- set_search_path (config);
-
- return obj;
-}
-
-void
-resolv_test_end (struct resolv_test *obj)
-{
- res_close ();
-
- xpthread_mutex_lock (&obj->lock);
- obj->termination_requested = true;
- xpthread_mutex_unlock (&obj->lock);
-
- /* Send trigger packets to unblock the server threads. */
- for (int server_index = 0; server_index < obj->config.nscount;
- ++server_index)
- {
- if (!obj->config.servers[server_index].disable_udp)
- {
- int sock = xsocket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- xsendto (sock, "", 1, 0,
- (struct sockaddr *) &obj->servers[server_index].address,
- sizeof (obj->servers[server_index].address));
- xclose (sock);
- }
- if (!obj->config.servers[server_index].disable_tcp)
- {
- int sock = xsocket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
- xconnect (sock,
- (struct sockaddr *) &obj->servers[server_index].address,
- sizeof (obj->servers[server_index].address));
- xclose (sock);
- }
- }
-
- if (obj->config.single_thread_udp)
- xpthread_join (obj->thread_udp_single);
-
- /* Wait for the server threads to terminate. */
- for (int server_index = 0; server_index < obj->config.nscount;
- ++server_index)
- {
- if (!obj->config.servers[server_index].disable_udp)
- {
- if (!obj->config.single_thread_udp)
- xpthread_join (obj->servers[server_index].thread_udp);
- xclose (obj->servers[server_index].socket_udp);
- }
- if (!obj->config.servers[server_index].disable_tcp)
- {
- xpthread_join (obj->servers[server_index].thread_tcp);
- xclose (obj->servers[server_index].socket_tcp);
- }
- }
-
- free (obj);
-}
diff --git a/support/resolv_test.h b/support/resolv_test.h
deleted file mode 100644
index 6498751569..0000000000
--- a/support/resolv_test.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* DNS test framework and libresolv redirection.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_RESOLV_TEST_H
-#define SUPPORT_RESOLV_TEST_H
-
-#include <arpa/nameser.h>
-#include <stdbool.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Information about EDNS properties of a DNS query. */
-struct resolv_edns_info
-{
- bool active;
- uint8_t extended_rcode;
- uint8_t version;
- uint16_t flags;
- uint16_t payload_size;
-};
-
-/* This struct provides context information when the response callback
- specified in struct resolv_redirect_config is invoked. */
-struct resolv_response_context
-{
- const unsigned char *query_buffer;
- size_t query_length;
- int server_index;
- bool tcp;
- struct resolv_edns_info edns;
-};
-
-/* This opaque struct is used to construct responses from within the
- response callback function. */
-struct resolv_response_builder;
-
-/* This opaque struct collects information about the resolver testing
- currently in progress. */
-struct resolv_test;
-
-enum
- {
- /* Maximum number of test servers supported by the framework. */
- resolv_max_test_servers = 3,
- };
-
-/* Configuration settings specific to individual test servers. */
-struct resolv_redirect_server_config
-{
- bool disable_tcp; /* If true, no TCP server is listening. */
- bool disable_udp; /* If true, no UDP server is listening. */
-};
-
-/* Instructions for setting up the libresolv redirection. */
-struct resolv_redirect_config
-{
- /* The response_callback function is called for every incoming DNS
- packet, over UDP or TCP. It must be specified, the other
- configuration settings are optional. */
- void (*response_callback) (const struct resolv_response_context *,
- struct resolv_response_builder *,
- const char *qname,
- uint16_t qclass, uint16_t qtype);
-
- /* Per-server configuration. */
- struct resolv_redirect_server_config servers[resolv_max_test_servers];
-
- /* Search path entries. The first entry serves as the default
- domain name as well. */
- const char *search[7];
-
- /* Number of servers to activate in resolv. 0 means the default,
- resolv_max_test_servers. */
- int nscount;
-
- /* If true, use a single thread to process all UDP queries. This
- may results in more predictable ordering of queries and
- responses. */
- bool single_thread_udp;
-};
-
-/* Configure NSS to use, nss_dns only for aplicable databases, and try
- to put the process into a network namespace for better isolation.
- This may have to be called before resolv_test_start, before the
- process creates any threads. Otherwise, initialization is
- performed by resolv_test_start implicitly. */
-void resolv_test_init (void);
-
-/* Initiate resolver testing. This updates the _res variable as
- needed. As a side effect, NSS is reconfigured to use nss_dns only
- for aplicable databases, and the process may enter a network
- namespace for better isolation. */
-struct resolv_test *resolv_test_start (struct resolv_redirect_config);
-
-/* Call this function at the end of resolver testing, to free
- resources and report pending errors (if any). */
-void resolv_test_end (struct resolv_test *);
-
-/* The remaining facilities in this file are used for constructing
- response packets from the response_callback function. */
-
-/* Special settings for constructing responses from the callback. */
-struct resolv_response_flags
-{
- /* 4-bit response code to incorporate into the response. */
- unsigned char rcode;
-
- /* If true, the TC (truncation) flag will be set. */
- bool tc;
-
- /* Initial section count values. Can be used to artificially
- increase the counts, for malformed packet testing.*/
- unsigned short qdcount;
- unsigned short ancount;
- unsigned short nscount;
- unsigned short adcount;
-};
-
-/* Begin a new response with the requested flags. Must be called
- first. */
-void resolv_response_init (struct resolv_response_builder *,
- struct resolv_response_flags);
-
-/* Switches to the section in the response packet. Only forward
- movement is supported. */
-void resolv_response_section (struct resolv_response_builder *, ns_sect);
-
-/* Add a question record to the question section. */
-void resolv_response_add_question (struct resolv_response_builder *,
- const char *name, uint16_t class,
- uint16_t type);
-/* Starts a new resource record with the specified owner name, class,
- type, and TTL. Data is supplied with resolv_response_add_data or
- resolv_response_add_name. */
-void resolv_response_open_record (struct resolv_response_builder *,
- const char *name, uint16_t class,
- uint16_t type, uint32_t ttl);
-
-/* Add unstructed bytes to the RDATA part of a resource record. */
-void resolv_response_add_data (struct resolv_response_builder *,
- const void *, size_t);
-
-/* Add a compressed domain name to the RDATA part of a resource
- record. */
-void resolv_response_add_name (struct resolv_response_builder *,
- const char *name);
-
-/* Mark the end of the constructed record. Must be called last. */
-void resolv_response_close_record (struct resolv_response_builder *);
-
-/* Drop this query packet (that is, do not send a response, not even
- an empty packet). */
-void resolv_response_drop (struct resolv_response_builder *);
-
-/* In TCP mode, close the connection after this packet (if a response
- is sent). */
-void resolv_response_close (struct resolv_response_builder *);
-
-/* The size of the response packet built so far. */
-size_t resolv_response_length (const struct resolv_response_builder *);
-
-__END_DECLS
-
-#endif /* SUPPORT_RESOLV_TEST_H */
diff --git a/support/run_diff.h b/support/run_diff.h
deleted file mode 100644
index f65b5dd22c..0000000000
--- a/support/run_diff.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Invoke the system diff tool to compare two strings.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_RUN_DIFF_H
-#define SUPPORT_RUN_DIFF_H
-
-/* Compare the two NUL-terminated strings LEFT and RIGHT using the
- diff tool. Label the sides of the diff with LEFT_LABEL and
- RIGHT_LABEL, respectively.
-
- This function assumes that LEFT and RIGHT are different
- strings. */
-void support_run_diff (const char *left_label, const char *left,
- const char *right_label, const char *right);
-
-#endif /* SUPPORT_RUN_DIFF_H */
diff --git a/support/set_fortify_handler.c b/support/set_fortify_handler.c
deleted file mode 100644
index f434a8082a..0000000000
--- a/support/set_fortify_handler.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Set signal handler for use in fortify tests.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <signal.h>
-
-void
-set_fortify_handler (void (*handler) (int sig))
-{
- struct sigaction sa;
-
- sa.sa_handler = handler;
- sa.sa_flags = 0;
- sigemptyset (&sa.sa_mask);
-
- sigaction (SIGABRT, &sa, NULL);
- ignore_stderr ();
-}
diff --git a/support/support-xstat.c b/support/support-xstat.c
deleted file mode 100644
index 86a81ec601..0000000000
--- a/support/support-xstat.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* stat64 with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-/* NB: Non-standard file name to avoid sysdeps override for xstat. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <sys/stat.h>
-
-void
-xstat (const char *path, struct stat64 *result)
-{
- if (stat64 (path, result) != 0)
- FAIL_EXIT1 ("stat64 (\"%s\"): %m", path);
-}
diff --git a/support/support.h b/support/support.h
deleted file mode 100644
index 4b5f04c2cc..0000000000
--- a/support/support.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Common extra functions.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-/* This header file should only contain definitions compatible with
- C90. (Using __attribute__ is fine because <features.h> provides a
- fallback.) */
-
-#ifndef SUPPORT_H
-#define SUPPORT_H
-
-#include <stddef.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Write a message to standard output. Can be used in signal
- handlers. */
-void write_message (const char *message) __attribute__ ((nonnull (1)));
-
-/* Avoid all the buffer overflow messages on stderr. */
-void ignore_stderr (void);
-
-/* Set fortification error handler. Used when tests want to verify that bad
- code is caught by the library. */
-void set_fortify_handler (void (*handler) (int sig));
-
-/* Report an out-of-memory error for the allocation of SIZE bytes in
- FUNCTION, terminating the process. */
-void oom_error (const char *function, size_t size)
- __attribute__ ((nonnull (1)));
-
-/* Return a pointer to a memory region of SIZE bytes. The memory is
- initialized to zero and will be shared with subprocesses (across
- fork). The returned pointer must be freed using
- support_shared_free; it is not compatible with the malloc
- functions. */
-void *support_shared_allocate (size_t size);
-
-/* Deallocate a pointer returned by support_shared_allocate. */
-void support_shared_free (void *);
-
-/* Write CONTENTS to the file PATH. Create or truncate the file as
- needed. The file mode is 0666 masked by the umask. Terminate the
- process on error. */
-void support_write_file_string (const char *path, const char *contents);
-
-/* Error-checking wrapper functions which terminate the process on
- error. */
-
-void *xmalloc (size_t) __attribute__ ((malloc));
-void *xcalloc (size_t n, size_t s) __attribute__ ((malloc));
-void *xrealloc (void *p, size_t n);
-char *xasprintf (const char *format, ...)
- __attribute__ ((format (printf, 1, 2), malloc));
-char *xstrdup (const char *);
-
-__END_DECLS
-
-#endif /* SUPPORT_H */
diff --git a/support/support_become_root.c b/support/support_become_root.c
deleted file mode 100644
index 3fa0bd4ac0..0000000000
--- a/support/support_become_root.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Acquire root privileges.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/namespace.h>
-
-#include <sched.h>
-#include <stdio.h>
-#include <unistd.h>
-
-bool
-support_become_root (void)
-{
-#ifdef CLONE_NEWUSER
- if (unshare (CLONE_NEWUSER | CLONE_NEWNS) == 0)
- /* Even if we do not have UID zero, we have extended privileges at
- this point. */
- return true;
-#endif
- if (setuid (0) != 0)
- {
- printf ("warning: could not become root outside namespace (%m)\n");
- return false;
- }
- return true;
-}
diff --git a/support/support_can_chroot.c b/support/support_can_chroot.c
deleted file mode 100644
index 0dfd2deb54..0000000000
--- a/support/support_can_chroot.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Return true if the process can perform a chroot operation.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <support/check.h>
-#include <support/namespace.h>
-#include <support/support.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <xunistd.h>
-
-static void
-callback (void *closure)
-{
- int *result = closure;
- struct stat64 before;
- xstat ("/dev", &before);
- if (chroot ("/dev") != 0)
- {
- *result = errno;
- return;
- }
- struct stat64 after;
- xstat ("/", &after);
- TEST_VERIFY (before.st_dev == after.st_dev);
- TEST_VERIFY (before.st_ino == after.st_ino);
- *result = 0;
-}
-
-bool
-support_can_chroot (void)
-{
- int *result = support_shared_allocate (sizeof (*result));
- *result = 0;
- support_isolate_in_subprocess (callback, result);
- bool ok = *result == 0;
- if (!ok)
- {
- static bool already_warned;
- if (!already_warned)
- {
- already_warned = true;
- errno = *result;
- printf ("warning: this process does not support chroot: %m\n");
- }
- }
- support_shared_free (result);
- return ok;
-}
diff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c
deleted file mode 100644
index 030f124252..0000000000
--- a/support/support_capture_subprocess.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Capture output from a subprocess.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/capture_subprocess.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <support/xsocket.h>
-
-static void
-transfer (const char *what, struct pollfd *pfd, struct xmemstream *stream)
-{
- if (pfd->revents != 0)
- {
- char buf[1024];
- ssize_t ret = TEMP_FAILURE_RETRY (read (pfd->fd, buf, sizeof (buf)));
- if (ret < 0)
- {
- support_record_failure ();
- printf ("error: reading from subprocess %s: %m", what);
- pfd->events = 0;
- pfd->revents = 0;
- }
- else if (ret == 0)
- {
- /* EOF reached. Stop listening. */
- pfd->events = 0;
- pfd->revents = 0;
- }
- else
- /* Store the data just read. */
- TEST_VERIFY (fwrite (buf, ret, 1, stream->out) == 1);
- }
-}
-
-struct support_capture_subprocess
-support_capture_subprocess (void (*callback) (void *), void *closure)
-{
- struct support_capture_subprocess result;
- xopen_memstream (&result.out);
- xopen_memstream (&result.err);
-
- int stdout_pipe[2];
- xpipe (stdout_pipe);
- int stderr_pipe[2];
- xpipe (stderr_pipe);
-
- TEST_VERIFY (fflush (stdout) == 0);
- TEST_VERIFY (fflush (stderr) == 0);
-
- pid_t pid = xfork ();
- if (pid == 0)
- {
- xclose (stdout_pipe[0]);
- xclose (stderr_pipe[0]);
- xdup2 (stdout_pipe[1], STDOUT_FILENO);
- xdup2 (stderr_pipe[1], STDERR_FILENO);
- callback (closure);
- _exit (0);
- }
- xclose (stdout_pipe[1]);
- xclose (stderr_pipe[1]);
-
- struct pollfd fds[2] =
- {
- { .fd = stdout_pipe[0], .events = POLLIN },
- { .fd = stderr_pipe[0], .events = POLLIN },
- };
-
- do
- {
- xpoll (fds, 2, -1);
- transfer ("stdout", &fds[0], &result.out);
- transfer ("stderr", &fds[1], &result.err);
- }
- while (fds[0].events != 0 || fds[1].events != 0);
- xclose (stdout_pipe[0]);
- xclose (stderr_pipe[0]);
-
- xfclose_memstream (&result.out);
- xfclose_memstream (&result.err);
- xwaitpid (pid, &result.status, 0);
- return result;
-}
-
-void
-support_capture_subprocess_free (struct support_capture_subprocess *p)
-{
- free (p->out.buffer);
- free (p->err.buffer);
-}
diff --git a/support/support_capture_subprocess_check.c b/support/support_capture_subprocess_check.c
deleted file mode 100644
index 708c89f331..0000000000
--- a/support/support_capture_subprocess_check.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Verify capture output from a subprocess.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <support/capture_subprocess.h>
-#include <support/check.h>
-
-static void
-print_context (const char *context, bool *failed)
-{
- if (*failed)
- /* Do not duplicate message. */
- return;
- support_record_failure ();
- printf ("error: subprocess failed: %s\n", context);
-}
-
-void
-support_capture_subprocess_check (struct support_capture_subprocess *proc,
- const char *context, int status,
- int allowed)
-{
- TEST_VERIFY ((allowed & sc_allow_none)
- || (allowed & sc_allow_stdout)
- || (allowed & sc_allow_stderr));
- TEST_VERIFY (!((allowed & sc_allow_none)
- && ((allowed & sc_allow_stdout)
- || (allowed & sc_allow_stderr))));
-
- bool failed = false;
- if (proc->status != status)
- {
- print_context (context, &failed);
- printf ("error: expected exit status: %d\n", status);
- printf ("error: actual exit status: %d\n", status);
- }
- if (!(allowed & sc_allow_stdout) && proc->out.length != 0)
- {
- print_context (context, &failed);
- printf ("error: unexpected output from subprocess\n");
- fwrite (proc->out.buffer, proc->out.length, 1, stdout);
- puts ("\n");
- }
- if (!(allowed & sc_allow_stderr) && proc->err.length != 0)
- {
- print_context (context, &failed);
- printf ("error: unexpected error output from subprocess\n");
- fwrite (proc->err.buffer, proc->err.length, 1, stdout);
- puts ("\n");
- }
-}
diff --git a/support/support_enter_network_namespace.c b/support/support_enter_network_namespace.c
deleted file mode 100644
index 28b0ee29cf..0000000000
--- a/support/support_enter_network_namespace.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Enter a network namespace.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/namespace.h>
-
-#include <net/if.h>
-#include <sched.h>
-#include <stdio.h>
-#include <string.h>
-#include <support/check.h>
-#include <support/xsocket.h>
-#include <support/xunistd.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-
-static bool in_uts_namespace;
-
-bool
-support_enter_network_namespace (void)
-{
-#ifdef CLONE_NEWUTS
- if (unshare (CLONE_NEWUTS) == 0)
- in_uts_namespace = true;
- else
- printf ("warning: unshare (CLONE_NEWUTS) failed: %m\n");
-#endif
-
-#ifdef CLONE_NEWNET
- if (unshare (CLONE_NEWNET) == 0)
- {
- /* Bring up the loopback interface. */
- int fd = xsocket (AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- struct ifreq req;
- strcpy (req.ifr_name, "lo");
- TEST_VERIFY_EXIT (ioctl (fd, SIOCGIFFLAGS, &req) == 0);
- bool already_up = req.ifr_flags & IFF_UP;
- if (already_up)
- /* This means that we likely have not achieved isolation from
- the parent namespace. */
- printf ("warning: loopback interface already exists"
- " in new network namespace\n");
- else
- {
- req.ifr_flags |= IFF_UP | IFF_RUNNING;
- TEST_VERIFY_EXIT (ioctl (fd, SIOCSIFFLAGS, &req) == 0);
- }
- xclose (fd);
-
- return !already_up;
- }
-#endif
- printf ("warning: could not enter network namespace\n");
- return false;
-}
-
-bool
-support_in_uts_namespace (void)
-{
- return in_uts_namespace;
-}
diff --git a/support/support_format_address_family.c b/support/support_format_address_family.c
deleted file mode 100644
index 5d42c42a45..0000000000
--- a/support/support_format_address_family.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Convert an address family to a string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/format_nss.h>
-
-#include <support/support.h>
-
-char *
-support_format_address_family (int family)
-{
- switch (family)
- {
- case AF_INET:
- return xstrdup ("INET");
- case AF_INET6:
- return xstrdup ("INET6");
- default:
- return xasprintf ("<unknown address family %d>", family);
- }
-}
diff --git a/support/support_format_addrinfo.c b/support/support_format_addrinfo.c
deleted file mode 100644
index eedb030591..0000000000
--- a/support/support_format_addrinfo.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* Convert struct addrinfo values to a string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/format_nss.h>
-
-#include <arpa/inet.h>
-#include <errno.h>
-#include <stdio.h>
-#include <support/support.h>
-#include <support/xmemstream.h>
-
-static size_t
-socket_address_length (int family)
-{
- switch (family)
- {
- case AF_INET:
- return sizeof (struct sockaddr_in);
- case AF_INET6:
- return sizeof (struct sockaddr_in6);
- default:
- return -1;
- }
-}
-
-static void
-format_ai_flags_1 (FILE *out, struct addrinfo *ai, int flag, const char *name,
- int * flags_printed)
-{
- if ((ai->ai_flags & flag) != 0)
- fprintf (out, " %s", name);
- *flags_printed |= flag;
-}
-
-static void
-format_ai_flags (FILE *out, struct addrinfo *ai)
-{
- if (ai == NULL)
- return;
-
- if (ai->ai_flags != 0)
- {
- fprintf (out, "flags:");
- int flags_printed = 0;
-#define FLAG(flag) format_ai_flags_1 (out, ai, flag, #flag, &flags_printed)
- FLAG (AI_PASSIVE);
- FLAG (AI_CANONNAME);
- FLAG (AI_NUMERICHOST);
- FLAG (AI_V4MAPPED);
- FLAG (AI_ALL);
- FLAG (AI_ADDRCONFIG);
- FLAG (AI_IDN);
- FLAG (AI_CANONIDN);
- FLAG (AI_IDN_ALLOW_UNASSIGNED);
- FLAG (AI_IDN_USE_STD3_ASCII_RULES);
- FLAG (AI_NUMERICSERV);
-#undef FLAG
- int remaining = ai->ai_flags & ~flags_printed;
- if (remaining != 0)
- fprintf (out, " %08x", remaining);
- fprintf (out, "\n");
- }
-
- /* Report flag mismatches within the list. */
- int flags = ai->ai_flags;
- int index = 1;
- ai = ai->ai_next;
- while (ai != NULL)
- {
- if (ai->ai_flags != flags)
- fprintf (out, "error: flags at %d: 0x%x expected, 0x%x actual\n",
- index, flags, ai->ai_flags);
- ai = ai->ai_next;
- ++index;
- }
-}
-
-static void
-format_ai_canonname (FILE *out, struct addrinfo *ai)
-{
- if (ai == NULL)
- return;
- if (ai->ai_canonname != NULL)
- fprintf (out, "canonname: %s\n", ai->ai_canonname);
-
- /* Report incorrectly set ai_canonname fields on subsequent list
- entries. */
- int index = 1;
- ai = ai->ai_next;
- while (ai != NULL)
- {
- if (ai->ai_canonname != NULL)
- fprintf (out, "error: canonname set at %d: %s\n",
- index, ai->ai_canonname);
- ai = ai->ai_next;
- ++index;
- }
-}
-
-static void
-format_ai_one (FILE *out, struct addrinfo *ai)
-{
- {
- char type_buf[32];
- const char *type_str;
- char proto_buf[32];
- const char *proto_str;
-
- /* ai_socktype */
- switch (ai->ai_socktype)
- {
- case SOCK_RAW:
- type_str = "RAW";
- break;
- case SOCK_DGRAM:
- type_str = "DGRAM";
- break;
- case SOCK_STREAM:
- type_str = "STREAM";
- break;
- default:
- snprintf (type_buf, sizeof (type_buf), "%d", ai->ai_socktype);
- type_str = type_buf;
- }
-
- /* ai_protocol */
- switch (ai->ai_protocol)
- {
- case IPPROTO_IP:
- proto_str = "IP";
- break;
- case IPPROTO_UDP:
- proto_str = "UDP";
- break;
- case IPPROTO_TCP:
- proto_str = "TCP";
- break;
- default:
- snprintf (proto_buf, sizeof (proto_buf), "%d", ai->ai_protocol);
- proto_str = proto_buf;
- }
- fprintf (out, "address: %s/%s", type_str, proto_str);
- }
-
- /* ai_addrlen */
- if (ai->ai_addrlen != socket_address_length (ai->ai_family))
- {
- char *family = support_format_address_family (ai->ai_family);
- fprintf (out, "error: invalid address length %d for %s\n",
- ai->ai_addrlen, family);
- free (family);
- }
-
- /* ai_addr */
- {
- char buf[128];
- uint16_t port;
- const char *ret;
- switch (ai->ai_family)
- {
- case AF_INET:
- {
- struct sockaddr_in *sin = (struct sockaddr_in *) ai->ai_addr;
- ret = inet_ntop (AF_INET, &sin->sin_addr, buf, sizeof (buf));
- port = sin->sin_port;
- }
- break;
- case AF_INET6:
- {
- struct sockaddr_in6 *sin = (struct sockaddr_in6 *) ai->ai_addr;
- ret = inet_ntop (AF_INET6, &sin->sin6_addr, buf, sizeof (buf));
- port = sin->sin6_port;
- }
- break;
- default:
- errno = EAFNOSUPPORT;
- ret = NULL;
- }
- if (ret == NULL)
- fprintf (out, "error: inet_top failed: %m\n");
- else
- fprintf (out, " %s %u\n", buf, ntohs (port));
- }
-}
-
-/* Format all the addresses in one address family. */
-static void
-format_ai_family (FILE *out, struct addrinfo *ai, int family)
-{
- while (ai)
- {
- if (ai->ai_family == family)
- format_ai_one (out, ai);
- ai = ai->ai_next;
- }
-}
-
-char *
-support_format_addrinfo (struct addrinfo *ai, int ret)
-{
- int errno_copy = errno;
-
- struct xmemstream mem;
- xopen_memstream (&mem);
- if (ret != 0)
- {
- fprintf (mem.out, "error: %s\n", gai_strerror (ret));
- if (ret == EAI_SYSTEM)
- {
- errno = errno_copy;
- fprintf (mem.out, "error: %m\n");
- }
- }
- else
- {
- format_ai_flags (mem.out, ai);
- format_ai_canonname (mem.out, ai);
- format_ai_family (mem.out, ai, AF_INET);
- format_ai_family (mem.out, ai, AF_INET6);
- }
-
- xfclose_memstream (&mem);
- return mem.buffer;
-}
diff --git a/support/support_format_dns_packet.c b/support/support_format_dns_packet.c
deleted file mode 100644
index 2992c57971..0000000000
--- a/support/support_format_dns_packet.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Convert a DNS packet to a human-readable representation.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/format_nss.h>
-
-#include <arpa/inet.h>
-#include <resolv.h>
-#include <support/check.h>
-#include <support/support.h>
-#include <support/xmemstream.h>
-
-struct in_buffer
-{
- const unsigned char *data;
- size_t size;
-};
-
-static inline bool
-extract_8 (struct in_buffer *in, unsigned char *value)
-{
- if (in->size == 0)
- return false;
- *value = in->data[0];
- ++in->data;
- --in->size;
- return true;
-}
-
-static inline bool
-extract_16 (struct in_buffer *in, unsigned short *value)
-{
- if (in->size < 2)
- return false;
- *value = (in->data[0] << 8) | in->data[1];
- in->data += 2;
- in->size -= 2;
- return true;
-}
-
-static inline bool
-extract_32 (struct in_buffer *in, unsigned *value)
-{
- if (in->size < 4)
- return false;
- unsigned a = in->data[0];
- unsigned b = in->data[1];
- unsigned c = in->data[2];
- unsigned d = in->data[3];
- *value = (a << 24) | (b << 16) | (c << 8) | d;
- in->data += 4;
- in->size -= 4;
- return true;
-}
-
-static inline bool
-extract_bytes (struct in_buffer *in, size_t length, struct in_buffer *value)
-{
- if (in->size < length)
- return false;
- *value = (struct in_buffer) {in->data, length};
- in->data += length;
- in->size -= length;
- return true;
-}
-
-struct dname
-{
- char name[MAXDNAME + 1];
-};
-
-static bool
-extract_name (struct in_buffer full, struct in_buffer *in, struct dname *value)
-{
- const unsigned char *full_end = full.data + full.size;
- /* Sanity checks; these indicate buffer misuse. */
- TEST_VERIFY_EXIT
- (!(in->data < full.data || in->data > full_end
- || in->size > (size_t) (full_end - in->data)));
- int ret = dn_expand (full.data, full_end, in->data,
- value->name, sizeof (value->name));
- if (ret < 0)
- return false;
- in->data += ret;
- in->size -= ret;
- return true;
-}
-
-char *
-support_format_dns_packet (const unsigned char *buffer, size_t length)
-{
- struct in_buffer full = { buffer, length };
- struct in_buffer in = full;
- struct xmemstream mem;
- xopen_memstream (&mem);
-
- unsigned short txnid;
- unsigned short flags;
- unsigned short qdcount;
- unsigned short ancount;
- unsigned short nscount;
- unsigned short adcount;
- if (!(extract_16 (&in, &txnid)
- && extract_16 (&in, &flags)
- && extract_16 (&in, &qdcount)
- && extract_16 (&in, &ancount)
- && extract_16 (&in, &nscount)
- && extract_16 (&in, &adcount)))
- {
- fprintf (mem.out, "error: could not parse DNS header\n");
- goto out;
- }
- if (qdcount != 1)
- {
- fprintf (mem.out, "error: question count is %d, not 1\n", qdcount);
- goto out;
- }
- struct dname qname;
- if (!extract_name (full, &in, &qname))
- {
- fprintf (mem.out, "error: malformed QNAME\n");
- goto out;
- }
- unsigned short qtype;
- unsigned short qclass;
- if (!(extract_16 (&in, &qtype)
- && extract_16 (&in, &qclass)))
- {
- fprintf (mem.out, "error: malformed question\n");
- goto out;
- }
- if (qtype != T_A && qtype != T_AAAA && qtype != T_PTR)
- {
- fprintf (mem.out, "error: unsupported QTYPE %d\n", qtype);
- goto out;
- }
-
- fprintf (mem.out, "name: %s\n", qname.name);
-
- for (int i = 0; i < ancount; ++i)
- {
- struct dname rname;
- if (!extract_name (full, &in, &rname))
- {
- fprintf (mem.out, "error: malformed record name\n");
- goto out;
- }
- unsigned short rtype;
- unsigned short rclass;
- unsigned ttl;
- unsigned short rdlen;
- struct in_buffer rdata;
- if (!(extract_16 (&in, &rtype)
- && extract_16 (&in, &rclass)
- && extract_32 (&in, &ttl)
- && extract_16 (&in, &rdlen)
- && extract_bytes (&in, rdlen, &rdata)))
- {
- fprintf (mem.out, "error: malformed record header\n");
- goto out;
- }
- /* Skip non-matching record types. */
- if ((rtype != qtype && rtype != T_CNAME) || rclass != qclass)
- continue;
- switch (rtype)
- {
- case T_A:
- if (rdlen == 4)
- fprintf (mem.out, "address: %d.%d.%d.%d\n",
- rdata.data[0],
- rdata.data[1],
- rdata.data[2],
- rdata.data[3]);
- else
- fprintf (mem.out, "error: A record of size %d: %s\n",
- rdlen, rname.name);
- break;
- case T_AAAA:
- {
- if (rdlen == 16)
- {
- char buf[100];
- if (inet_ntop (AF_INET6, rdata.data, buf, sizeof (buf)) == NULL)
- fprintf (mem.out, "error: AAAA record decoding failed: %m\n");
- else
- fprintf (mem.out, "address: %s\n", buf);
- }
- else
- fprintf (mem.out, "error: AAAA record of size %d: %s\n",
- rdlen, rname.name);
- }
- break;
- case T_CNAME:
- case T_PTR:
- {
- struct dname name;
- if (extract_name (full, &rdata, &name))
- fprintf (mem.out, "name: %s\n", name.name);
- else
- fprintf (mem.out, "error: malformed CNAME/PTR record\n");
- }
- }
- }
-
- out:
- xfclose_memstream (&mem);
- return mem.buffer;
-}
diff --git a/support/support_format_herrno.c b/support/support_format_herrno.c
deleted file mode 100644
index 493d6ae962..0000000000
--- a/support/support_format_herrno.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Convert a h_errno error code to a string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/format_nss.h>
-
-#include <support/support.h>
-
-char *
-support_format_herrno (int code)
-{
- const char *errstr;
- switch (code)
- {
- case HOST_NOT_FOUND:
- errstr = "HOST_NOT_FOUND";
- break;
- case NO_ADDRESS:
- errstr = "NO_ADDRESS";
- break;
- case NO_RECOVERY:
- errstr = "NO_RECOVERY";
- break;
- case TRY_AGAIN:
- errstr = "TRY_AGAIN";
- break;
- default:
- return xasprintf ("<invalid h_errno value %d>\n", code);
- }
- return xstrdup (errstr);
-}
diff --git a/support/support_format_hostent.c b/support/support_format_hostent.c
deleted file mode 100644
index 5b5f26082e..0000000000
--- a/support/support_format_hostent.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Convert a struct hostent object to a string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/format_nss.h>
-
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <support/support.h>
-#include <support/xmemstream.h>
-
-static int
-address_length (int family)
-{
- switch (family)
- {
- case AF_INET:
- return 4;
- case AF_INET6:
- return 16;
- }
- return -1;
-}
-
-char *
-support_format_hostent (struct hostent *h)
-{
- if (h == NULL)
- {
- char *value = support_format_herrno (h_errno);
- char *result = xasprintf ("error: %s\n", value);
- free (value);
- return result;
- }
-
- struct xmemstream mem;
- xopen_memstream (&mem);
-
- fprintf (mem.out, "name: %s\n", h->h_name);
- for (char **alias = h->h_aliases; *alias != NULL; ++alias)
- fprintf (mem.out, "alias: %s\n", *alias);
- for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
- {
- char buf[128];
- if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
- buf, sizeof (buf)) == NULL)
- fprintf (mem.out, "error: inet_ntop failed: %m\n");
- else
- fprintf (mem.out, "address: %s\n", buf);
- }
- if (h->h_length != address_length (h->h_addrtype))
- {
- char *family = support_format_address_family (h->h_addrtype);
- fprintf (mem.out, "error: invalid address length %d for %s\n",
- h->h_length, family);
- free (family);
- }
-
- xfclose_memstream (&mem);
- return mem.buffer;
-}
diff --git a/support/support_format_netent.c b/support/support_format_netent.c
deleted file mode 100644
index 020f5720d9..0000000000
--- a/support/support_format_netent.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Convert a struct netent object to a string.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/format_nss.h>
-
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <support/support.h>
-#include <support/xmemstream.h>
-
-char *
-support_format_netent (struct netent *e)
-{
- if (e == NULL)
- {
- char *value = support_format_herrno (h_errno);
- char *result = xasprintf ("error: %s\n", value);
- free (value);
- return result;
- }
-
- struct xmemstream mem;
- xopen_memstream (&mem);
-
- if (e->n_name != NULL)
- fprintf (mem.out, "name: %s\n", e->n_name);
- for (char **ap = e->n_aliases; *ap != NULL; ++ap)
- fprintf (mem.out, "alias: %s\n", *ap);
- if (e->n_addrtype != AF_INET)
- fprintf (mem.out, "addrtype: %d\n", e->n_addrtype);
- /* On alpha, e->n_net is an unsigned long. */
- unsigned int n_net = e->n_net;
- fprintf (mem.out, "net: 0x%08x\n", n_net);
-
- xfclose_memstream (&mem);
- return mem.buffer;
-}
diff --git a/support/support_isolate_in_subprocess.c b/support/support_isolate_in_subprocess.c
deleted file mode 100644
index cf48614383..0000000000
--- a/support/support_isolate_in_subprocess.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Run a function in a subprocess.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-
-void
-support_isolate_in_subprocess (void (*callback) (void *), void *closure)
-{
- pid_t pid = xfork ();
- if (pid == 0)
- {
- /* Child process. */
- callback (closure);
- _exit (0);
- }
-
- /* Parent process. */
- int status;
- xwaitpid (pid, &status, 0);
- if (status != 0)
- FAIL_EXIT1 ("child process exited with status %d", status);
-}
diff --git a/support/support_record_failure.c b/support/support_record_failure.c
deleted file mode 100644
index 684055c746..0000000000
--- a/support/support_record_failure.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Global test failure counter.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/support.h>
-#include <support/test-driver.h>
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <unistd.h>
-
-/* This structure keeps track of test failures. The counter is
- incremented on each failure. The failed member is set to true if a
- failure is detected, so that even if the counter wraps around to
- zero, the failure of a test can be detected.
-
- The init constructor function below puts *state on a shared
- annonymous mapping, so that failure reports from subprocesses
- propagate to the parent process. */
-struct test_failures
-{
- unsigned int counter;
- unsigned int failed;
-};
-static struct test_failures *state;
-
-static __attribute__ ((constructor)) void
-init (void)
-{
- void *ptr = mmap (NULL, sizeof (*state), PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_SHARED, -1, 0);
- if (ptr == MAP_FAILED)
- {
- printf ("error: could not map %zu bytes: %m\n", sizeof (*state));
- exit (1);
- }
- /* Zero-initialization of the struct is sufficient. */
- state = ptr;
-}
-
-void
-support_record_failure (void)
-{
- if (state == NULL)
- {
- write_message
- ("error: support_record_failure called without initialization\n");
- _exit (1);
- }
- /* Relaxed MO is sufficient because we are only interested in the
- values themselves, in isolation. */
- __atomic_store_n (&state->failed, 1, __ATOMIC_RELEASE);
- __atomic_add_fetch (&state->counter, 1, __ATOMIC_RELEASE);
-}
-
-int
-support_report_failure (int status)
-{
- if (state == NULL)
- {
- write_message
- ("error: support_report_failure called without initialization\n");
- return 1;
- }
-
- /* Relaxed MO is sufficient because acquire test result reporting
- assumes that exiting from the main thread happens before the
- error reporting via support_record_failure, which requires some
- form of external synchronization. */
- bool failed = __atomic_load_n (&state->failed, __ATOMIC_RELAXED);
- if (failed)
- printf ("error: %u test failures\n",
- __atomic_load_n (&state->counter, __ATOMIC_RELAXED));
-
- if ((status == 0 || status == EXIT_UNSUPPORTED) && failed)
- /* If we have a recorded failure, it overrides a non-failure
- report from the test function. */
- status = 1;
- return status;
-}
-
-void
-support_record_failure_reset (void)
-{
- /* Only used for testing the test framework, with external
- synchronization, but use release MO for consistency. */
- __atomic_store_n (&state->failed, 0, __ATOMIC_RELAXED);
- __atomic_add_fetch (&state->counter, 0, __ATOMIC_RELAXED);
-}
diff --git a/support/support_run_diff.c b/support/support_run_diff.c
deleted file mode 100644
index f5155de727..0000000000
--- a/support/support_run_diff.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Invoke the system diff tool to compare two strings.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/run_diff.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <support/check.h>
-#include <support/support.h>
-#include <support/temp_file.h>
-#include <support/xunistd.h>
-#include <sys/wait.h>
-
-static char *
-write_to_temp_file (const char *prefix, const char *str)
-{
- char *template = xasprintf ("run_diff-%s", prefix);
- char *name = NULL;
- int fd = create_temp_file (template, &name);
- TEST_VERIFY_EXIT (fd >= 0);
- free (template);
- xwrite (fd, str, strlen (str));
- xclose (fd);
- return name;
-}
-
-void
-support_run_diff (const char *left_label, const char *left,
- const char *right_label, const char *right)
-{
- /* Ensure that the diff command output is ordered properly with
- standard output. */
- TEST_VERIFY_EXIT (fflush (stdout) == 0);
-
- char *left_path = write_to_temp_file ("left-diff", left);
- char *right_path = write_to_temp_file ("right-diff", right);
-
- pid_t pid = xfork ();
- if (pid == 0)
- {
- execlp ("diff", "diff", "-u",
- "--label", left_label, "--label", right_label,
- "--", left_path, right_path,
- NULL);
- _exit (17);
- }
- else
- {
- int status;
- xwaitpid (pid, &status, 0);
- if (!WIFEXITED (status) || WEXITSTATUS (status) != 1)
- printf ("warning: could not run diff, exit status: %d\n"
- "*** %s ***\n%s\n"
- "*** %s ***\n%s\n",
- status, left_label, left, right_label, right);
- }
-
- free (right_path);
- free (left_path);
-}
diff --git a/support/support_shared_allocate.c b/support/support_shared_allocate.c
deleted file mode 100644
index 61d088e8cf..0000000000
--- a/support/support_shared_allocate.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Allocate a memory region shared across processes.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stddef.h>
-#include <support/support.h>
-#include <support/xunistd.h>
-#include <sys/mman.h>
-
-/* Header for the allocation. It contains the size of the allocation
- for subsequent unmapping. */
-struct header
-{
- size_t total_size;
- char data[] __attribute__ ((aligned (__alignof__ (max_align_t))));
-};
-
-void *
-support_shared_allocate (size_t size)
-{
- size_t total_size = size + offsetof (struct header, data);
- if (total_size < size)
- {
- errno = ENOMEM;
- oom_error (__func__, size);
- return NULL;
- }
- else
- {
- struct header *result = xmmap (NULL, total_size, PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_SHARED, -1);
- result->total_size = total_size;
- return &result->data;
- }
-}
-
-void
-support_shared_free (void *data)
-{
- struct header *header = data - offsetof (struct header, data);
- xmunmap (header, header->total_size);
-}
diff --git a/support/support_test_main.c b/support/support_test_main.c
deleted file mode 100644
index 914d64f603..0000000000
--- a/support/support_test_main.c
+++ /dev/null
@@ -1,423 +0,0 @@
-/* Main worker function for the test driver.
- Copyright (C) 1998-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/test-driver.h>
-#include <support/check.h>
-#include <support/temp_file-internal.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <getopt.h>
-#include <malloc.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-#include <sys/resource.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-
-static const struct option default_options[] =
-{
- TEST_DEFAULT_OPTIONS
- { NULL, 0, NULL, 0 }
-};
-
-/* Show people how to run the program. */
-static void
-usage (const struct option *options)
-{
- size_t i;
-
- printf ("Usage: %s [options]\n"
- "\n"
- "Environment Variables:\n"
- " TIMEOUTFACTOR An integer used to scale the timeout\n"
- " TMPDIR Where to place temporary files\n"
- " TEST_COREDUMPS Do not disable coredumps if set\n"
- "\n",
- program_invocation_short_name);
- printf ("Options:\n");
- for (i = 0; options[i].name; ++i)
- {
- int indent;
-
- indent = printf (" --%s", options[i].name);
- if (options[i].has_arg == required_argument)
- indent += printf (" <arg>");
- printf ("%*s", 25 - indent, "");
- switch (options[i].val)
- {
- case 'v':
- printf ("Increase the output verbosity");
- break;
- case OPT_DIRECT:
- printf ("Run the test directly (instead of forking & monitoring)");
- break;
- case OPT_TESTDIR:
- printf ("Override the TMPDIR env var");
- break;
- }
- printf ("\n");
- }
-}
-
-/* The PID of the test process. */
-static pid_t test_pid;
-
-/* The cleanup handler passed to test_main. */
-static void (*cleanup_function) (void);
-
-/* Timeout handler. We kill the child and exit with an error. */
-static void
-__attribute__ ((noreturn))
-signal_handler (int sig)
-{
- int killed;
- int status;
-
- assert (test_pid > 1);
- /* Kill the whole process group. */
- kill (-test_pid, SIGKILL);
- /* In case setpgid failed in the child, kill it individually too. */
- kill (test_pid, SIGKILL);
-
- /* Wait for it to terminate. */
- int i;
- for (i = 0; i < 5; ++i)
- {
- killed = waitpid (test_pid, &status, WNOHANG|WUNTRACED);
- if (killed != 0)
- break;
-
- /* Delay, give the system time to process the kill. If the
- nanosleep() call return prematurely, all the better. We
- won't restart it since this probably means the child process
- finally died. */
- struct timespec ts;
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000;
- nanosleep (&ts, NULL);
- }
- if (killed != 0 && killed != test_pid)
- {
- printf ("Failed to kill test process: %m\n");
- exit (1);
- }
-
- if (cleanup_function != NULL)
- cleanup_function ();
-
- if (sig == SIGINT)
- {
- signal (sig, SIG_DFL);
- raise (sig);
- }
-
- if (killed == 0 || (WIFSIGNALED (status) && WTERMSIG (status) == SIGKILL))
- puts ("Timed out: killed the child process");
- else if (WIFSTOPPED (status))
- printf ("Timed out: the child process was %s\n",
- strsignal (WSTOPSIG (status)));
- else if (WIFSIGNALED (status))
- printf ("Timed out: the child process got signal %s\n",
- strsignal (WTERMSIG (status)));
- else
- printf ("Timed out: killed the child process but it exited %d\n",
- WEXITSTATUS (status));
-
- /* Exit with an error. */
- exit (1);
-}
-
-/* Run test_function or test_function_argv. */
-static int
-run_test_function (int argc, char **argv, const struct test_config *config)
-{
- if (config->test_function != NULL)
- return config->test_function ();
- else if (config->test_function_argv != NULL)
- return config->test_function_argv (argc, argv);
- else
- {
- printf ("error: no test function defined\n");
- exit (1);
- }
-}
-
-static bool test_main_called;
-
-const char *test_dir = NULL;
-unsigned int test_verbose = 0;
-
-/* If test failure reporting has been linked in, it may contribute
- additional test failures. */
-static int
-adjust_exit_status (int status)
-{
- if (support_report_failure != NULL)
- return support_report_failure (status);
- return status;
-}
-
-int
-support_test_main (int argc, char **argv, const struct test_config *config)
-{
- if (test_main_called)
- {
- printf ("error: test_main called for a second time\n");
- exit (1);
- }
- test_main_called = true;
- const struct option *options;
- if (config->options != NULL)
- options = config->options;
- else
- options = default_options;
-
- cleanup_function = config->cleanup_function;
-
- int direct = 0; /* Directly call the test function? */
- int status;
- int opt;
- unsigned int timeoutfactor = 1;
- pid_t termpid;
-
- if (!config->no_mallopt)
- {
- /* Make uses of freed and uninitialized memory known. Do not
- pull in a definition for mallopt if it has not been defined
- already. */
- extern __typeof__ (mallopt) mallopt __attribute__ ((weak));
- if (mallopt != NULL)
- mallopt (M_PERTURB, 42);
- }
-
- while ((opt = getopt_long (argc, argv, "+", options, NULL)) != -1)
- switch (opt)
- {
- case '?':
- usage (options);
- exit (1);
- case 'v':
- ++test_verbose;
- break;
- case OPT_DIRECT:
- direct = 1;
- break;
- case OPT_TESTDIR:
- test_dir = optarg;
- break;
- default:
- if (config->cmdline_function != NULL)
- config->cmdline_function (opt);
- }
-
- /* If set, read the test TIMEOUTFACTOR value from the environment.
- This value is used to scale the default test timeout values. */
- char *envstr_timeoutfactor = getenv ("TIMEOUTFACTOR");
- if (envstr_timeoutfactor != NULL)
- {
- char *envstr_conv = envstr_timeoutfactor;
- unsigned long int env_fact;
-
- env_fact = strtoul (envstr_timeoutfactor, &envstr_conv, 0);
- if (*envstr_conv == '\0' && envstr_conv != envstr_timeoutfactor)
- timeoutfactor = MAX (env_fact, 1);
- }
-
- /* Set TMPDIR to specified test directory. */
- if (test_dir != NULL)
- {
- setenv ("TMPDIR", test_dir, 1);
-
- if (chdir (test_dir) < 0)
- {
- printf ("chdir: %m\n");
- exit (1);
- }
- }
- else
- {
- test_dir = getenv ("TMPDIR");
- if (test_dir == NULL || test_dir[0] == '\0')
- test_dir = "/tmp";
- }
- if (support_set_test_dir != NULL)
- support_set_test_dir (test_dir);
-
- int timeout = config->timeout;
- if (timeout == 0)
- timeout = DEFAULT_TIMEOUT;
-
- /* Make sure we see all message, even those on stdout. */
- setvbuf (stdout, NULL, _IONBF, 0);
-
- /* Make sure temporary files are deleted. */
- if (support_delete_temp_files != NULL)
- atexit (support_delete_temp_files);
-
- /* Correct for the possible parameters. */
- argv[optind - 1] = argv[0];
- argv += optind - 1;
- argc -= optind - 1;
-
- /* Call the initializing function, if one is available. */
- if (config->prepare_function != NULL)
- config->prepare_function (argc, argv);
-
- const char *envstr_direct = getenv ("TEST_DIRECT");
- if (envstr_direct != NULL)
- {
- FILE *f = fopen (envstr_direct, "w");
- if (f == NULL)
- {
- printf ("cannot open TEST_DIRECT output file '%s': %m\n",
- envstr_direct);
- exit (1);
- }
-
- fprintf (f, "timeout=%u\ntimeoutfactor=%u\n",
- config->timeout, timeoutfactor);
- if (config->expected_status != 0)
- fprintf (f, "exit=%u\n", config->expected_status);
- if (config->expected_signal != 0)
- fprintf (f, "signal=%s\n", strsignal (config->expected_signal));
-
- if (support_print_temp_files != NULL)
- support_print_temp_files (f);
-
- fclose (f);
- direct = 1;
- }
-
- bool disable_coredumps;
- {
- const char *coredumps = getenv ("TEST_COREDUMPS");
- disable_coredumps = coredumps == NULL || coredumps[0] == '\0';
- }
-
- /* If we are not expected to fork run the function immediately. */
- if (direct)
- return adjust_exit_status (run_test_function (argc, argv, config));
-
- /* Set up the test environment:
- - prevent core dumps
- - set up the timer
- - fork and execute the function. */
-
- test_pid = fork ();
- if (test_pid == 0)
- {
- /* This is the child. */
- if (disable_coredumps)
- {
- /* Try to avoid dumping core. This is necessary because we
- run the test from the source tree, and the coredumps
- would end up there (and not in the build tree). */
- struct rlimit core_limit;
- core_limit.rlim_cur = 0;
- core_limit.rlim_max = 0;
- setrlimit (RLIMIT_CORE, &core_limit);
- }
-
- /* We put the test process in its own pgrp so that if it bogusly
- generates any job control signals, they won't hit the whole build. */
- if (setpgid (0, 0) != 0)
- printf ("Failed to set the process group ID: %m\n");
-
- /* Execute the test function and exit with the return value. */
- exit (run_test_function (argc, argv, config));
- }
- else if (test_pid < 0)
- {
- printf ("Cannot fork test program: %m\n");
- exit (1);
- }
-
- /* Set timeout. */
- signal (SIGALRM, signal_handler);
- alarm (timeout * timeoutfactor);
-
- /* Make sure we clean up if the wrapper gets interrupted. */
- signal (SIGINT, signal_handler);
-
- /* Wait for the regular termination. */
- termpid = TEMP_FAILURE_RETRY (waitpid (test_pid, &status, 0));
- if (termpid == -1)
- {
- printf ("Waiting for test program failed: %m\n");
- exit (1);
- }
- if (termpid != test_pid)
- {
- printf ("Oops, wrong test program terminated: expected %ld, got %ld\n",
- (long int) test_pid, (long int) termpid);
- exit (1);
- }
-
- /* Process terminated normaly without timeout etc. */
- if (WIFEXITED (status))
- {
- if (config->expected_status == 0)
- {
- if (config->expected_signal == 0)
- /* Exit with the return value of the test. */
- return adjust_exit_status (WEXITSTATUS (status));
- else
- {
- printf ("Expected signal '%s' from child, got none\n",
- strsignal (config->expected_signal));
- exit (1);
- }
- }
- else
- {
- /* Non-zero exit status is expected */
- if (WEXITSTATUS (status) != config->expected_status)
- {
- printf ("Expected status %d, got %d\n",
- config->expected_status, WEXITSTATUS (status));
- exit (1);
- }
- }
- return adjust_exit_status (0);
- }
- /* Process was killed by timer or other signal. */
- else
- {
- if (config->expected_signal == 0)
- {
- printf ("Didn't expect signal from child: got `%s'\n",
- strsignal (WTERMSIG (status)));
- exit (1);
- }
- else if (WTERMSIG (status) != config->expected_signal)
- {
- printf ("Incorrect signal from child: got `%s', need `%s'\n",
- strsignal (WTERMSIG (status)),
- strsignal (config->expected_signal));
- exit (1);
- }
-
- return adjust_exit_status (0);
- }
-}
diff --git a/support/support_test_verify_impl.c b/support/support_test_verify_impl.c
deleted file mode 100644
index 5bae38f8b1..0000000000
--- a/support/support_test_verify_impl.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Implementation of the TEST_VERIFY and TEST_VERIFY_EXIT macros.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-void
-support_test_verify_impl (int status, const char *file, int line,
- const char *expr)
-{
- support_record_failure ();
- printf ("error: %s:%d: not true: %s\n", file, line, expr);
- if (status >= 0)
- exit (status);
-
-}
diff --git a/support/support_write_file_string.c b/support/support_write_file_string.c
deleted file mode 100644
index 48e89597f3..0000000000
--- a/support/support_write_file_string.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Write a string to a file.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fcntl.h>
-#include <string.h>
-#include <support/check.h>
-#include <xunistd.h>
-
-void
-support_write_file_string (const char *path, const char *contents)
-{
- int fd = xopen (path, O_CREAT | O_TRUNC | O_WRONLY, 0666);
- const char *end = contents + strlen (contents);
- for (const char *p = contents; p < end; )
- {
- ssize_t ret = write (fd, p, end - p);
- if (ret < 0)
- FAIL_EXIT1 ("cannot write to \"%s\": %m", path);
- if (ret == 0)
- FAIL_EXIT1 ("zero-length write to \"%s\"", path);
- p += ret;
- }
- xclose (fd);
-}
diff --git a/support/temp_file-internal.h b/support/temp_file-internal.h
deleted file mode 100644
index fb6cceb065..0000000000
--- a/support/temp_file-internal.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Internal weak declarations for temporary file handling.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_TEMP_FILE_INTERNAL_H
-#define SUPPORT_TEMP_FILE_INTERNAL_H
-
-/* These functions are called by the test driver if they are
- defined. Tests should not call them directly. */
-
-#include <stdio.h>
-
-void support_set_test_dir (const char *name) __attribute__ ((weak));
-void support_delete_temp_files (void) __attribute__ ((weak));
-void support_print_temp_files (FILE *) __attribute__ ((weak));
-
-#endif /* SUPPORT_TEMP_FILE_INTERNAL_H */
diff --git a/support/temp_file.c b/support/temp_file.c
deleted file mode 100644
index fdb2477ab9..0000000000
--- a/support/temp_file.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Temporary file handling for tests.
- Copyright (C) 1998-2017 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
- <http://www.gnu.org/licenses/>. */
-
-/* This is required to get an mkstemp which can create large files on
- some 32-bit platforms. */
-#define _FILE_OFFSET_BITS 64
-
-#include <support/temp_file.h>
-#include <support/temp_file-internal.h>
-#include <support/support.h>
-
-#include <paths.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-/* List of temporary files. */
-static struct temp_name_list
-{
- struct temp_name_list *next;
- char *name;
- pid_t owner;
-} *temp_name_list;
-
-/* Location of the temporary files. Set by the test skeleton via
- support_set_test_dir. The string is not be freed. */
-static const char *test_dir = _PATH_TMP;
-
-void
-add_temp_file (const char *name)
-{
- struct temp_name_list *newp
- = (struct temp_name_list *) xcalloc (sizeof (*newp), 1);
- char *newname = strdup (name);
- if (newname != NULL)
- {
- newp->name = newname;
- newp->next = temp_name_list;
- newp->owner = getpid ();
- temp_name_list = newp;
- }
- else
- free (newp);
-}
-
-int
-create_temp_file (const char *base, char **filename)
-{
- char *fname;
- int fd;
-
- fname = (char *) xmalloc (strlen (test_dir) + 1 + strlen (base)
- + sizeof ("XXXXXX"));
- strcpy (stpcpy (stpcpy (stpcpy (fname, test_dir), "/"), base), "XXXXXX");
-
- fd = mkstemp (fname);
- if (fd == -1)
- {
- printf ("cannot open temporary file '%s': %m\n", fname);
- free (fname);
- return -1;
- }
-
- add_temp_file (fname);
- if (filename != NULL)
- *filename = fname;
- else
- free (fname);
-
- return fd;
-}
-
-/* Helper functions called by the test skeleton follow. */
-
-void
-support_set_test_dir (const char *path)
-{
- test_dir = path;
-}
-
-void
-support_delete_temp_files (void)
-{
- pid_t pid = getpid ();
- while (temp_name_list != NULL)
- {
- /* Only perform the removal if the path was registed in the same
- process, as identified by the PID. (This assumes that the
- parent process which registered the temporary file sticks
- around, to prevent PID reuse.) */
- if (temp_name_list->owner == pid)
- {
- if (remove (temp_name_list->name) != 0)
- printf ("warning: could not remove temporary file: %s: %m\n",
- temp_name_list->name);
- }
- free (temp_name_list->name);
-
- struct temp_name_list *next = temp_name_list->next;
- free (temp_name_list);
- temp_name_list = next;
- }
-}
-
-void
-support_print_temp_files (FILE *f)
-{
- if (temp_name_list != NULL)
- {
- struct temp_name_list *n;
- fprintf (f, "temp_files=(\n");
- for (n = temp_name_list; n != NULL; n = n->next)
- fprintf (f, " '%s'\n", n->name);
- fprintf (f, ")\n");
- }
-}
diff --git a/support/temp_file.h b/support/temp_file.h
deleted file mode 100644
index 6fed8df1ea..0000000000
--- a/support/temp_file.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Declarations for temporary file handling.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_TEMP_FILE_H
-#define SUPPORT_TEMP_FILE_H
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Schedule a temporary file for deletion on exit. */
-void add_temp_file (const char *name);
-
-/* Create a temporary file. Return the opened file descriptor on
- success, or -1 on failure. Write the file name to *FILENAME if
- FILENAME is not NULL. In this case, the caller is expected to free
- *FILENAME. */
-int create_temp_file (const char *base, char **filename);
-
-__END_DECLS
-
-#endif /* SUPPORT_TEMP_FILE_H */
diff --git a/support/test-driver.c b/support/test-driver.c
deleted file mode 100644
index 482066dbeb..0000000000
--- a/support/test-driver.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Main function for test programs.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-/* This file should be included from test cases. It will define a
- main function which provides the test wrapper.
-
- It assumes that the test case defines a function
-
- int do_test (void);
-
- and arranges for that function being called under the test wrapper.
- The do_test function should return 0 to indicate a passing test, 1
- to indicate a failing test, or 77 to indicate an unsupported test.
- Other result values could be used to indicate a failing test, but
- the result of the expression is passed to exit and exit only
- returns the lower 8 bits of its input. A non-zero return with some
- values could cause a test to incorrectly be considered passing when
- it really failed. For this reason, the function should always
- return 0 (EXIT_SUCCESS), 1 (EXIT_FAILURE), or 77
- (EXIT_UNSUPPORTED).
-
- The test function may print out diagnostic or warning messages as well
- as messages about failures. These messages should be printed to stdout
- and not stderr so that the output is properly ordered with respect to
- the rest of the glibc testsuite run output.
-
- Several preprocessors macros can be defined before including this
- file.
-
- The name of the do_test function can be changed with the
- TEST_FUNCTION macro. It must expand to the desired function name.
-
- If the test case needs access to command line parameters, it must
- define the TEST_FUNCTION_ARGV macro with the name of the test
- function. It must have the following type:
-
- int TEST_FUNCTION_ARGV (int argc, char **argv);
-
- This overrides the do_test default function and is incompatible
- with the TEST_FUNCTION macro.
-
- If PREPARE is defined, it must expand to the name of a function of
- the type
-
- void PREPARE (int argc, char **);
-
- This function will be called early, after parsing the command line,
- but before running the test, in the parent process which acts as
- the test supervisor.
-
- If CLEANUP_HANDLER is defined, it must expand to the name of a
- function of the type
-
- void CLEANUP_HANDLER (void);
-
- This function will be called from the timeout (SIGALRM) signal
- handler.
-
- If EXPECTED_SIGNAL is defined, it must expanded to a constant which
- denotes the expected signal number.
-
- If EXPECTED_STATUS is defined, it must expand to the expected exit
- status.
-
- If TIMEOUT is defined, it must be positive constant. It overrides
- the default test timeout and is measured in seconds.
-
- If TEST_NO_MALLOPT is defined, the test wrapper will not call
- mallopt.
-
- Custom command line handling can be implemented by defining the
- CMDLINE_OPTION macro (after including the <getopt.h> header; this
- requires _GNU_SOURCE to be defined). This macro must expand to a
- to a comma-separated list of braced initializers for struct option
- from <getopt.h>, with a trailing comma. CMDLINE_PROCESS can be
- defined as the name of a function which is called to process these
- options. The function is passed the option character/number and
- has this type:
-
- void CMDLINE_PROCESS (int);
-*/
-
-#include <support/test-driver.h>
-
-#include <string.h>
-
-int
-main (int argc, char **argv)
-{
- struct test_config test_config;
- memset (&test_config, 0, sizeof (test_config));
-
-#ifdef PREPARE
- test_config.prepare_function = (PREPARE);
-#endif
-
-#if defined (TEST_FUNCTION) && defined (TEST_FUNCTON_ARGV)
-# error TEST_FUNCTION and TEST_FUNCTION_ARGV cannot be defined at the same time
-#endif
-#if defined (TEST_FUNCTION)
- test_config.test_function = TEST_FUNCTION;
-#elif defined (TEST_FUNCTION_ARGV)
- test_config.test_function_argv = TEST_FUNCTION_ARGV;
-#else
- test_config.test_function = do_test;
-#endif
-
-#ifdef CLEANUP_HANDLER
- test_config.cleanup_function = CLEANUP_HANDLER;
-#endif
-
-#ifdef EXPECTED_SIGNAL
- test_config.expected_signal = (EXPECTED_SIGNAL);
-#endif
-
-#ifdef EXPECTED_STATUS
- test_config.expected_status = (EXPECTED_STATUS);
-#endif
-
-#ifdef TEST_NO_MALLOPT
- test_config.no_mallopt = 1;
-#endif
-
-#ifdef TIMEOUT
- test_config.timeout = TIMEOUT;
-#endif
-
-#ifdef CMDLINE_OPTIONS
- struct option options[] =
- {
- CMDLINE_OPTIONS
- TEST_DEFAULT_OPTIONS
- };
- test_config.options = &options;
-#endif
-#ifdef CMDLINE_PROCESS
- test_config.cmdline_function = CMDLINE_PROCESS;
-#endif
-
- return support_test_main (argc, argv, &test_config);
-}
diff --git a/support/test-driver.h b/support/test-driver.h
deleted file mode 100644
index af1971a9ca..0000000000
--- a/support/test-driver.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Interfaces for the test driver.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_TEST_DRIVER_H
-#define SUPPORT_TEST_DRIVER_H
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-struct test_config
-{
- void (*prepare_function) (int argc, char **argv);
- int (*test_function) (void);
- int (*test_function_argv) (int argc, char **argv);
- void (*cleanup_function) (void);
- void (*cmdline_function) (int);
- const void *options; /* Custom options if not NULL. */
- int timeout; /* Test timeout in seconds. */
- int expected_status; /* Expected exit status. */
- int expected_signal; /* If non-zero, expect termination by signal. */
- char no_mallopt; /* Boolean flag to disable mallopt. */
-};
-
-enum
- {
- /* Test exit status which indicates that the feature is
- unsupported. */
- EXIT_UNSUPPORTED = 77,
-
- /* Default timeout is twenty seconds. Tests should normally
- complete faster than this, but if they don't, that's abnormal
- (a bug) anyways. */
- DEFAULT_TIMEOUT = 20,
-
- /* Used for command line argument parsing. */
- OPT_DIRECT = 1000,
- OPT_TESTDIR,
- };
-
-/* Options provided by the test driver. */
-#define TEST_DEFAULT_OPTIONS \
- { "verbose", no_argument, NULL, 'v' }, \
- { "direct", no_argument, NULL, OPT_DIRECT }, \
- { "test-dir", required_argument, NULL, OPT_TESTDIR }, \
-
-/* The directory the test should use for temporary files. */
-extern const char *test_dir;
-
-/* The number of --verbose arguments specified during program
- invocation. This variable can be used to control the verbosity of
- tests. */
-extern unsigned int test_verbose;
-
-int support_test_main (int argc, char **argv, const struct test_config *);
-
-__END_DECLS
-
-#endif /* SUPPORT_TEST_DRIVER_H */
diff --git a/support/tst-support-namespace.c b/support/tst-support-namespace.c
deleted file mode 100644
index a50b074f5e..0000000000
--- a/support/tst-support-namespace.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Test entering namespaces.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <support/namespace.h>
-
-static int
-do_test (void)
-{
- if (support_become_root ())
- printf ("info: acquired root-like privileges\n");
- if (support_enter_network_namespace ())
- printf ("info: entered network namespace\n");
- if (support_in_uts_namespace ())
- printf ("info: also entered UTS namespace\n");
- return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/support/tst-support_capture_subprocess.c b/support/tst-support_capture_subprocess.c
deleted file mode 100644
index 5672fba0f7..0000000000
--- a/support/tst-support_capture_subprocess.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Test capturing output from a subprocess.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <support/capture_subprocess.h>
-#include <support/check.h>
-#include <support/support.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-/* Write one byte at *P to FD and advance *P. Do nothing if *P is
- '\0'. */
-static void
-transfer (const unsigned char **p, int fd)
-{
- if (**p != '\0')
- {
- TEST_VERIFY (write (fd, *p, 1) == 1);
- ++*p;
- }
-}
-
-/* Determine the order in which stdout and stderr are written. */
-enum write_mode { out_first, err_first, interleave,
- write_mode_last = interleave };
-
-/* Describe what to write in the subprocess. */
-struct test
-{
- char *out;
- char *err;
- enum write_mode write_mode;
- int signal;
- int status;
-};
-
-/* For use with support_capture_subprocess. */
-static void
-callback (void *closure)
-{
- const struct test *test = closure;
- bool mode_ok = false;
- switch (test->write_mode)
- {
- case out_first:
- TEST_VERIFY (fputs (test->out, stdout) >= 0);
- TEST_VERIFY (fflush (stdout) == 0);
- TEST_VERIFY (fputs (test->err, stderr) >= 0);
- TEST_VERIFY (fflush (stderr) == 0);
- mode_ok = true;
- break;
- case err_first:
- TEST_VERIFY (fputs (test->err, stderr) >= 0);
- TEST_VERIFY (fflush (stderr) == 0);
- TEST_VERIFY (fputs (test->out, stdout) >= 0);
- TEST_VERIFY (fflush (stdout) == 0);
- mode_ok = true;
- break;
- case interleave:
- {
- const unsigned char *pout = (const unsigned char *) test->out;
- const unsigned char *perr = (const unsigned char *) test->err;
- do
- {
- transfer (&pout, STDOUT_FILENO);
- transfer (&perr, STDERR_FILENO);
- }
- while (*pout != '\0' || *perr != '\0');
- }
- mode_ok = true;
- break;
- }
- TEST_VERIFY (mode_ok);
-
- if (test->signal != 0)
- raise (test->signal);
- exit (test->status);
-}
-
-/* Create a heap-allocated random string of letters. */
-static char *
-random_string (size_t length)
-{
- char *result = xmalloc (length + 1);
- for (size_t i = 0; i < length; ++i)
- result[i] = 'a' + (rand () % 26);
- result[length] = '\0';
- return result;
-}
-
-/* Check that the specific stream from the captured subprocess matches
- expectations. */
-static void
-check_stream (const char *what, const struct xmemstream *stream,
- const char *expected)
-{
- if (strcmp (stream->buffer, expected) != 0)
- {
- support_record_failure ();
- printf ("error: captured %s data incorrect\n"
- " expected: %s\n"
- " actual: %s\n",
- what, expected, stream->buffer);
- }
- if (stream->length != strlen (expected))
- {
- support_record_failure ();
- printf ("error: captured %s data length incorrect\n"
- " expected: %zu\n"
- " actual: %zu\n",
- what, strlen (expected), stream->length);
- }
-}
-
-static int
-do_test (void)
-{
- const int lengths[] = {0, 1, 17, 512, 20000, -1};
-
- /* Test multiple combinations of support_capture_subprocess.
-
- length_idx_stdout: Index into the lengths array above,
- controls how many bytes are written by the subprocess to
- standard output.
- length_idx_stderr: Same for standard error.
- write_mode: How standard output and standard error writes are
- ordered.
- signal: Exit with no signal if zero, with SIGTERM if one.
- status: Process exit status: 0 if zero, 3 if one. */
- for (int length_idx_stdout = 0; lengths[length_idx_stdout] >= 0;
- ++length_idx_stdout)
- for (int length_idx_stderr = 0; lengths[length_idx_stderr] >= 0;
- ++length_idx_stderr)
- for (int write_mode = 0; write_mode < write_mode_last; ++write_mode)
- for (int signal = 0; signal < 2; ++signal)
- for (int status = 0; status < 2; ++status)
- {
- struct test test =
- {
- .out = random_string (lengths[length_idx_stdout]),
- .err = random_string (lengths[length_idx_stderr]),
- .write_mode = write_mode,
- .signal = signal * SIGTERM, /* 0 or SIGTERM. */
- .status = status * 3, /* 0 or 3. */
- };
- TEST_VERIFY (strlen (test.out) == lengths[length_idx_stdout]);
- TEST_VERIFY (strlen (test.err) == lengths[length_idx_stderr]);
-
- struct support_capture_subprocess result
- = support_capture_subprocess (callback, &test);
- check_stream ("stdout", &result.out, test.out);
- check_stream ("stderr", &result.err, test.err);
- if (test.signal != 0)
- {
- TEST_VERIFY (WIFSIGNALED (result.status));
- TEST_VERIFY (WTERMSIG (result.status) == test.signal);
- }
- else
- {
- TEST_VERIFY (WIFEXITED (result.status));
- TEST_VERIFY (WEXITSTATUS (result.status) == test.status);
- }
- support_capture_subprocess_free (&result);
- free (test.out);
- free (test.err);
- }
- return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/support/tst-support_format_dns_packet.c b/support/tst-support_format_dns_packet.c
deleted file mode 100644
index 9c8589c09c..0000000000
--- a/support/tst-support_format_dns_packet.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Tests for the support_format_dns_packet function.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/format_nss.h>
-#include <support/run_diff.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static void
-check_packet (const void *buffer, size_t length,
- const char *name, const char *expected)
-{
- char *actual = support_format_dns_packet (buffer, length);
- if (strcmp (actual, expected) != 0)
- {
- support_record_failure ();
- printf ("error: formatted packet does not match: %s\n", name);
- support_run_diff ("expected", expected,
- "actual", actual);
- }
- free (actual);
-}
-
-static void
-test_aaaa_length (void)
-{
- static const char packet[] =
- /* Header: Response with two records. */
- "\x12\x34\x80\x00\x00\x01\x00\x02\x00\x00\x00\x00"
- /* Question section. www.example/IN/AAAA. */
- "\x03www\x07""example\x00\x00\x1c\x00\x01"
- /* Answer section. www.example AAAA [corrupted]. */
- "\xc0\x0c"
- "\x00\x1c\x00\x01\x00\x00\x00\x00\x00\x10"
- "\x20\x01\x0d\xb8\x05\x06\x07\x08"
- "\x11\x12\x13\x14\x15\x16\x17\x18"
- /* www.example AAAA [corrupted]. */
- "\xc0\x0c"
- "\x00\x1c\x00\x01\x00\x00\x00\x00\x00\x11"
- "\x01\x02\x03\x04\x05\x06\x07\x08"
- "\x11\x12\x13\x14\x15\x16\x17\x18" "\xff";
- check_packet (packet, sizeof (packet) - 1, __func__,
- "name: www.example\n"
- "address: 2001:db8:506:708:1112:1314:1516:1718\n"
- "error: AAAA record of size 17: www.example\n");
-}
-
-static void
-test_multiple_cnames (void)
-{
- static const char packet[] =
- /* Header: Response with three records. */
- "\x12\x34\x80\x00\x00\x01\x00\x03\x00\x00\x00\x00"
- /* Question section. www.example/IN/A. */
- "\x03www\x07""example\x00\x00\x01\x00\x01"
- /* Answer section. www.example CNAME www1.example. */
- "\xc0\x0c"
- "\x00\x05\x00\x01\x00\x00\x00\x00\x00\x07"
- "\x04www1\xc0\x10"
- /* www1 CNAME www2. */
- "\x04www1\xc0\x10"
- "\x00\x05\x00\x01\x00\x00\x00\x00\x00\x07"
- "\x04www2\xc0\x10"
- /* www2 A 192.0.2.1. */
- "\x04www2\xc0\x10"
- "\x00\x01\x00\x01\x00\x00\x00\x00\x00\x04"
- "\xc0\x00\x02\x01";
- check_packet (packet, sizeof (packet) - 1, __func__,
- "name: www.example\n"
- "name: www1.example\n"
- "name: www2.example\n"
- "address: 192.0.2.1\n");
-}
-
-static int
-do_test (void)
-{
- test_aaaa_length ();
- test_multiple_cnames ();
- return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/support/tst-support_record_failure-2.sh b/support/tst-support_record_failure-2.sh
deleted file mode 100644
index 2c9372cc29..0000000000
--- a/support/tst-support_record_failure-2.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-# Test failure recording (with and without --direct).
-# Copyright (C) 2016-2017 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
-# <http://www.gnu.org/licenses/>. */
-
-set -e
-
-common_objpfx=$1; shift
-test_program_prefix_before_env=$1; shift
-run_program_env=$1; shift
-test_program_prefix_after_env=$1; shift
-
-run_test () {
- expected_status="$1"
- expected_output="$2"
- shift 2
- args="${common_objpfx}support/tst-support_record_failure $*"
- echo "running: $args"
- set +e
- output="$(${test_program_prefix_before_env} \
- ${run_program} ${test_program_prefix_after_env} $args)"
- status=$?
- set -e
- echo " exit status: $status"
- if test "$output" != "$expected_output" ; then
- echo "error: unexpected output: $output"
- exit 1
- fi
- if test "$status" -ne "$expected_status" ; then
- echo "error: exit status $expected_status expected"
- exit 1
- fi
-}
-
-different_status () {
- direct="$1"
- run_test 1 "error: 1 test failures" $direct --status=0
- run_test 1 "error: 1 test failures" $direct --status=1
- run_test 2 "error: 1 test failures" $direct --status=2
- run_test 1 "error: 1 test failures" $direct --status=77
- run_test 2 "error: tst-support_record_failure.c:109: not true: false
-error: 1 test failures" $direct --test-verify
- run_test 2 "error: tst-support_record_failure.c:109: not true: false
-info: execution passed failed TEST_VERIFY
-error: 1 test failures" $direct --test-verify --verbose
-}
-
-different_status
-different_status --direct
-
-run_test 1 "error: tst-support_record_failure.c:116: not true: false
-error: 1 test failures" --test-verify-exit
-# --direct does not print the summary error message if exit is called.
-run_test 1 "error: tst-support_record_failure.c:116: not true: false" \
- --direct --test-verify-exit
diff --git a/support/tst-support_record_failure.c b/support/tst-support_record_failure.c
deleted file mode 100644
index e739e739c3..0000000000
--- a/support/tst-support_record_failure.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Test support_record_failure state sharing.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/support.h>
-#include <support/test-driver.h>
-#include <support/xunistd.h>
-
-#include <getopt.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-static int exit_status_with_failure = -1;
-static bool test_verify;
-static bool test_verify_exit;
-enum
- {
- OPT_STATUS = 10001,
- OPT_TEST_VERIFY,
- OPT_TEST_VERIFY_EXIT,
- };
-#define CMDLINE_OPTIONS \
- { "status", required_argument, NULL, OPT_STATUS }, \
- { "test-verify", no_argument, NULL, OPT_TEST_VERIFY }, \
- { "test-verify-exit", no_argument, NULL, OPT_TEST_VERIFY_EXIT },
-static void
-cmdline_process (int c)
-{
- switch (c)
- {
- case OPT_STATUS:
- exit_status_with_failure = atoi (optarg);
- break;
- case OPT_TEST_VERIFY:
- test_verify = true;
- break;
- case OPT_TEST_VERIFY_EXIT:
- test_verify_exit = true;
- break;
- }
-}
-#define CMDLINE_PROCESS cmdline_process
-
-static void
-check_failure_reporting (int phase, int zero, int unsupported)
-{
- int status = support_report_failure (0);
- if (status != zero)
- {
- printf ("real-error (phase %d): support_report_failure (0) == %d\n",
- phase, status);
- exit (1);
- }
- status = support_report_failure (1);
- if (status != 1)
- {
- printf ("real-error (phase %d): support_report_failure (1) == %d\n",
- phase, status);
- exit (1);
- }
- status = support_report_failure (2);
- if (status != 2)
- {
- printf ("real-error (phase %d): support_report_failure (2) == %d\n",
- phase, status);
- exit (1);
- }
- status = support_report_failure (EXIT_UNSUPPORTED);
- if (status != unsupported)
- {
- printf ("real-error (phase %d): "
- "support_report_failure (EXIT_UNSUPPORTED) == %d\n",
- phase, status);
- exit (1);
- }
-}
-
-static int
-do_test (void)
-{
- if (exit_status_with_failure >= 0)
- {
- /* External invocation with requested error status. Used by
- tst-support_report_failure-2.sh. */
- support_record_failure ();
- return exit_status_with_failure;
- }
- TEST_VERIFY (true);
- TEST_VERIFY_EXIT (true);
- if (test_verify)
- {
- TEST_VERIFY (false);
- if (test_verbose)
- printf ("info: execution passed failed TEST_VERIFY\n");
- return 2; /* Expected exit status. */
- }
- if (test_verify_exit)
- {
- TEST_VERIFY_EXIT (false);
- return 3; /* Not reached. Expected exit status is 1. */
- }
-
- printf ("info: This test tests the test framework.\n"
- "info: It reports some expected errors on stdout.\n");
-
- /* Check that the status is passed through unchanged. */
- check_failure_reporting (1, 0, EXIT_UNSUPPORTED);
-
- /* Check state propagation from a subprocess. */
- pid_t pid = xfork ();
- if (pid == 0)
- {
- support_record_failure ();
- _exit (0);
- }
- int status;
- xwaitpid (pid, &status, 0);
- if (status != 0)
- {
- printf ("real-error: incorrect status from subprocess: %d\n", status);
- return 1;
- }
- check_failure_reporting (2, 1, 1);
-
- /* Also test directly in the parent process. */
- support_record_failure_reset ();
- check_failure_reporting (3, 0, EXIT_UNSUPPORTED);
- support_record_failure ();
- check_failure_reporting (4, 1, 1);
-
- /* We need to mask the failure above. */
- support_record_failure_reset ();
- return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/support/write_message.c b/support/write_message.c
deleted file mode 100644
index f03ed931d6..0000000000
--- a/support/write_message.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Write a message to standard output.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <string.h>
-#include <unistd.h>
-
-void
-write_message (const char *message)
-{
- ssize_t unused __attribute__ ((unused));
- unused = write (STDOUT_FILENO, message, strlen (message));
-}
diff --git a/support/xaccept.c b/support/xaccept.c
deleted file mode 100644
index 7b25af3b05..0000000000
--- a/support/xaccept.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* accept with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-int
-xaccept (int fd, struct sockaddr *sa, socklen_t *salen)
-{
- int clientfd = accept (fd, sa, salen);
- if (clientfd < 0)
- FAIL_EXIT1 ("accept (%d): %m", fd);
- return clientfd;
-}
diff --git a/support/xaccept4.c b/support/xaccept4.c
deleted file mode 100644
index 67dd95e9fb..0000000000
--- a/support/xaccept4.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* accept4 with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-int
-xaccept4 (int fd, struct sockaddr *sa, socklen_t *salen, int flags)
-{
- int clientfd = accept4 (fd, sa, salen, flags);
- if (clientfd < 0)
- FAIL_EXIT1 ("accept4 (%d, 0x%x): %m", fd, flags);
- return clientfd;
-}
diff --git a/support/xasprintf.c b/support/xasprintf.c
deleted file mode 100644
index 5157680fa2..0000000000
--- a/support/xasprintf.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Error-checking wrapper for asprintf.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-char *
-xasprintf (const char *format, ...)
-{
- va_list ap;
- va_start (ap, format);
- char *result;
- if (vasprintf (&result, format, ap) < 0)
- FAIL_EXIT1 ("asprintf: %m");
- va_end (ap);
- return result;
-}
diff --git a/support/xbind.c b/support/xbind.c
deleted file mode 100644
index cfc6dd8fa8..0000000000
--- a/support/xbind.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* bind with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xbind (int fd, const struct sockaddr *sa, socklen_t sa_len)
-{
- if (bind (fd, sa, sa_len) != 0)
- FAIL_EXIT1 ("bind (%d), family %d: %m", fd, sa->sa_family);
-}
diff --git a/support/xcalloc.c b/support/xcalloc.c
deleted file mode 100644
index 135f42dab2..0000000000
--- a/support/xcalloc.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Error-checking wrapper for calloc.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-void *
-xcalloc (size_t n, size_t s)
-{
- void *p;
-
- p = calloc (n, s);
- if (p == NULL)
- oom_error ("calloc", n * s);
- return p;
-}
diff --git a/support/xchroot.c b/support/xchroot.c
deleted file mode 100644
index abcc299e00..0000000000
--- a/support/xchroot.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* chroot with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <sys/stat.h>
-
-void
-xchroot (const char *path)
-{
- if (chroot (path) != 0)
- FAIL_EXIT1 ("chroot (\"%s\"): %m", path);
-}
diff --git a/support/xclose.c b/support/xclose.c
deleted file mode 100644
index c931e08421..0000000000
--- a/support/xclose.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* close with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xunistd.h>
-#include <support/check.h>
-#include <errno.h>
-
-void
-xclose (int fd)
-{
- if (close (fd) < 0 && errno != EINTR)
- FAIL_EXIT1 ("close of descriptor %d failed: %m", fd);
-}
diff --git a/support/xconnect.c b/support/xconnect.c
deleted file mode 100644
index 0266dbc643..0000000000
--- a/support/xconnect.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* connect with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xconnect (int fd, const struct sockaddr *sa, socklen_t sa_len)
-{
- if (connect (fd, sa, sa_len) != 0)
- FAIL_EXIT1 ("connect (%d), family %d: %m", fd, sa->sa_family);
-}
diff --git a/support/xdup2.c b/support/xdup2.c
deleted file mode 100644
index dc08c94518..0000000000
--- a/support/xdup2.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* dup2 with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xunistd.h>
-
-#include <support/check.h>
-
-void
-xdup2 (int from, int to)
-{
- if (dup2 (from, to) < 0)
- FAIL_EXIT1 ("dup2 (%d, %d): %m", from, to);
-}
diff --git a/support/xfclose.c b/support/xfclose.c
deleted file mode 100644
index 2737f05044..0000000000
--- a/support/xfclose.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* fclose with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xstdio.h>
-
-#include <support/check.h>
-#include <stdlib.h>
-
-void
-xfclose (FILE *fp)
-{
- if (ferror (fp))
- FAIL_EXIT1 ("stdio stream closed with pending errors");
- if (fflush (fp) != 0)
- FAIL_EXIT1 ("fflush: %m");
- if (fclose (fp) != 0)
- FAIL_EXIT1 ("fclose: %m");
-}
diff --git a/support/xfopen.c b/support/xfopen.c
deleted file mode 100644
index 14532a09f3..0000000000
--- a/support/xfopen.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* fopen with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xstdio.h>
-
-#include <support/check.h>
-#include <stdlib.h>
-
-FILE *
-xfopen (const char *path, const char *mode)
-{
- FILE *fp = fopen (path, mode);
- if (fp == NULL)
- FAIL_EXIT1 ("could not open %s (mode \"%s\"): %m", path, mode);
- return fp;
-}
diff --git a/support/xfork.c b/support/xfork.c
deleted file mode 100644
index aa52ba62c5..0000000000
--- a/support/xfork.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* fork with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xunistd.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-pid_t
-xfork (void)
-{
- pid_t result = fork ();
- if (result < 0)
- FAIL_EXIT1 ("fork: %m");
- return result;
-}
diff --git a/support/xgetsockname.c b/support/xgetsockname.c
deleted file mode 100644
index c3bd884f8d..0000000000
--- a/support/xgetsockname.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* getsockname with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xgetsockname (int fd, struct sockaddr *sa, socklen_t *plen)
-{
- if (getsockname (fd, sa, plen) != 0)
- FAIL_EXIT1 ("setsockopt (%d): %m", fd);
-}
diff --git a/support/xlisten.c b/support/xlisten.c
deleted file mode 100644
index 1953e5900a..0000000000
--- a/support/xlisten.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* listen with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xlisten (int fd, int backlog)
-{
- if (listen (fd, backlog) != 0)
- FAIL_EXIT1 ("listen (%d, %d): %m", fd, backlog);
-}
diff --git a/support/xmalloc.c b/support/xmalloc.c
deleted file mode 100644
index 450f699789..0000000000
--- a/support/xmalloc.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Error-checking wrapper for malloc.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-void *
-xmalloc (size_t n)
-{
- void *p;
-
- p = malloc (n);
- if (p == NULL)
- oom_error ("malloc", n);
- return p;
-}
diff --git a/support/xmemstream.c b/support/xmemstream.c
deleted file mode 100644
index bce6dc9170..0000000000
--- a/support/xmemstream.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Error-checking wrappers for memstream functions.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xmemstream.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <support/xstdio.h>
-
-void
-xopen_memstream (struct xmemstream *stream)
-{
- int old_errno = errno;
- *stream = (struct xmemstream) {};
- stream->out = open_memstream (&stream->buffer, &stream->length);
- if (stream->out == NULL)
- FAIL_EXIT1 ("open_memstream: %m");
- errno = old_errno;
-}
-
-void
-xfclose_memstream (struct xmemstream *stream)
-{
- xfclose (stream->out);
- stream->out = NULL;
-}
diff --git a/support/xmemstream.h b/support/xmemstream.h
deleted file mode 100644
index e5ba231e4d..0000000000
--- a/support/xmemstream.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Error-checking wrappers for memstream functions.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_XMEMSTREAM_H
-#define SUPPORT_XMEMSTREAM_H
-
-#include <stdio.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Wrappers for other libc functions. */
-struct xmemstream
-{
- FILE *out;
- char *buffer;
- size_t length;
-};
-
-/* Create a new in-memory stream. Initializes *STREAM. After this
- function returns, STREAM->out is a file descriptor open for
- writing. errno is preserved, so that the %m format specifier can
- be used for writing to STREAM->out. */
-void xopen_memstream (struct xmemstream *stream);
-
-/* Closes STREAM->OUT. After this function returns, STREAM->buffer
- and STREAM->length denote a memory range which contains the bytes
- written to the output stream. The caller should free
- STREAM->buffer. */
-void xfclose_memstream (struct xmemstream *stream);
-
-__END_DECLS
-
-#endif /* SUPPORT_XMEMSTREAM_H */
diff --git a/support/xmkdir.c b/support/xmkdir.c
deleted file mode 100644
index ea17d49391..0000000000
--- a/support/xmkdir.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* mkdir with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <sys/stat.h>
-
-void
-xmkdir (const char *path, mode_t mode)
-{
- if (mkdir (path, mode) != 0)
- FAIL_EXIT1 ("mkdir (\"%s\", 0%o): %m", path, mode);
-}
diff --git a/support/xmmap.c b/support/xmmap.c
deleted file mode 100644
index 435b1eb733..0000000000
--- a/support/xmmap.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* mmap with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <sys/mman.h>
-
-void *
-xmmap (void *addr, size_t length, int prot, int flags, int fd)
-{
- void *result = mmap (addr, length, prot, flags, fd, 0);
- if (result == MAP_FAILED)
- FAIL_EXIT1 ("mmap of %zu bytes, prot=0x%x, flags=0x%x: %m",
- length, prot, flags);
- return result;
-}
diff --git a/support/xmunmap.c b/support/xmunmap.c
deleted file mode 100644
index 6ef5a4a468..0000000000
--- a/support/xmunmap.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* munmap with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <sys/mman.h>
-
-void
-xmunmap (void *addr, size_t length)
-{
- if (munmap (addr, length) != 0)
- FAIL_EXIT1 ("munmap of %zu bytes: %m", length);
-}
diff --git a/support/xopen.c b/support/xopen.c
deleted file mode 100644
index 7f033a03a7..0000000000
--- a/support/xopen.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* open64 with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/check.h>
-#include <support/xunistd.h>
-#include <fcntl.h>
-
-int
-xopen (const char *path, int flags, mode_t mode)
-{
- int ret = open64 (path, flags, mode);
- if (ret < 0)
- FAIL_EXIT1 ("open64 (\"%s\", 0x%x, 0%o): %m", path, flags, mode);
- return ret;
-}
diff --git a/support/xpipe.c b/support/xpipe.c
deleted file mode 100644
index 89a64a55c1..0000000000
--- a/support/xpipe.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* pipe with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xunistd.h>
-
-#include <support/check.h>
-
-void
-xpipe (int fds[2])
-{
- if (pipe (fds) < 0)
- FAIL_EXIT1 ("pipe: %m");
-}
diff --git a/support/xpoll.c b/support/xpoll.c
deleted file mode 100644
index bec2521ffc..0000000000
--- a/support/xpoll.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* poll with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-int
-xpoll (struct pollfd *fds, nfds_t nfds, int timeout)
-{
- int ret = poll (fds, nfds, timeout);
- if (ret < 0)
- FAIL_EXIT1 ("poll: %m");
- return ret;
-}
diff --git a/support/xpthread_attr_destroy.c b/support/xpthread_attr_destroy.c
deleted file mode 100644
index 664c809e9f..0000000000
--- a/support/xpthread_attr_destroy.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_attr_destroy with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_attr_destroy (pthread_attr_t *attr)
-{
- xpthread_check_return ("pthread_attr_destroy",
- pthread_attr_destroy (attr));
-}
diff --git a/support/xpthread_attr_init.c b/support/xpthread_attr_init.c
deleted file mode 100644
index 2e30ade9ab..0000000000
--- a/support/xpthread_attr_init.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_attr_init with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_attr_init (pthread_attr_t *attr)
-{
- xpthread_check_return ("pthread_attr_init", pthread_attr_init (attr));
-}
diff --git a/support/xpthread_attr_setdetachstate.c b/support/xpthread_attr_setdetachstate.c
deleted file mode 100644
index b544dbaa42..0000000000
--- a/support/xpthread_attr_setdetachstate.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* pthread_attr_setdetachstate with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate)
-{
- xpthread_check_return ("pthread_attr_setdetachstate",
- pthread_attr_setdetachstate (attr,
- detachstate));
-}
diff --git a/support/xpthread_attr_setstacksize.c b/support/xpthread_attr_setstacksize.c
deleted file mode 100644
index 02d06310a9..0000000000
--- a/support/xpthread_attr_setstacksize.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_attr_setstacksize with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize)
-{
- xpthread_check_return ("pthread_attr_setstacksize",
- pthread_attr_setstacksize (attr, stacksize));
-}
diff --git a/support/xpthread_barrier_destroy.c b/support/xpthread_barrier_destroy.c
deleted file mode 100644
index efc0719a63..0000000000
--- a/support/xpthread_barrier_destroy.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_barrier_destroy with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_barrier_destroy (pthread_barrier_t *barrier)
-{
- xpthread_check_return ("pthread_barrier_destroy",
- pthread_barrier_destroy (barrier));
-}
diff --git a/support/xpthread_barrier_init.c b/support/xpthread_barrier_init.c
deleted file mode 100644
index b32dad1315..0000000000
--- a/support/xpthread_barrier_init.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* pthread_barrier_init with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_barrier_init (pthread_barrier_t *barrier,
- pthread_barrierattr_t *attr, unsigned int count)
-{
- xpthread_check_return ("pthread_barrier_init",
- pthread_barrier_init (barrier, attr, count));
-}
diff --git a/support/xpthread_barrier_wait.c b/support/xpthread_barrier_wait.c
deleted file mode 100644
index 7cee44d0a3..0000000000
--- a/support/xpthread_barrier_wait.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* pthread_barrier_wait with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-int
-xpthread_barrier_wait (pthread_barrier_t *barrier)
-{
- int ret = pthread_barrier_wait (barrier);
- if (ret != 0 && ret != PTHREAD_BARRIER_SERIAL_THREAD)
- xpthread_check_return ("pthread_barrier_wait", ret);
- return ret == PTHREAD_BARRIER_SERIAL_THREAD;
-}
diff --git a/support/xpthread_cancel.c b/support/xpthread_cancel.c
deleted file mode 100644
index 3af16f9b54..0000000000
--- a/support/xpthread_cancel.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_cancel with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_cancel (pthread_t thr)
-{
- xpthread_check_return ("pthread_cancel", pthread_cancel (thr));
-}
diff --git a/support/xpthread_check_return.c b/support/xpthread_check_return.c
deleted file mode 100644
index 3094d82e9c..0000000000
--- a/support/xpthread_check_return.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Return value checking for pthread functions, exit variant.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xpthread_check_return (const char *function, int value)
-{
- if (value != 0)
- {
- errno = value;
- FAIL_EXIT1 ("%s: %m", function);
- }
-}
diff --git a/support/xpthread_cond_wait.c b/support/xpthread_cond_wait.c
deleted file mode 100644
index b0e9b2a232..0000000000
--- a/support/xpthread_cond_wait.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_cond_wait with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
-{
- xpthread_check_return
- ("pthread_cond_wait", pthread_cond_wait (cond, mutex));
-}
diff --git a/support/xpthread_create.c b/support/xpthread_create.c
deleted file mode 100644
index 98c63e54c3..0000000000
--- a/support/xpthread_create.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* pthread_create with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-pthread_t
-xpthread_create (pthread_attr_t *attr,
- void *(*thread_func) (void *), void *closure)
-{
- pthread_t thr;
- xpthread_check_return
- ("pthread_create", pthread_create (&thr, attr, thread_func, closure));
- return thr;
-}
diff --git a/support/xpthread_detach.c b/support/xpthread_detach.c
deleted file mode 100644
index 2088af2f57..0000000000
--- a/support/xpthread_detach.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_detach with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_detach (pthread_t thr)
-{
- xpthread_check_return ("pthread_detach", pthread_detach (thr));
-}
diff --git a/support/xpthread_join.c b/support/xpthread_join.c
deleted file mode 100644
index f23bb9a5ae..0000000000
--- a/support/xpthread_join.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* pthread_join with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void *
-xpthread_join (pthread_t thr)
-{
- void *result;
- xpthread_check_return ("pthread_join", pthread_join (thr, &result));
- return result;
-}
diff --git a/support/xpthread_mutex_consistent.c b/support/xpthread_mutex_consistent.c
deleted file mode 100644
index 52364be365..0000000000
--- a/support/xpthread_mutex_consistent.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutex_consistent with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutex_consistent (pthread_mutex_t *mutex)
-{
- xpthread_check_return ("pthread_mutex_consistent",
- pthread_mutex_consistent (mutex));
-}
diff --git a/support/xpthread_mutex_destroy.c b/support/xpthread_mutex_destroy.c
deleted file mode 100644
index f11f8f0acd..0000000000
--- a/support/xpthread_mutex_destroy.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutex_destroy with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutex_destroy (pthread_mutex_t *mutex)
-{
- xpthread_check_return ("pthread_mutex_destroy",
- pthread_mutex_destroy (mutex));
-}
diff --git a/support/xpthread_mutex_init.c b/support/xpthread_mutex_init.c
deleted file mode 100644
index 2d16d1b9d9..0000000000
--- a/support/xpthread_mutex_init.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutex_init with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
-{
- xpthread_check_return ("pthread_mutex_init",
- pthread_mutex_init (mutex, attr));
-}
diff --git a/support/xpthread_mutex_lock.c b/support/xpthread_mutex_lock.c
deleted file mode 100644
index af727b45f3..0000000000
--- a/support/xpthread_mutex_lock.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_mutex_lock with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutex_lock (pthread_mutex_t *mutex)
-{
- xpthread_check_return ("pthread_mutex_lock", pthread_mutex_lock (mutex));
-}
diff --git a/support/xpthread_mutex_unlock.c b/support/xpthread_mutex_unlock.c
deleted file mode 100644
index 161b41edf6..0000000000
--- a/support/xpthread_mutex_unlock.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_mutex_unlock with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutex_unlock (pthread_mutex_t *mutex)
-{
- xpthread_check_return ("pthread_mutex_unlock", pthread_mutex_unlock (mutex));
-}
diff --git a/support/xpthread_mutexattr_destroy.c b/support/xpthread_mutexattr_destroy.c
deleted file mode 100644
index c699e32b41..0000000000
--- a/support/xpthread_mutexattr_destroy.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutexattr_destroy with error checking.
- Copyright (C) 2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutexattr_destroy (pthread_mutexattr_t *attr)
-{
- xpthread_check_return ("pthread_mutexattr_destroy",
- pthread_mutexattr_destroy (attr));
-}
diff --git a/support/xpthread_mutexattr_init.c b/support/xpthread_mutexattr_init.c
deleted file mode 100644
index fa93fab178..0000000000
--- a/support/xpthread_mutexattr_init.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_mutexattr_init with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutexattr_init (pthread_mutexattr_t *attr)
-{
- xpthread_check_return ("pthread_mutexattr_init", pthread_mutexattr_init (attr));
-}
diff --git a/support/xpthread_mutexattr_setprotocol.c b/support/xpthread_mutexattr_setprotocol.c
deleted file mode 100644
index 353f75e3d7..0000000000
--- a/support/xpthread_mutexattr_setprotocol.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutexattr_setprotocol with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutexattr_setprotocol (pthread_mutexattr_t *attr, int flag)
-{
- xpthread_check_return ("pthread_mutexattr_setprotocol",
- pthread_mutexattr_setprotocol (attr, flag));
-}
diff --git a/support/xpthread_mutexattr_setpshared.c b/support/xpthread_mutexattr_setpshared.c
deleted file mode 100644
index 242da1aeca..0000000000
--- a/support/xpthread_mutexattr_setpshared.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutexattr_setpshared with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutexattr_setpshared (pthread_mutexattr_t *attr, int flag)
-{
- xpthread_check_return ("pthread_mutexattr_setpshared",
- pthread_mutexattr_setpshared (attr, flag));
-}
diff --git a/support/xpthread_mutexattr_setrobust.c b/support/xpthread_mutexattr_setrobust.c
deleted file mode 100644
index d7d6fa8630..0000000000
--- a/support/xpthread_mutexattr_setrobust.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutexattr_setrobust with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int flag)
-{
- xpthread_check_return ("pthread_mutexattr_setrobust",
- pthread_mutexattr_setrobust (attr, flag));
-}
diff --git a/support/xpthread_mutexattr_settype.c b/support/xpthread_mutexattr_settype.c
deleted file mode 100644
index cf22170b56..0000000000
--- a/support/xpthread_mutexattr_settype.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* pthread_mutexattr_settype with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_mutexattr_settype (pthread_mutexattr_t *attr, int flag)
-{
- xpthread_check_return ("pthread_mutexattr_settype",
- pthread_mutexattr_settype (attr, flag));
-}
diff --git a/support/xpthread_once.c b/support/xpthread_once.c
deleted file mode 100644
index 70d58dbab2..0000000000
--- a/support/xpthread_once.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_once with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_once (pthread_once_t *guard, void (*func) (void))
-{
- xpthread_check_return ("pthread_once", pthread_once (guard, func));
-}
diff --git a/support/xpthread_sigmask.c b/support/xpthread_sigmask.c
deleted file mode 100644
index 0ba9ca02dc..0000000000
--- a/support/xpthread_sigmask.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* pthread_sigmask with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsignal.h>
-#include <support/support.h>
-
-#include <unistd.h>
-
-void
-xpthread_sigmask (int how, const sigset_t *set, sigset_t *oldset)
-{
- if (pthread_sigmask (how, set, oldset) != 0)
- {
- write_message ("error: pthread_setmask failed\n");
- /* Do not use exit because pthread_sigmask can be called from a
- signal handler. */
- _exit (1);
- }
-}
diff --git a/support/xpthread_spin_lock.c b/support/xpthread_spin_lock.c
deleted file mode 100644
index 6975215b17..0000000000
--- a/support/xpthread_spin_lock.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_spin_lock with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_spin_lock (pthread_spinlock_t *lock)
-{
- xpthread_check_return ("pthread_spin_lock", pthread_spin_lock (lock));
-}
diff --git a/support/xpthread_spin_unlock.c b/support/xpthread_spin_unlock.c
deleted file mode 100644
index 4f19a44c48..0000000000
--- a/support/xpthread_spin_unlock.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pthread_spin_unlock with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xthread.h>
-
-void
-xpthread_spin_unlock (pthread_spinlock_t *lock)
-{
- xpthread_check_return ("pthread_spin_unlock", pthread_spin_unlock (lock));
-}
diff --git a/support/xrealloc.c b/support/xrealloc.c
deleted file mode 100644
index 00c313880c..0000000000
--- a/support/xrealloc.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Error-checking wrapper for realloc.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-void *
-xrealloc (void *p, size_t n)
-{
- void *result = realloc (p, n);
- if (result == NULL && (n > 0 || p == NULL))
- oom_error ("realloc", n);
- return result;
-}
diff --git a/support/xrecvfrom.c b/support/xrecvfrom.c
deleted file mode 100644
index 17809c4dd2..0000000000
--- a/support/xrecvfrom.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* recvfrom with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-size_t
-xrecvfrom (int fd, void *buf, size_t buflen, int flags,
- struct sockaddr *sa, socklen_t *salen)
-{
- ssize_t ret = recvfrom (fd, buf, buflen, flags, sa, salen);
- if (ret < 0)
- FAIL_EXIT1 ("error: recvfrom (%d), %zu bytes buffer: %m", fd, buflen);
- return ret;
-}
diff --git a/support/xsendto.c b/support/xsendto.c
deleted file mode 100644
index 20bddf6965..0000000000
--- a/support/xsendto.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* sendto with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xsendto (int fd, const void *buf, size_t buflen, int flags,
- const struct sockaddr *sa, socklen_t salen)
-{
- ssize_t ret = sendto (fd, buf, buflen, flags, sa, salen);
- if (ret < 0)
- FAIL_EXIT1 ("sendto (%d), %zu bytes, family %d: %m",
- fd, buflen, sa->sa_family);
- if (ret != buflen)
- FAIL_EXIT1 ("sendto (%d) sent %zd bytes instead of %zu", fd, ret, buflen);
-}
diff --git a/support/xsetsockopt.c b/support/xsetsockopt.c
deleted file mode 100644
index 9931882e75..0000000000
--- a/support/xsetsockopt.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* setsockopt with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-void
-xsetsockopt (int fd, int level, int name, const void *val, socklen_t vallen)
-{
- if (setsockopt (fd, level, name, val, vallen) != 0)
- FAIL_EXIT1 ("setsockopt (%d, %d, %d), %zu bytes: %m",
- fd, level, name, (size_t) vallen);
-}
diff --git a/support/xsignal.h b/support/xsignal.h
deleted file mode 100644
index 3dc0d9d5ce..0000000000
--- a/support/xsignal.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Support functionality for using signals.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_SIGNAL_H
-#define SUPPORT_SIGNAL_H
-
-#include <signal.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* The following functions call the corresponding libpthread functions
- and terminate the process on error. */
-
-void xpthread_sigmask (int how, const sigset_t *set, sigset_t *oldset);
-
-__END_DECLS
-
-#endif /* SUPPORT_SIGNAL_H */
diff --git a/support/xsocket.c b/support/xsocket.c
deleted file mode 100644
index c1deaee924..0000000000
--- a/support/xsocket.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* socket with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xsocket.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-
-int
-xsocket (int domain, int type, int protocol)
-{
- int fd = socket (domain, type, protocol);
- if (fd < 0)
- FAIL_EXIT1 ("socket (%d, %d, %d): %m\n", domain, type, protocol);
- return fd;
-}
diff --git a/support/xsocket.h b/support/xsocket.h
deleted file mode 100644
index d6724948d8..0000000000
--- a/support/xsocket.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Error-checking wrappers for socket functions.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_XSOCKET_H
-#define SUPPORT_XSOCKET_H
-
-#include <poll.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-
-int xsocket (int, int, int);
-void xsetsockopt (int, int, int, const void *, socklen_t);
-void xgetsockname (int, struct sockaddr *, socklen_t *);
-void xconnect (int, const struct sockaddr *, socklen_t);
-void xbind (int, const struct sockaddr *, socklen_t);
-void xlisten (int, int);
-int xaccept (int, struct sockaddr *, socklen_t *);
-int xaccept4 (int, struct sockaddr *, socklen_t *, int);
-void xsendto (int, const void *, size_t, int,
- const struct sockaddr *, socklen_t);
-size_t xrecvfrom (int, void *, size_t, int, struct sockaddr *, socklen_t *);
-int xpoll (struct pollfd *, nfds_t, int);
-
-#endif /* SUPPORT_XSOCKET_H */
diff --git a/support/xstdio.h b/support/xstdio.h
deleted file mode 100644
index bcc2e863bf..0000000000
--- a/support/xstdio.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Error-checking wrappers for stdio functions.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_XSTDIO_H
-#define SUPPORT_XSTDIO_H
-
-#include <stdio.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-FILE *xfopen (const char *path, const char *mode);
-void xfclose (FILE *);
-
-__END_DECLS
-
-#endif /* SUPPORT_XSTDIO_H */
diff --git a/support/xstrdup.c b/support/xstrdup.c
deleted file mode 100644
index d6a8c04baf..0000000000
--- a/support/xstrdup.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* strdup with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/support.h>
-
-#include <string.h>
-
-char *
-xstrdup (const char *s)
-{
- char *p = strdup (s);
- if (p == NULL)
- oom_error ("strdup", strlen (s));
- return p;
-}
diff --git a/support/xthread.h b/support/xthread.h
deleted file mode 100644
index 6dd7e709be..0000000000
--- a/support/xthread.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Support functionality for using threads.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef SUPPORT_THREAD_H
-#define SUPPORT_THREAD_H
-
-#include <pthread.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/* Terminate the process (with exit status 0) after SECONDS have
- elapsed, from a helper thread. The process is terminated with the
- exit function, so atexit handlers are executed. */
-void delayed_exit (int seconds);
-
-/* Terminate the process (with exit status 1) if VALUE is not zero.
- In that case, print a failure message to standard output mentioning
- FUNCTION. The process is terminated with the exit function, so
- atexit handlers are executed. */
-void xpthread_check_return (const char *function, int value);
-
-/* The following functions call the corresponding libpthread functions
- and terminate the process on error. */
-
-void xpthread_barrier_init (pthread_barrier_t *barrier,
- pthread_barrierattr_t *attr, unsigned int count);
-void xpthread_barrier_destroy (pthread_barrier_t *barrier);
-void xpthread_mutexattr_destroy (pthread_mutexattr_t *);
-void xpthread_mutexattr_init (pthread_mutexattr_t *);
-void xpthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
-void xpthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
-void xpthread_mutexattr_setrobust (pthread_mutexattr_t *, int);
-void xpthread_mutexattr_settype (pthread_mutexattr_t *, int);
-void xpthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
-void xpthread_mutex_destroy (pthread_mutex_t *);
-void xpthread_mutex_lock (pthread_mutex_t *mutex);
-void xpthread_mutex_unlock (pthread_mutex_t *mutex);
-void xpthread_mutex_consistent (pthread_mutex_t *);
-void xpthread_spin_lock (pthread_spinlock_t *lock);
-void xpthread_spin_unlock (pthread_spinlock_t *lock);
-void xpthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex);
-pthread_t xpthread_create (pthread_attr_t *attr,
- void *(*thread_func) (void *), void *closure);
-void xpthread_detach (pthread_t thr);
-void xpthread_cancel (pthread_t thr);
-void *xpthread_join (pthread_t thr);
-void xpthread_once (pthread_once_t *guard, void (*func) (void));
-void xpthread_attr_destroy (pthread_attr_t *attr);
-void xpthread_attr_init (pthread_attr_t *attr);
-void xpthread_attr_setdetachstate (pthread_attr_t *attr,
- int detachstate);
-void xpthread_attr_setstacksize (pthread_attr_t *attr,
- size_t stacksize);
-
-/* This function returns non-zero if pthread_barrier_wait returned
- PTHREAD_BARRIER_SERIAL_THREAD. */
-int xpthread_barrier_wait (pthread_barrier_t *barrier);
-
-__END_DECLS
-
-#endif /* SUPPORT_THREAD_H */
diff --git a/support/xunistd.h b/support/xunistd.h
deleted file mode 100644
index 151d743e1f..0000000000
--- a/support/xunistd.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* POSIX-specific extra functions.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-/* These wrapper functions use POSIX types and therefore cannot be
- declared in <support/support.h>. */
-
-#ifndef SUPPORT_XUNISTD_H
-#define SUPPORT_XUNISTD_H
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-__BEGIN_DECLS
-
-struct stat64;
-
-pid_t xfork (void);
-pid_t xwaitpid (pid_t, int *status, int flags);
-void xpipe (int[2]);
-void xdup2 (int, int);
-int xopen (const char *path, int flags, mode_t);
-void xstat (const char *path, struct stat64 *);
-void xmkdir (const char *path, mode_t);
-void xchroot (const char *path);
-
-/* Close the file descriptor. Ignore EINTR errors, but terminate the
- process on other errors. */
-void xclose (int);
-
-/* Write the buffer. Retry on short writes. */
-void xwrite (int, const void *, size_t);
-
-/* Invoke mmap with a zero file offset. */
-void *xmmap (void *addr, size_t length, int prot, int flags, int fd);
-
-void xmunmap (void *addr, size_t length);
-
-__END_DECLS
-
-#endif /* SUPPORT_XUNISTD_H */
diff --git a/support/xwaitpid.c b/support/xwaitpid.c
deleted file mode 100644
index 204795e4c0..0000000000
--- a/support/xwaitpid.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* waitpid with error checking.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xunistd.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <support/check.h>
-#include <sys/wait.h>
-
-int
-xwaitpid (int pid, int *status, int flags)
-{
- pid_t result = waitpid (pid, status, flags);
- if (result < 0)
- FAIL_EXIT1 ("waitpid: %m\n");
- return result;
-}
diff --git a/support/xwrite.c b/support/xwrite.c
deleted file mode 100644
index 134e8ee4c1..0000000000
--- a/support/xwrite.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* write with error checking and retries.
- Copyright (C) 2016-2017 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
- <http://www.gnu.org/licenses/>. */
-
-#include <support/xunistd.h>
-
-#include <support/check.h>
-
-void
-xwrite (int fd, const void *buffer, size_t length)
-{
- const char *p = buffer;
- const char *end = p + length;
- while (p < end)
- {
- ssize_t ret = write (fd, p, end - p);
- if (ret < 0)
- FAIL_EXIT1 ("write of %zu bytes failed after %td: %m",
- length, p - (const char *) buffer);
- if (ret == 0)
- FAIL_EXIT1 ("write return 0 after writing %td bytes of %zu",
- p - (const char *) buffer, length);
- p += ret;
- }
-}