summaryrefslogtreecommitdiff
path: root/core/io/http_client.cpp
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-09-17 09:57:48 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-09-17 09:57:48 -0300
commit202cd5bc9747e90f2299388c41c87d8a74b594cf (patch)
treea4e67b9e6860e95520e21f87c62b168e4b8c9d37 /core/io/http_client.cpp
parent13f2abacd7946ebb87663f764bab2058efe2ebc4 (diff)
parentb86d1e39b9a201c0c6b97c29217ef112c850a6aa (diff)
Merge pull request #637 from Drachenfels/dmaster
Fixed copy process of stream of bytes for HttpClient.
Diffstat (limited to 'core/io/http_client.cpp')
-rw-r--r--core/io/http_client.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp
index 27e202f47f..60a200af12 100644
--- a/core/io/http_client.cpp
+++ b/core/io/http_client.cpp
@@ -500,20 +500,24 @@ ByteArray HTTPClient::read_response_body_chunk() {
}
} else {
- ByteArray::Write r = tmp_read.write();
- int rec=0;
- err = connection->get_partial_data(r.ptr(),MIN(body_left,tmp_read.size()),rec);
- if (rec>0) {
- ByteArray ret;
- ret.resize(rec);
- ByteArray::Write w = ret.write();
- copymem(w.ptr(),r.ptr(),rec);
- body_left-=rec;
- if (body_left==0) {
- status=STATUS_CONNECTED;
+ ByteArray ret;
+ ret.resize(MAX(body_left,tmp_read.size()));
+ ByteArray::Write w = ret.write();
+ int _offset = 0;
+ while (body_left > 0) {
+ ByteArray::Write r = tmp_read.write();
+ int rec=0;
+ err = connection->get_partial_data(r.ptr(),MIN(body_left,tmp_read.size()),rec);
+ if (rec>0) {
+ copymem(w.ptr()+_offset,r.ptr(),rec);
+ body_left-=rec;
+ _offset += rec;
}
- return ret;
}
+ if (body_left==0) {
+ status=STATUS_CONNECTED;
+ }
+ return ret;
}