diff --git a/hardware/arduino/cores/arduino/WString.cpp b/hardware/arduino/cores/arduino/WString.cpp index ed880ce2b90..6299c94e22c 100644 --- a/hardware/arduino/cores/arduino/WString.cpp +++ b/hardware/arduino/cores/arduino/WString.cpp @@ -453,6 +453,21 @@ unsigned char String::equals(const char *cstr) const return strcmp(buffer, cstr) == 0; } +unsigned char String::equals(const __FlashStringHelper *fstr) const +{ + const char PROGMEM *p = (const char PROGMEM *)fstr; + + for (int i = 0; i < len; i++) + { + if (pgm_read_byte(p) == 0) return 0; + if (buffer[i] != (char)pgm_read_byte(p++)) return 0; + } + + if (pgm_read_byte(p) != 0) return 0; + + return 1; +} + unsigned char String::operator<(const String &rhs) const { return compareTo(rhs) < 0; diff --git a/hardware/arduino/cores/arduino/WString.h b/hardware/arduino/cores/arduino/WString.h index 74024309278..4da29a13a45 100644 --- a/hardware/arduino/cores/arduino/WString.h +++ b/hardware/arduino/cores/arduino/WString.h @@ -139,10 +139,13 @@ class String int compareTo(const String &s) const; unsigned char equals(const String &s) const; unsigned char equals(const char *cstr) const; + unsigned char equals(const __FlashStringHelper *fstr) const; unsigned char operator == (const String &rhs) const {return equals(rhs);} unsigned char operator == (const char *cstr) const {return equals(cstr);} + unsigned char operator == (const __FlashStringHelper *fstr) const {return equals(fstr);} unsigned char operator != (const String &rhs) const {return !equals(rhs);} unsigned char operator != (const char *cstr) const {return !equals(cstr);} + unsigned char operator != (const __FlashStringHelper *fstr) const {return !equals(fstr);} unsigned char operator < (const String &rhs) const; unsigned char operator > (const String &rhs) const; unsigned char operator <= (const String &rhs) const;