Boost logo

Boost :

From: G. Wade Johnson (gwade_at_[hidden])
Date: 2006-01-18 21:49:32


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?

G. Wade


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk