diff options
author | Juan Linietsky <reduzio@gmail.com> | 2014-09-17 09:57:48 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2014-09-17 09:57:48 -0300 |
commit | 202cd5bc9747e90f2299388c41c87d8a74b594cf (patch) | |
tree | a4e67b9e6860e95520e21f87c62b168e4b8c9d37 /core/io/http_client.cpp | |
parent | 13f2abacd7946ebb87663f764bab2058efe2ebc4 (diff) | |
parent | b86d1e39b9a201c0c6b97c29217ef112c850a6aa (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.cpp | 28 |
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; } |