From 72ffb52be222b1d9a0f152cf83f08c8a55891e02 Mon Sep 17 00:00:00 2001 From: timw1971 Date: Sat, 8 Aug 2015 11:48:18 +0100 Subject: [PATCH] Improvements to ESP8266WebServer::sendContent Now makes only one call to .c_str() and using pointer tracking, rather that recalculating offset within the sending loop, to manage data window. Moved invariant code out of the sending loop body. --- .../ESP8266WebServer/src/ESP8266WebServer.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp b/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp index c709dcfdd2..99068661c8 100644 --- a/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp +++ b/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp @@ -178,17 +178,18 @@ void ESP8266WebServer::send(int code, const String& content_type, const String& } void ESP8266WebServer::sendContent(const String& content) { + const size_t unit_size = HTTP_DOWNLOAD_UNIT_SIZE; size_t size_to_send = content.length(); - size_t size_sent = 0; - while(size_to_send) { - const size_t unit_size = HTTP_DOWNLOAD_UNIT_SIZE; + const char* send_start = content.c_str(); + + while (size_to_send) { size_t will_send = (size_to_send < unit_size) ? size_to_send : unit_size; - size_t sent = _currentClient.write(content.c_str() + size_sent, will_send); - size_to_send -= sent; - size_sent += sent; + size_t sent = _currentClient.write(send_start, will_send); if (sent == 0) { break; } + size_to_send -= sent; + send_start += sent; } }