changeset 220:94382d79ae47 HEAD

make sure failure handlers don't modify errno.
author Timo Sirainen <tss@iki.fi>
date Fri, 13 Sep 2002 02:09:45 +0300
parents 79ae841efc11
children ed0d5b17c7a4
files src/lib/failures.c src/lib/failures.h
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/failures.c	Wed Sep 11 20:45:03 2002 +0300
+++ b/src/lib/failures.c	Fri Sep 13 02:09:45 2002 +0300
@@ -82,6 +82,8 @@
 
 static void default_error_handler(const char *format, va_list args)
 {
+	int old_errno = errno;
+
 	write_prefix();
 
 	fputs("Error: ", log_fd);
@@ -89,10 +91,14 @@
         fputc('\n', log_fd);
 
 	fflush(log_fd);
+
+	errno = old_errno;
 }
 
 static void default_warning_handler(const char *format, va_list args)
 {
+	int old_errno = errno;
+
 	write_prefix();
 
 	fputs("Warning: ", log_fd);
@@ -100,6 +106,8 @@
         fputc('\n', log_fd);
 
 	fflush(log_fd);
+
+	errno = old_errno;
 }
 
 void i_panic(const char *format, ...)
--- a/src/lib/failures.h	Wed Sep 11 20:45:03 2002 +0300
+++ b/src/lib/failures.h	Fri Sep 13 02:09:45 2002 +0300
@@ -10,6 +10,7 @@
 void i_error(const char *format, ...) __attr_format__(1, 2);
 void i_warning(const char *format, ...) __attr_format__(1, 2);
 
+/* Change failure handlers. Make sure they don't modify errno. */
 void i_set_panic_handler(FailureFunc func __attr_noreturn__);
 void i_set_fatal_handler(FailureFunc func __attr_noreturn__);
 void i_set_error_handler(FailureFunc func);