Skip to content

Commit 1c7b816

Browse files
committed
Merge pull request #1289 from gtalusan/short_writes
handle short writes
2 parents 9a1b905 + 70c85c0 commit 1c7b816

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

cores/esp8266/StreamString.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,10 @@
2525

2626
size_t StreamString::write(const uint8_t *buffer, size_t size) {
2727
if(reserve(length() + size + 1)) {
28-
for(size_t i = 0; i < size; i++) {
29-
if(write(*buffer)) {
30-
buffer++;
31-
} else {
32-
return i;
33-
}
34-
}
35-
28+
const uint8_t *s = buffer;
29+
const uint8_t *end = buffer + size;
30+
while(write(*s++) && s < end);
31+
return s - buffer;
3632
}
3733
return 0;
3834
}

libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,12 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
363363
int c = stream->readBytes(buff, ((s > buff_size) ? buff_size : s));
364364

365365
// write it to Stream
366-
bytesWritten += _tcp->write((const uint8_t *) buff, c);
366+
int w = _tcp->write((const uint8_t *) buff, c);
367+
if(w != c) {
368+
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] short write asked for %d but got %d\n", c, w);
369+
break;
370+
}
371+
bytesWritten += c;
367372

368373
if(len > 0) {
369374
len -= c;
@@ -470,7 +475,12 @@ int HTTPClient::writeToStream(Stream * stream) {
470475
int c = _tcp->readBytes(buff, ((size > buff_size) ? buff_size : size));
471476

472477
// write it to Stream
473-
bytesWritten += stream->write(buff, c);
478+
int w = stream->write(buff, c);
479+
if(w != c) {
480+
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] short write asked for %d but got %d\n", c, w);
481+
break;
482+
}
483+
bytesWritten += c;
474484

475485
if(len > 0) {
476486
len -= c;

0 commit comments

Comments
 (0)