[Rpm-maint] [PATCH] build: fgetc returns int, not char.

Richard W.M. Jones rjones at redhat.com
Wed Aug 10 14:09:37 UTC 2016


Returning the value into a char is a mistake on all platforms, but is
particularly bad on RISC-V.  On that platform (like ARM) char is
unsigned.  Therefore EOF (-1) is returned as 255, and the subsequent
test 'c == EOF' ('255 == -1') fails causing an infinite loop.

Signed-off-by: Richard W.M. Jones <rjones at redhat.com>
---
 build/parseSpec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build/parseSpec.c b/build/parseSpec.c
index 85b0ba3..28f00bc 100644
--- a/build/parseSpec.c
+++ b/build/parseSpec.c
@@ -323,7 +323,7 @@ retry:
 
     /* Make sure we have something in the read buffer */
     if (!(ofi->readPtr && *(ofi->readPtr))) {
-	char c;
+	int c;
 	int i = 0;
 
 	while((c = fgetc(ofi->fp)) != EOF) {
-- 
2.7.4



More information about the Rpm-maint mailing list