From c606292a2bdc2f47b89002599caa016ee9bbe6d5 Mon Sep 17 00:00:00 2001 From: rcombs Date: Tue, 24 Aug 2021 03:17:26 -0500 Subject: [PATCH 1/5] Make String::concat(const char *, unsigned int) public From upstream ArduinoCore-API commit 3b88acac8ee00fc57bc3328e68823aa53088f891 --- cores/esp32/WString.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/WString.h b/cores/esp32/WString.h index 9440b38be39..d22161b0d3f 100644 --- a/cores/esp32/WString.h +++ b/cores/esp32/WString.h @@ -108,6 +108,7 @@ class String { // concatenation is considered unsuccessful. unsigned char concat(const String &str); unsigned char concat(const char *cstr); + unsigned char concat(const char *cstr, unsigned int length); unsigned char concat(char c); unsigned char concat(unsigned char c); unsigned char concat(int num); @@ -326,7 +327,6 @@ class String { void init(void); void invalidate(void); unsigned char changeBuffer(unsigned int maxStrLen); - unsigned char concat(const char *cstr, unsigned int length); // copy and move String & copy(const char *cstr, unsigned int length); From ecfafe35c6b42b3f3651dcbc096bb1737d9d2368 Mon Sep 17 00:00:00 2001 From: rcombs Date: Tue, 24 Aug 2021 03:19:09 -0500 Subject: [PATCH 2/5] Add String(char *, unsigned) constructor From upstream ArduinoCore-API commit 84314888a8a73b643469c5609beed6d21d1c037a --- cores/esp32/WString.cpp | 6 ++++++ cores/esp32/WString.h | 1 + 2 files changed, 7 insertions(+) diff --git a/cores/esp32/WString.cpp b/cores/esp32/WString.cpp index 23b1af20710..ad2c78774b5 100644 --- a/cores/esp32/WString.cpp +++ b/cores/esp32/WString.cpp @@ -35,6 +35,12 @@ String::String(const char *cstr) { copy(cstr, strlen(cstr)); } +String::String(const char *cstr, unsigned int length) { + init(); + if (cstr) + copy(cstr, length); +} + String::String(const String &value) { init(); *this = value; diff --git a/cores/esp32/WString.h b/cores/esp32/WString.h index d22161b0d3f..3b9d34661ce 100644 --- a/cores/esp32/WString.h +++ b/cores/esp32/WString.h @@ -55,6 +55,7 @@ class String { // fails, the string will be marked as invalid (i.e. "if (s)" will // be false). String(const char *cstr = ""); + String(const char *cstr, unsigned int length); String(const String &str); String(const __FlashStringHelper *str); #ifdef __GXX_EXPERIMENTAL_CXX0X__ From 6f0ba88a687d625c59e71fb02183d8bcb58a03c9 Mon Sep 17 00:00:00 2001 From: rcombs Date: Tue, 24 Aug 2021 03:29:01 -0500 Subject: [PATCH 3/5] Don't mess with the original in String::substring From upstream ArduinoCore-API commit dd236bfd2c62ed083aaa1b1229d71e85fd92f7a9 --- cores/esp32/WString.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cores/esp32/WString.cpp b/cores/esp32/WString.cpp index ad2c78774b5..b78cf2eed90 100644 --- a/cores/esp32/WString.cpp +++ b/cores/esp32/WString.cpp @@ -711,10 +711,7 @@ String String::substring(unsigned int left, unsigned int right) const { return out; if(right > len()) right = len(); - char temp = buffer()[right]; // save the replaced character - wbuffer()[right] = '\0'; - out = wbuffer() + left; // pointer arithmetic - wbuffer()[right] = temp; //restore character + out.copy(buffer() + left, right - left); return out; } From 4a3ef50131406480a791150ffc3e52acccbf16f2 Mon Sep 17 00:00:00 2001 From: rcombs Date: Tue, 24 Aug 2021 03:20:04 -0500 Subject: [PATCH 4/5] Add String::concat(const uint8_t *, unsigned int) version From upstream ArduinoCore-API commit eaab14db09073afc20bcf26bd9b7448a6a1309b0 --- cores/esp32/WString.h | 1 + 1 file changed, 1 insertion(+) diff --git a/cores/esp32/WString.h b/cores/esp32/WString.h index 3b9d34661ce..3c2acf7c52a 100644 --- a/cores/esp32/WString.h +++ b/cores/esp32/WString.h @@ -110,6 +110,7 @@ class String { unsigned char concat(const String &str); unsigned char concat(const char *cstr); unsigned char concat(const char *cstr, unsigned int length); + unsigned char concat(const uint8_t *cstr, unsigned int length) {return concat((const char*)cstr, length);} unsigned char concat(char c); unsigned char concat(unsigned char c); unsigned char concat(int num); From 20001606ca7ad829988a5ba27589d2f873305c26 Mon Sep 17 00:00:00 2001 From: rcombs Date: Tue, 24 Aug 2021 03:20:45 -0500 Subject: [PATCH 5/5] Add String(const uint8_t *, unsigned int) constructor From upstream ArduinoCore-API commit 0d83f1afc3367037dbde5323c2abd0ae1bd2c583 --- cores/esp32/WString.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cores/esp32/WString.h b/cores/esp32/WString.h index 3c2acf7c52a..958b01792e8 100644 --- a/cores/esp32/WString.h +++ b/cores/esp32/WString.h @@ -56,6 +56,9 @@ class String { // be false). String(const char *cstr = ""); String(const char *cstr, unsigned int length); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + String(const uint8_t *cstr, unsigned int length) : String((const char*)cstr, length) {} +#endif String(const String &str); String(const __FlashStringHelper *str); #ifdef __GXX_EXPERIMENTAL_CXX0X__