Date: Fri, 12 Apr 1996 14:07:10 +0530 From: A JOSEPH KOSHY <koshy@india.hp.com> To: Nate Williams <nate@sri.MT.net> Cc: hackers@freebsd.org Subject: Re: Critical stdio bug? Message-ID: <199604120837.AA276558230@fakir.india.hp.com> In-Reply-To: Your message of "Thu, 11 Apr 1996 23:30:23 CST." <199604120530.XAA06324@rocky.sri.MT.net>
next in thread | previous in thread | raw e-mail | index | archive | help
>>>>> "nw" == "Nate Williams" >>>>> nw> OS's, but I had them available). However, on FreeBSD the EOF doesn't nw> get flushed out when it's read. The program works correctly on some HPUX machine I could lay my hands on too. The behaviour seems to be coming from: "lib/libc/stdio/refill.c";__srefill(fp) /* SysV does not make this test; take it out for compatibility */ if (fp->_flags & __SEOF) return (EOF); The problem seems to be here (further down in the function) : fp->_r = (*fp->_read)(fp->_cookie, (char *)fp->_p, fp->_bf._size); fp->_flags &= ~__SMOD; /* buffer contents are again pristine */ if (fp->_r <= 0) { if (fp->_r == 0) fp->_flags |= __SEOF; else { fp->_r = 0; fp->_flags |= __SERR; } return (EOF); } The manual page says: The system guarantees to read the number of bytes requested if the descriptor references a normal file that has that many bytes left before the end-of-file, but in no other case. [...] If successful, the number of bytes actually read is returned. Upon read- ing end-of-file, zero is returned. Otherwise, a -1 is returned and the Thus getting a return count of 0, does not always imply end-of-file forever on the file descriptor. So isn't the check at the beginning of the function incorrect? Koshy
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199604120837.AA276558230>