Oops.. sendfile() was not keeping track of the number bytes transferred or handling partial writes correctly.

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5091 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-09-05 01:59:54 +00:00
parent 83d0a7537a
commit c149884bfd

View File

@ -114,6 +114,7 @@
ssize_t sendfile(int outfd, int infd, off_t *offset, size_t count)
{
FAR uint8_t *iobuffer;
FAR uint8_t *wrbuffer;
off_t startpos = 0;
ssize_t nbytesread;
ssize_t nbyteswritten;
@ -205,18 +206,31 @@ ssize_t sendfile(int outfd, int infd, off_t *offset, size_t count)
* conclusion.
*/
wrbuffer = iobuffer;
do
{
nbyteswritten = write(outfd, iobuffer, nbytesread);
nbyteswritten = write(outfd, wrbuffer, nbytesread);
/* Check for a complete (or parial write) */
/* Check for a complete (or parial write). write() should not
* return zero.
*/
if (nbyteswritten >= 0)
{
nbytesread -= nbyteswritten;
/* Advance the buffer pointer and decrement the number of bytes
* remaining in the iobuffer. Typically, nbytesread will now
* be zero.
*/
wrbuffer += nbyteswritten;
nbytesread -= nbyteswritten;
/* Increment the total number of bytes successfully transferred. */
ntransferred += nbyteswritten;
}
/* Otherwise an error occurred (write should not return zero) */
/* Otherwise an error occurred */
else
{