From: Simon Ruderich Date: Mon, 10 Jun 2013 04:19:00 +0000 (+0200) Subject: Fix save/restore of errno for isatty(). X-Git-Tag: 0.1~88 X-Git-Url: https://ruderich.org/simon/gitweb/?a=commitdiff_plain;h=86352712fdc5fa08777eca1458f4ef6bbe579e7b;p=coloredstderr%2Fcoloredstderr.git Fix save/restore of errno for isatty(). --- diff --git a/src/coloredstderr.c b/src/coloredstderr.c index 72a881f..727c580 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -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()); diff --git a/src/hookmacros.h b/src/hookmacros.h index 0eb47cd..6b52293 100644 --- a/src/hookmacros.h +++ b/src/hookmacros.h @@ -38,7 +38,7 @@ * if (force_write_to_non_tty) { * handle = 1; * } else { - * handle = isatty(); + * handle = isatty_noinline(); * } * } 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; \