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;
No comments:
Post a Comment