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:
parent
83d0a7537a
commit
c149884bfd
@ -114,6 +114,7 @@
|
|||||||
ssize_t sendfile(int outfd, int infd, off_t *offset, size_t count)
|
ssize_t sendfile(int outfd, int infd, off_t *offset, size_t count)
|
||||||
{
|
{
|
||||||
FAR uint8_t *iobuffer;
|
FAR uint8_t *iobuffer;
|
||||||
|
FAR uint8_t *wrbuffer;
|
||||||
off_t startpos = 0;
|
off_t startpos = 0;
|
||||||
ssize_t nbytesread;
|
ssize_t nbytesread;
|
||||||
ssize_t nbyteswritten;
|
ssize_t nbyteswritten;
|
||||||
@ -205,18 +206,31 @@ ssize_t sendfile(int outfd, int infd, off_t *offset, size_t count)
|
|||||||
* conclusion.
|
* conclusion.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
wrbuffer = iobuffer;
|
||||||
do
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user