From: <mie...@us...> - 2008-06-19 18:04:08
|
Revision: 2550 http://oorexx.svn.sourceforge.net/oorexx/?rev=2550&view=rev Author: miesfeld Date: 2008-06-19 11:04:04 -0700 (Thu, 19 Jun 2008) Log Message: ----------- Ensure SysFile::read() only returns true when some bytes are actually read. Modified Paths: -------------- sandbox/rick/opt/kernel/platform/windows/SysFile.cpp Modified: sandbox/rick/opt/kernel/platform/windows/SysFile.cpp =================================================================== --- sandbox/rick/opt/kernel/platform/windows/SysFile.cpp 2008-06-19 17:11:14 UTC (rev 2549) +++ sandbox/rick/opt/kernel/platform/windows/SysFile.cpp 2008-06-19 18:04:04 UTC (rev 2550) @@ -253,12 +253,23 @@ return true; } +/** + * Read bytes from the stream. + * + * @param buf The buffer to read into. + * @param len The requested number of bytes to read. + * @param bytesRead The actual number of bytes read. + * + * @return True if or or more bytes are read into buf, otherwise false. + */ bool SysFile::read(char *buf, size_t len, size_t &bytesRead) { + // set bytesRead to 0 to be sure we can tell if we are returning any bytes. + bytesRead = 0; + // asking for nothing? this is pretty easy if (len == 0) { - bytesRead = 0; return true; } @@ -273,7 +284,7 @@ len--; ungetchar = -1; // were we only looking for one character (very common in cases where - // we've had a char pushed back + // we've had a char pushed back) if (len == 0) { return true; @@ -305,7 +316,7 @@ // not get anything? if (_eof(fileHandle)) { - return true; + return bytesRead > 0 ? true : false; } else { @@ -341,7 +352,8 @@ // not get anything? if (_eof(fileHandle)) { - return true; + // could have had an ungetchar + return bytesRead > 0 ? true : false; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |