diff options
author | Florian Weimer <fweimer@redhat.com> | 2018-01-12 08:18:30 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2018-01-12 13:35:01 +0100 |
commit | 1a51e46e4a87e1cd9528ac5e5656011636e4086b (patch) | |
tree | 0120ca1d101beec6d0cf0532cdd4ab31aa95e211 | |
parent | 63b52889c35b367cf20896442203bbe5d123058c (diff) | |
download | glibc-1a51e46e4a87e1cd9528ac5e5656011636e4086b.tar.gz glibc-1a51e46e4a87e1cd9528ac5e5656011636e4086b.tar.xz glibc-1a51e46e4a87e1cd9528ac5e5656011636e4086b.zip |
support: Preserve errno in write_message, TEST_VERIFY and other checks
These facilities could clobber errno, which makes it difficult to write certain checks because a specific order has to be used.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | support/check.c | 3 | ||||
-rw-r--r-- | support/support_test_compare_failure.c | 3 | ||||
-rw-r--r-- | support/support_test_verify_impl.c | 3 | ||||
-rw-r--r-- | support/write_message.c | 3 |
5 files changed, 21 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index baba58a5b4..72aaf78cf2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2018-01-12 Florian Weimer <fweimer@redhat.com> + * support/write_message.c (write_message): Preserve errno. + * support/check.c (print_failure): Likewise. + * support/support_test_verify_impl.c (support_test_verify_impl): + Likewise. + * support/support_test_compare_failure.c + (support_test_compare_failure): Likewise. + +2018-01-12 Florian Weimer <fweimer@redhat.com> + [BZ #22701] * nis/Makefile (install-lib-ldscripts, $(inst_libdir)/libnsl.so): Prevent installation of libnsl.so. diff --git a/support/check.c b/support/check.c index 688ed569ac..78f2b3cde1 100644 --- a/support/check.c +++ b/support/check.c @@ -18,6 +18,7 @@ #include <support/check.h> +#include <errno.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> @@ -26,9 +27,11 @@ static void print_failure (const char *file, int line, const char *format, va_list ap) { + int saved_errno = errno; printf ("error: %s:%d: ", file, line); vprintf (format, ap); puts (""); + errno = saved_errno; } int diff --git a/support/support_test_compare_failure.c b/support/support_test_compare_failure.c index e5596fd121..8eb51c439d 100644 --- a/support/support_test_compare_failure.c +++ b/support/support_test_compare_failure.c @@ -16,6 +16,7 @@ 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> @@ -44,6 +45,7 @@ support_test_compare_failure (const char *file, int line, int right_positive, int right_size) { + int saved_errno = errno; support_record_failure (); if (left_size != right_size) printf ("%s:%d: numeric comparison failure (widths %d and %d)\n", @@ -52,4 +54,5 @@ support_test_compare_failure (const char *file, int line, printf ("%s:%d: numeric comparison failure\n", file, line); report (" left", left_expr, left_value, left_positive, left_size); report ("right", right_expr, right_value, right_positive, right_size); + errno = saved_errno; } diff --git a/support/support_test_verify_impl.c b/support/support_test_verify_impl.c index 80311a8265..5ff5555a6a 100644 --- a/support/support_test_verify_impl.c +++ b/support/support_test_verify_impl.c @@ -18,14 +18,17 @@ #include <support/check.h> +#include <errno.h> #include <stdio.h> #include <stdlib.h> void support_test_verify_impl (const char *file, int line, const char *expr) { + int saved_errno = errno; support_record_failure (); printf ("error: %s:%d: not true: %s\n", file, line, expr); + errno = saved_errno; } void diff --git a/support/write_message.c b/support/write_message.c index 9d0f267a2f..a3e2f90535 100644 --- a/support/write_message.c +++ b/support/write_message.c @@ -18,12 +18,15 @@ #include <support/support.h> +#include <errno.h> #include <string.h> #include <unistd.h> void write_message (const char *message) { + int saved_errno = errno; ssize_t unused __attribute__ ((unused)); unused = write (STDOUT_FILENO, message, strlen (message)); + errno = saved_errno; } |