diff --git a/esphome/core/progmem.h b/esphome/core/progmem.h index 677ef0e2afb..02ec4778237 100644 --- a/esphome/core/progmem.h +++ b/esphome/core/progmem.h @@ -26,6 +26,7 @@ #define ESPHOME_strncmp_P strncmp_P #define ESPHOME_strncasecmp_P strncasecmp_P #define ESPHOME_strlen_P strlen_P +#define ESPHOME_strstr_P strstr_P // Type for pointers to PROGMEM strings (for use with ESPHOME_F return values) using ProgmemStr = const __FlashStringHelper *; // Storage class for PROGMEM_STRING_TABLE data; LOG_STR_ARG treats a LogString as PGM_P @@ -43,6 +44,7 @@ using ProgmemStr = const __FlashStringHelper *; #define ESPHOME_strncmp_P strncmp #define ESPHOME_strncasecmp_P strncasecmp #define ESPHOME_strlen_P strlen +#define ESPHOME_strstr_P strstr // Type for pointers to strings (no PROGMEM on non-ESP8266 platforms) using ProgmemStr = const char *; // No-op on non-ESP8266 platforms where PROGMEM itself is a no-op. diff --git a/tests/components/core/test_progmem_string_table.cpp b/tests/components/core/test_progmem_string_table.cpp index 4069bd4d2ab..e6820ec50de 100644 --- a/tests/components/core/test_progmem_string_table.cpp +++ b/tests/components/core/test_progmem_string_table.cpp @@ -62,4 +62,12 @@ TEST(ProgmemStringTable, LargeTableIsScanned) { "3123456789012345678901234567890123456789"); } +TEST(ProgmemStringTable, StrstrFindsTableEntryInRamString) { + const char *line = "MODE HEAT ON"; + const auto *heat = reinterpret_cast(SmallStrings::get_progmem_str(1, SmallStrings::LAST_INDEX)); + const auto *cool = reinterpret_cast(SmallStrings::get_progmem_str(2, SmallStrings::LAST_INDEX)); + EXPECT_EQ(ESPHOME_strstr_P(line, heat), line + 5); + EXPECT_EQ(ESPHOME_strstr_P(line, cool), nullptr); +} + } // namespace esphome::core::testing