From 10a17dfbad2c267d885817abc9c7589fc7ff630b Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 16 Feb 2016 13:26:16 -0500 Subject: [PATCH] fix assumption in fputs that fwrite returning 0 implies an error internally, the idiom of passing nmemb=1 to fwrite and interpreting the return value of fwrite (which is necessarily 0 or 1) as failure/success is fairly widely used. this is not correct, however, when the size argument is unknown and may be zero, since C requires fwrite to return 0 in that special case. previously fwrite always returned nmemb on success, but this was changed for conformance with ISO C by commit 500c6886c654fd45e4926990fee2c61d816be197. --- src/stdio/fputs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stdio/fputs.c b/src/stdio/fputs.c index 4737f448..1cf344f2 100644 --- a/src/stdio/fputs.c +++ b/src/stdio/fputs.c @@ -3,7 +3,8 @@ int fputs(const char *restrict s, FILE *restrict f) { - return (int)fwrite(s, strlen(s), 1, f) - 1; + size_t l = strlen(s); + return (fwrite(s, 1, l, f)==l) - 1; } weak_alias(fputs, fputs_unlocked); -- 2.25.1