aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2018-01-12 08:18:30 +0100
committerFlorian Weimer <fweimer@redhat.com>2018-01-12 13:35:01 +0100
commit1a51e46e4a87e1cd9528ac5e5656011636e4086b (patch)
tree0120ca1d101beec6d0cf0532cdd4ab31aa95e211
parent63b52889c35b367cf20896442203bbe5d123058c (diff)
downloadglibc-1a51e46e4a87e1cd9528ac5e5656011636e4086b.tar
glibc-1a51e46e4a87e1cd9528ac5e5656011636e4086b.tar.gz
glibc-1a51e46e4a87e1cd9528ac5e5656011636e4086b.tar.bz2
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--ChangeLog9
-rw-r--r--support/check.c3
-rw-r--r--support/support_test_compare_failure.c3
-rw-r--r--support/support_test_verify_impl.c3
-rw-r--r--support/write_message.c3
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;
}