|
Boost : |
From: Beman Dawes (bdawes_at_[hidden])
Date: 2006-02-07 18:12:42
G. Wade Johnson wrote:
> I was looking in the code for copy_file() and noticed what may be a bug. In
> the loop that handles partial writes, the code makes multiple attempts
> reducing the amount of data written each time. Unfortunately, the offset into
> the data is not changed as well. See below.
>
> sz_write = 0;
> do
> {
> if ( (sz = ::write( outfile, buf.get(), sz_read - sz_write )) < 0 )
> {
> sz_read = sz; // cause read loop termination
> break; // and error to be thrown after closes
> }
> sz_write += sz;
> } while ( sz_write < sz_read );
>
> Unless I'm missing something, it looks like a partial write will result in the
> first part of the buffer being written multiple times. I checked the version
> in CVS and it appears to have the same code.
>
> Am I missing something or is this incorrect?
A bug for sure. Nice catch. Fixed in CVS.
At least I hope it is fixed. I don't see an easy way to test it.
The code now reads:
sz_write = 0;
do
{
if ( (sz = ::write( outfile, buf.get()+sz_write,
sz_read - sz_write )) < 0 )
{
sz_read = sz; // cause read loop termination
break; // and error to be thrown after closes
}
sz_write += sz;
} while ( sz_write < sz_read );
Thanks,
--Beman
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk