Skip to content
Snippets Groups Projects
Commit c149884b authored by patacongo's avatar patacongo
Browse files

Oops.. sendfile() was not keeping track of the number bytes transferred or...

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
parent 83d0a753
No related branches found
No related tags found
No related merge requests found
......@@ -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
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment