Fix save/restore of errno for isatty().

This commit is contained in:
Simon Ruderich
2013-06-10 06:19:00 +02:00
parent 0a2617527c
commit 86352712fd
2 changed files with 16 additions and 3 deletions

View File

@@ -64,6 +64,19 @@ static int force_write_to_non_tty;
/* See hookmacros.h for the decision if a function call is colored. */
/* Prevent inlining into hook functions because it may increase the number of
* spilled registers unnecessarily. As it's not called very often accept the
* additional call. */
static int isatty_noinline(int fd) __noinline;
static int isatty_noinline(int fd) {
int saved_errno = errno;
int result = isatty(fd);
errno = saved_errno;
return result;
}
static void dup_fd(int oldfd, int newfd) {
#ifdef DEBUG
debug("%3d -> %3d\t\t\t[%d]\n", oldfd, newfd, getpid());

View File

@@ -38,7 +38,7 @@
* if (force_write_to_non_tty) {
* handle = 1;
* } else {
* handle = isatty(<fd>);
* handle = isatty_noinline(<fd>);
* }
* } else {
* handle = 0;
@@ -72,7 +72,7 @@
if (unlikely(force_write_to_non_tty)) { \
handle = 1; \
} else { \
handle = isatty(fd); \
handle = isatty_noinline(fd); \
} \
} else { \
handle = 0; \
@@ -87,7 +87,7 @@
if (unlikely(force_write_to_non_tty)) { \
handle = 1; \
} else { \
handle = isatty(fileno(file)); \
handle = isatty_noinline(fileno(file)); \
} \
} else { \
handle = 0; \