musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2016年02月10日 19:10:34 -0500
committerRich Felker <dalias@aerifal.cx>2016年02月10日 19:10:34 -0500
commit416d1c7a711807384cc21a18163475cf757bbcb5 (patch)
tree8a31270eb7640693929a0d4447e42e34f83cb687 /src
parent5a6e8d098abfef67028e6c3edbac39e0bbaf8bd8 (diff)
downloadmusl-416d1c7a711807384cc21a18163475cf757bbcb5.tar.gz
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.
Diffstat (limited to 'src')
-rw-r--r--src/internal/stdio_impl.h 3
1 files changed, 2 insertions, 1 deletions
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 */
generated by cgit v1.2.1 (git 2.18.0) at 2025年09月25日 08:24:49 +0000

AltStyle によって変換されたページ (->オリジナル) /