about summary refs log tree commit diff
path: root/malloc/malloc.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-09-23 04:45:09 +0000
committerUlrich Drepper <drepper@redhat.com>2004-09-23 04:45:09 +0000
commit54915e9e373fdd0c15deca970ae4a04a17c598ad (patch)
treed3ed1907f5894cc0695161126154026f673cf502 /malloc/malloc.c
parentbe27d08c05911a658949ba7b84f4321a65a2dbf4 (diff)
downloadglibc-54915e9e373fdd0c15deca970ae4a04a17c598ad.tar.gz
glibc-54915e9e373fdd0c15deca970ae4a04a17c598ad.tar.xz
glibc-54915e9e373fdd0c15deca970ae4a04a17c598ad.zip
Update.
	* malloc/malloc.c (malloc_printerr): Use syslog if writev failed.
Diffstat (limited to 'malloc/malloc.c')
-rw-r--r--malloc/malloc.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 665d7a4b3e..dcc54c46f1 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -285,6 +285,8 @@ extern "C" {
 
 /* For writev and struct iovec.  */
 #include <sys/uio.h>
+  /* For syslog.  */
+#include <sys/syslog.h>
 
 /*
   Debugging:
@@ -5467,7 +5469,12 @@ malloc_printerr(int action, const char *str, void *ptr)
       iov[n].iov_base = cp;
       iov[n].iov_len = &buf[sizeof (buf) - 1] - cp;
       ++n;
-      TEMP_FAILURE_RETRY (__writev (STDERR_FILENO, iov, n));
+      if (TEMP_FAILURE_RETRY (__writev (STDERR_FILENO, iov, n)) == -1
+	  && errno == EBADF)
+	/* Standard error is not opened.  Try using syslog.  */
+	syslog (LOG_ERR, "%s%s%s", (char *) iov[0].iov_base,
+		(char *) iov[1].iov_base,
+		n == 3 ? (const char *) iov[2].iov_base : "");
     }
   if (action & 2)
     abort ();