From 416d1c7a711807384cc21a18163475cf757bbcb5 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Wed, 10 Feb 2016 19:10:34 -0500 Subject: fix line-buffered flush omission for odd usage of putc-family functions as specified, the int argument providing the character to write is converted to type unsigned char. for the actual write to buffer, conversion happened implicitly via the assignment operator; however, the logic to check whether the argument was a newline used the original int value. thus usage such as putchar('\n'+0x100) failed to produce a flush. --- src/internal/stdio_impl.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/internal/stdio_impl.h b/src/internal/stdio_impl.h index 0dd7fb5e..7cdf729d 100644 --- a/src/internal/stdio_impl.h +++ b/src/internal/stdio_impl.h @@ -86,7 +86,8 @@ void __ofl_unlock(void); #define getc_unlocked(f) \ ( ((f)->rpos < (f)->rend) ? *(f)->rpos++ : __uflow((f)) ) -#define putc_unlocked(c, f) ( ((c)!=(f)->lbf && (f)->wpos<(f)->wend) \ +#define putc_unlocked(c, f) \ + ( ((unsigned char)(c)!=(f)->lbf && (f)->wpos<(f)->wend) \ ? *(f)->wpos++ = (c) : __overflow((f),(c)) ) /* Caller-allocated FILE * operations */ -- cgit v1.2.1