From: cgf AT cygnus DOT com (Christopher Faylor) Subject: Re: fhandler_console bug 11 Jan 1999 06:31:38 -0800 Message-ID: <19990111091746.A18301.cygnus.cygwin32.developers@cygnus.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii To: Kazuhiro Fujieda , cygwin32-developers AT cygnus DOT com I've added code to fhandler_console.cc which specifically handles EOF. It will be in the next snapshot. Thanks for finding this. -chris On Mon, Jan 11, 1999 at 09:16:00PM +0900, Kazuhiro Fujieda wrote: >The following program is hanged up when Return and ^Z are typed >continuously in notty mode on Win95. > >#include >main() >{ > int ch; > while ((ch = fgetc(stdin)) != EOF) { > printf("ch = %02x\n", ch); > } >} > >The reason of it is in fhandler_console.cc:1143-1157. > >1142: copied_chars = 0x12345678; >1143: if ((res = ReadFile (hndl, buf, lenin, &copied_chars, NULL)) && >1144: copied_chars == 0x12345678) > >When ^Z is typed, ReadFile catch the EOF and set copied_char is 0. >But the succeeding code take no account of this case. On Win95, >ReadFile doesn't modify the contents of buf in this case, so >buf[0] is still '\n' and the program is crushed by the following >code. > >1153: if (!looped++ && buf[0] == '\n') >1154: { >1155: if (!--copied_chars) >1156: continue; >1157: memcpy (buf, buf + 1, copied_chars); >____ > | AIST Kazuhiro Fujieda > | HOKURIKU School of Information Science >o_/ 1990 Japan Advanced Institute of Science and Technology > -- cgf AT cygnus DOT com http://www.cygnus.com/