@@ -185,7 +185,7 @@ unsigned char String::changeBuffer(unsigned int maxStrLen) {
185185 size_t oldSize = capacity () + 1 ; // include NULL.
186186 if (isSSO ()) {
187187 // Copy the SSO buffer into allocated space
188- memmove (newbuffer, sso.buff , sizeof (sso.buff ));
188+ memmove_P (newbuffer, sso.buff , sizeof (sso.buff ));
189189 }
190190 if (newSize > oldSize)
191191 {
@@ -210,7 +210,7 @@ String & String::copy(const char *cstr, unsigned int length) {
210210 return *this ;
211211 }
212212 setLen (length);
213- memmove (wbuffer (), cstr, length + 1 );
213+ memmove_P (wbuffer (), cstr, length + 1 );
214214 return *this ;
215215}
216216
@@ -228,7 +228,7 @@ String & String::copy(const __FlashStringHelper *pstr, unsigned int length) {
228228void String::move (String &rhs) {
229229 if (buffer ()) {
230230 if (capacity () >= rhs.len ()) {
231- memmove (wbuffer (), rhs.buffer (), rhs.length () + 1 );
231+ memmove_P (wbuffer (), rhs.buffer (), rhs.length () + 1 );
232232 setLen (rhs.len ());
233233 rhs.invalidate ();
234234 return ;
@@ -241,7 +241,7 @@ void String::move(String &rhs) {
241241 }
242242 if (rhs.isSSO ()) {
243243 setSSO (true );
244- memmove (sso.buff , rhs.sso .buff , sizeof (sso.buff ));
244+ memmove_P (sso.buff , rhs.sso .buff , sizeof (sso.buff ));
245245 } else {
246246 setSSO (false );
247247 setBuffer (rhs.wbuffer ());
@@ -313,7 +313,7 @@ unsigned char String::concat(const String &s) {
313313 return 1 ;
314314 if (!reserve (newlen))
315315 return 0 ;
316- memmove (wbuffer () + len (), buffer (), len ());
316+ memmove_P (wbuffer () + len (), buffer (), len ());
317317 setLen (newlen);
318318 wbuffer ()[len ()] = 0 ;
319319 return 1 ;
@@ -330,12 +330,7 @@ unsigned char String::concat(const char *cstr, unsigned int length) {
330330 return 1 ;
331331 if (!reserve (newlen))
332332 return 0 ;
333- if (cstr >= wbuffer () && cstr < wbuffer () + len ())
334- // compatible with SSO in ram #6155 (case "x += x.c_str()")
335- memmove (wbuffer () + len (), cstr, length + 1 );
336- else
337- // compatible with source in flash #6367
338- memcpy_P (wbuffer () + len (), cstr, length + 1 );
333+ memmove_P (wbuffer () + len (), cstr, length + 1 );
339334 setLen (newlen);
340335 return 1 ;
341336}
@@ -739,21 +734,21 @@ void String::replace(const String& find, const String& replace) {
739734 char *foundAt;
740735 if (diff == 0 ) {
741736 while ((foundAt = strstr (readFrom, find.buffer ())) != NULL ) {
742- memmove (foundAt, replace.buffer (), replace.len ());
737+ memmove_P (foundAt, replace.buffer (), replace.len ());
743738 readFrom = foundAt + replace.len ();
744739 }
745740 } else if (diff < 0 ) {
746741 char *writeTo = wbuffer ();
747742 while ((foundAt = strstr (readFrom, find.buffer ())) != NULL ) {
748743 unsigned int n = foundAt - readFrom;
749- memmove (writeTo, readFrom, n);
744+ memmove_P (writeTo, readFrom, n);
750745 writeTo += n;
751- memmove (writeTo, replace.buffer (), replace.len ());
746+ memmove_P (writeTo, replace.buffer (), replace.len ());
752747 writeTo += replace.len ();
753748 readFrom = foundAt + find.len ();
754749 setLen (len () + diff);
755750 }
756- memmove (writeTo, readFrom, strlen (readFrom)+1 );
751+ memmove_P (writeTo, readFrom, strlen (readFrom)+1 );
757752 } else {
758753 unsigned int size = len (); // compute size needed for result
759754 while ((foundAt = strstr (readFrom, find.buffer ())) != NULL ) {
@@ -767,9 +762,9 @@ void String::replace(const String& find, const String& replace) {
767762 int index = len () - 1 ;
768763 while (index >= 0 && (index = lastIndexOf (find, index)) >= 0 ) {
769764 readFrom = wbuffer () + index + find.len ();
770- memmove (readFrom + diff, readFrom, len () - (readFrom - buffer ()));
765+ memmove_P (readFrom + diff, readFrom, len () - (readFrom - buffer ()));
771766 int newLen = len () + diff;
772- memmove (wbuffer () + index, replace.buffer (), replace.len ());
767+ memmove_P (wbuffer () + index, replace.buffer (), replace.len ());
773768 setLen (newLen);
774769 wbuffer ()[newLen] = 0 ;
775770 index--;
@@ -797,7 +792,7 @@ void String::remove(unsigned int index, unsigned int count) {
797792 char *writeTo = wbuffer () + index;
798793 unsigned int newlen = len () - count;
799794 setLen (newlen);
800- memmove (writeTo, wbuffer () + index + count, newlen - index);
795+ memmove_P (writeTo, wbuffer () + index + count, newlen - index);
801796 wbuffer ()[newlen] = 0 ;
802797}
803798
@@ -829,7 +824,7 @@ void String::trim(void) {
829824 unsigned int newlen = end + 1 - begin;
830825 setLen (newlen);
831826 if (begin > buffer ())
832- memmove (wbuffer (), begin, newlen);
827+ memmove_P (wbuffer (), begin, newlen);
833828 wbuffer ()[newlen] = 0 ;
834829}
835830
0 commit comments