1 Jul 1999 00:00:52 GMT, Marcin 'Qrczak' Kowalczyk <[EMAIL PROTECTED]> pisze:

> When reading from a socket using hGetLine, 8bit characters cause
> fatal error, e.g.:
> 
> Fail: Prelude.Enum.toEnum{Char}: out of range: -77

I think I found it. The bug always occurs in NoBuffering mode.

--- ghc/lib/std/cbits/readFile.c.orig   Sun Feb  7 23:03:38 1999
+++ ghc/lib/std/cbits/readFile.c        Thu Jul  1 11:09:54 1999
@@ -258,7 +258,7 @@
 {
     IOFileObject* fo= (IOFileObject*)ptr;
     int count,rc=0;
-    char c;
+    unsigned char c;
 
     /* Check if someone hasn't zapped us */
     if ( fo == NULL || fo->fd == -1)

I can't check whether it works, because ghc-4.02 does not compile
for me. Fortunately I can use LineBuffering for my sockets.

A test program:

import IO
main = do
    hSetBuffering stdin NoBuffering
    getChar >>= putChar

It fails when a character with high bit set is entered.

-- 
 __("<    Marcin Kowalczyk * [EMAIL PROTECTED] http://kki.net.pl/qrczak/
 \__/          GCS/M d- s+:-- a22 C+++>+++$ UL++>++++$ P+++ L++>++++$ E-
  ^^                W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK                  5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-

Reply via email to