Browse Source

Add a polyfill for `pgm_read_ptr()` (issue #1433)

Benoit Blanchon 4 years ago
parent
commit
29ba744d64

+ 0 - 4
extras/tests/Helpers/progmem_emulation.hpp

@@ -23,10 +23,6 @@ inline uint8_t pgm_read_byte(const void* p) {
   return *reinterpret_cast<const uint8_t*>(convertFlashToPtr(p));
 }
 
-inline void* pgm_read_ptr(const void* p) {
-  return *reinterpret_cast<void* const*>(convertFlashToPtr(p));
-}
-
 #define ARDUINOJSON_DEFINE_PROGMEM_ARRAY(type, name, value)        \
   static type const ARDUINOJSON_CONCAT2(name, _progmem)[] = value; \
   static type const* name = reinterpret_cast<type const*>(         \

+ 8 - 0
src/ArduinoJson/Polyfills/pgmspace.hpp

@@ -103,3 +103,11 @@ inline uint32_t pgm_read_dword(ARDUINOJSON_NAMESPACE::pgm_p p) {
   return result;
 }
 #endif
+
+#ifndef pgm_read_ptr
+inline void* pgm_read_ptr(ARDUINOJSON_NAMESPACE::pgm_p p) {
+  void* result;
+  memcpy_P(&result, p, sizeof(result));
+  return result;
+}
+#endif