Hi,

>From macppc bulk logs:

> unireverse.c:173:10: warning: result of comparison of constant -1
> with expression of type 'char' is always false

On macppc the unireverse runtime goes like this:

> $ printf "infinite\nloop" | unireverse
> etinifni
> pool
[hangs forever]

On macppc and arm* char is unsigned by default, so a looped getc(3)
call in unireverse never reaches EOF there. Using an int instead of a
char to store the return value of getc(3) solves that issue.

OK?

Charlène.


Index: Makefile
===================================================================
RCS file: /cvs/ports/misc/uniutils/Makefile,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 Makefile
--- Makefile    12 Jul 2019 20:47:54 -0000      1.8
+++ Makefile    19 Jun 2021 19:23:22 -0000
@@ -3,7 +3,7 @@
 COMMENT=       Unicode utilities
 
 DISTNAME=      uniutils-2.27
-REVISION=      2
+REVISION=      3
 CATEGORIES=    misc
 
 HOMEPAGE=      http://billposer.org/Software/unidesc.html
Index: patches/patch-unireverse_c
===================================================================
RCS file: patches/patch-unireverse_c
diff -N patches/patch-unireverse_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-unireverse_c  19 Jun 2021 19:23:22 -0000
@@ -0,0 +1,17 @@
+$OpenBSD$
+
+Fix an infinite loop on archs where char is unsigned by default (arm*
+and powerpc), because EOF (-1) could not be reached by getc(3).
+
+Index: unireverse.c
+--- unireverse.c.orig
++++ unireverse.c
+@@ -151,7 +151,7 @@ int main(int ac, char **av) {
+ 
+ char * GetLine(FILE *fp, int *LineLength)
+ {
+-  char c;
++  int c;
+   int Available;
+   int CharsRead;
+   char *Line;

Reply via email to