[net.lang.c] How it got "broke"...

don@umd5 (Chris Sylvain) (10/21/86)

[]
Why "while( fputc(fgetc(fd), fe) != EOF )" quit working as it
did under both 2.9BSD and Ultrix 1.2 ...
1)  At the end of file, fgetc() returns (int) -1.
2)  fputc() prints (char) -1 and then returns a CHAR not an INT.

Naturally, (int) -1 != (char) -1, so we have a problem.
Question is now: can I deduce that under 2.9BSD and Ultrix
in the above code fragment there is an implied cast, i.e.,
(char) EOF or (int) fputc() ?

[thanks to everyone who responded to the previous posting.]
-- 
--==---==---==--
.. O frabjous day! Callooh! Callay! ..

ARPA: don@umd5.UMD.EDU     BITNET: don%umd5@umd2
UUCP: ..!{ seismo!umcp-cs, ihnp4!rlgvax }!cvl!umd5!don

** WARNING: don@mimsy.UMD.EDU is a different person **
** (umcp-cs and mimsy.umd.edu are the same machine) **
**   -->   Please double-check the address   <--    **

chris@umcp-cs.UUCP (Chris Torek) (10/22/86)

In article <1322@umd5> don@umd5 (Chris Sylvain) writes:
>Why "while( fputc(fgetc(fd), fe) != EOF )" quit working as it
>did under both 2.9BSD and Ultrix 1.2 ...

Chances are it never really worked: fputc(EOF, fe) is likely to
put a meta-DEL into file `fe'.

>1)  At the end of file, fgetc() returns (int) -1.
>2)  fputc() prints (char) -1 and then returns a CHAR not an INT.

Actually, fputc returns (unsigned char)c, which turned EOF to 255.

>Naturally, (int) -1 != (char) -1, so we have a problem.

On Ultrix 1.2 Vaxen and 2.9BSD 11s, (int) -1 *is* equal to
(char) -1.  The code is wrong in the first place; fputc is
not supposed to be handed an EOF.  What it does in such cases
is undefined.
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7690)
UUCP:	seismo!umcp-cs!chris
CSNet:	chris@umcp-cs		ARPA:	chris@mimsy.umd.edu