FileRequest: Better error handling for size mismatches

This commit is contained in:
Stephan Aßmus
2014-01-23 10:20:22 +01:00
parent 9e751dda2e
commit d5c2ed6b14
+11 -4
View File
@@ -65,8 +65,11 @@ BFileRequest::_ProtocolLoop()
// Send all notifications to listener, if any // Send all notifications to listener, if any
if (fListener != NULL) { if (fListener != NULL) {
fListener->ConnectionOpened(this); fListener->ConnectionOpened(this);
off_t size = 0; off_t size = 0;
file.GetSize(&size); error = file.GetSize(&size);
if (error != B_OK)
return error;
fResult.SetLength(size); fResult.SetLength(size);
ssize_t chunkSize; ssize_t chunkSize;
@@ -75,9 +78,13 @@ BFileRequest::_ProtocolLoop()
fListener->DataReceived(this, chunk, chunkSize); fListener->DataReceived(this, chunk, chunkSize);
transferredSize += chunkSize; transferredSize += chunkSize;
} }
// Return last error if we didn't transfer everything // Return error if we didn't transfer everything
if (transferredSize != size) if (transferredSize != size) {
return chunkSize; if (chunkSize < 0)
return (status_t)chunkSize;
else
return B_IO_ERROR;
}
fListener->DownloadProgress(this, size, size); fListener->DownloadProgress(this, size, size);
} }