diff --git a/interface/package-lock.json b/interface/package-lock.json index cb94ea75e..e941355c2 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -11,8 +11,8 @@ "@emotion/react": "^11.8.1", "@emotion/styled": "^11.8.1", "@msgpack/msgpack": "^2.7.2", - "@mui/icons-material": "^5.4.4", - "@mui/material": "^5.4.4", + "@mui/icons-material": "^5.5.0", + "@mui/material": "^5.5.0", "@types/lodash": "^4.14.179", "@types/node": "^17.0.21", "@types/react": "^17.0.39", @@ -2708,14 +2708,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.70", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.70.tgz", - "integrity": "sha512-8UZWhz1JYuQnPkAbC37cl4aL1JyNWZ08wDXlp57W7fYQp5xFpBP/7p56AcWg2qG9CNJP0IlFg2Wp4md1v2l4iA==", + "version": "5.0.0-alpha.71", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.71.tgz", + "integrity": "sha512-LinacyjmZOS+roUqCyhrcbNIW7TlRf1U+15ETGwMn6biNXI9YEVgcc1Kak08CRtjM0yczxxzLWetiAjHMCVSjQ==", "dependencies": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.2", "@mui/utils": "^5.4.4", - "@popperjs/core": "^2.4.4", + "@popperjs/core": "^2.11.2", "clsx": "^1.1.1", "prop-types": "^15.7.2", "react-is": "^17.0.2" @@ -2739,9 +2739,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.4.4.tgz", - "integrity": "sha512-7zoRpjO8vsd+bPvXq6rtXu0V8Saj70X09dtTQogZmxQKabrYW3g7+Yym7SCRA7IYVF3ysz2AvdQrGD1P/sGepg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.5.0.tgz", + "integrity": "sha512-rMs5flT3INyd/m1A/x8DDlNTfHmCartX8stCuSDDMmaMV123oSwg8werJ/Hg4j1FWuVk5rE5HRY45gBf12BCGw==", "dependencies": { "@babel/runtime": "^7.17.2" }, @@ -2764,18 +2764,18 @@ } }, "node_modules/@mui/material": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.4.tgz", - "integrity": "sha512-VDJC7GzO1HTFqfMe2zwvaW/sRhABBJXFkKEv5gO3uXx7x9fdwJHQr4udU7NWZCUdOcx9Y0h3BsAILLefYq+WPw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.5.0.tgz", + "integrity": "sha512-E12rxqLaWBrebJCxKxBtyRrzJgpPIQSCt4MUHns2Yl9gxOx4c7vDDKuks7Qc6S36wTQf+FP4aiey72Z2WKdYgQ==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.70", - "@mui/system": "^5.4.4", + "@mui/base": "5.0.0-alpha.71", + "@mui/system": "^5.5.0", "@mui/types": "^7.1.2", "@mui/utils": "^5.4.4", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.11", "hoist-non-react-statics": "^3.3.2", "prop-types": "^15.7.2", "react-is": "^17.0.2", @@ -2864,9 +2864,9 @@ } }, "node_modules/@mui/system": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.4.tgz", - "integrity": "sha512-Zjbztq2o/VRuRRCWjG44juRrPKYLQMqtQpMHmMttGu5BnvK6PAPW3WOY0r1JCAwLhbd8Kug9nyhGQYKETjo+tQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.5.0.tgz", + "integrity": "sha512-zFOfERv3Y4m5ehwTRR9cGaPuMvlD2qVXmFKC60P0Gte3aD6vYObyNriZv+mDVGlhDxZTZhxBrNPH3ns25xSFtQ==", "dependencies": { "@babel/runtime": "^7.17.2", "@mui/private-theming": "^5.4.4", @@ -2874,7 +2874,7 @@ "@mui/types": "^7.1.2", "@mui/utils": "^5.4.4", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.11", "prop-types": "^15.7.2" }, "engines": { @@ -6204,9 +6204,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -19340,40 +19340,40 @@ "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" }, "@mui/base": { - "version": "5.0.0-alpha.70", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.70.tgz", - "integrity": "sha512-8UZWhz1JYuQnPkAbC37cl4aL1JyNWZ08wDXlp57W7fYQp5xFpBP/7p56AcWg2qG9CNJP0IlFg2Wp4md1v2l4iA==", + "version": "5.0.0-alpha.71", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.71.tgz", + "integrity": "sha512-LinacyjmZOS+roUqCyhrcbNIW7TlRf1U+15ETGwMn6biNXI9YEVgcc1Kak08CRtjM0yczxxzLWetiAjHMCVSjQ==", "requires": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.2", "@mui/utils": "^5.4.4", - "@popperjs/core": "^2.4.4", + "@popperjs/core": "^2.11.2", "clsx": "^1.1.1", "prop-types": "^15.7.2", "react-is": "^17.0.2" } }, "@mui/icons-material": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.4.4.tgz", - "integrity": "sha512-7zoRpjO8vsd+bPvXq6rtXu0V8Saj70X09dtTQogZmxQKabrYW3g7+Yym7SCRA7IYVF3ysz2AvdQrGD1P/sGepg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.5.0.tgz", + "integrity": "sha512-rMs5flT3INyd/m1A/x8DDlNTfHmCartX8stCuSDDMmaMV123oSwg8werJ/Hg4j1FWuVk5rE5HRY45gBf12BCGw==", "requires": { "@babel/runtime": "^7.17.2" } }, "@mui/material": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.4.tgz", - "integrity": "sha512-VDJC7GzO1HTFqfMe2zwvaW/sRhABBJXFkKEv5gO3uXx7x9fdwJHQr4udU7NWZCUdOcx9Y0h3BsAILLefYq+WPw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.5.0.tgz", + "integrity": "sha512-E12rxqLaWBrebJCxKxBtyRrzJgpPIQSCt4MUHns2Yl9gxOx4c7vDDKuks7Qc6S36wTQf+FP4aiey72Z2WKdYgQ==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.70", - "@mui/system": "^5.4.4", + "@mui/base": "5.0.0-alpha.71", + "@mui/system": "^5.5.0", "@mui/types": "^7.1.2", "@mui/utils": "^5.4.4", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.11", "hoist-non-react-statics": "^3.3.2", "prop-types": "^15.7.2", "react-is": "^17.0.2", @@ -19401,9 +19401,9 @@ } }, "@mui/system": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.4.tgz", - "integrity": "sha512-Zjbztq2o/VRuRRCWjG44juRrPKYLQMqtQpMHmMttGu5BnvK6PAPW3WOY0r1JCAwLhbd8Kug9nyhGQYKETjo+tQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.5.0.tgz", + "integrity": "sha512-zFOfERv3Y4m5ehwTRR9cGaPuMvlD2qVXmFKC60P0Gte3aD6vYObyNriZv+mDVGlhDxZTZhxBrNPH3ns25xSFtQ==", "requires": { "@babel/runtime": "^7.17.2", "@mui/private-theming": "^5.4.4", @@ -19411,7 +19411,7 @@ "@mui/types": "^7.1.2", "@mui/utils": "^5.4.4", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.11", "prop-types": "^15.7.2" } }, @@ -21865,9 +21865,9 @@ } }, "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" }, "damerau-levenshtein": { "version": "1.0.8", diff --git a/interface/package.json b/interface/package.json index e6c94e445..6cdbcb18f 100644 --- a/interface/package.json +++ b/interface/package.json @@ -7,8 +7,8 @@ "@emotion/react": "^11.8.1", "@emotion/styled": "^11.8.1", "@msgpack/msgpack": "^2.7.2", - "@mui/icons-material": "^5.4.4", - "@mui/material": "^5.4.4", + "@mui/icons-material": "^5.5.0", + "@mui/material": "^5.5.0", "@types/lodash": "^4.14.179", "@types/node": "^17.0.21", "@types/react": "^17.0.39", diff --git a/lib/ArduinoJson/CHANGELOG.md b/lib/ArduinoJson/CHANGELOG.md index 47dff0bf0..6a2e8a8d7 100644 --- a/lib/ArduinoJson/CHANGELOG.md +++ b/lib/ArduinoJson/CHANGELOG.md @@ -1,6 +1,19 @@ ArduinoJson: change log ======================= +v6.19.3 (2022-03-08) +------- + +* Fix `call of overloaded 'String(const char*, int)' is ambiguous` +* Fix `JsonString` operator `==` and `!=` for non-zero-terminated string +* Fix `-Wsign-conversion` on GCC 8 (issue #1715) +* MessagePack: serialize round floats as integers (issue #1718) + +v6.19.2 (2022-02-14) +------- + +* Fix `cannot convert 'pgm_p' to 'const void*'` (issue #1707) + v6.19.1 (2022-01-14) ------- diff --git a/lib/ArduinoJson/README.md b/lib/ArduinoJson/README.md index 78436e28d..a4c95cb97 100644 --- a/lib/ArduinoJson/README.md +++ b/lib/ArduinoJson/README.md @@ -7,8 +7,8 @@ [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/arduinojson.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson) [![LGTM Grade](https://img.shields.io/lgtm/grade/cpp/github/bblanchon/ArduinoJson?label=quality&logo=lgtm)](https://lgtm.com/projects/g/bblanchon/ArduinoJson/) [![Coveralls branch](https://img.shields.io/coveralls/github/bblanchon/ArduinoJson/6.x?logo=coveralls)](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x) -[![Arduino Library Manager](https://img.shields.io/static/v1?label=Arduino&message=v6.19.1&logo=arduino&logoColor=white&color=blue)](https://www.ardu-badge.com/ArduinoJson/6.19.1) -[![PlatformIO Registry](https://badges.registry.platformio.org/packages/bblanchon/library/ArduinoJson.svg?version=6.19.1)](https://registry.platformio.org/packages/libraries/bblanchon/ArduinoJson?version=6.19.1) +[![Arduino Library Manager](https://img.shields.io/static/v1?label=Arduino&message=v6.19.3&logo=arduino&logoColor=white&color=blue)](https://www.ardu-badge.com/ArduinoJson/6.19.3) +[![PlatformIO Registry](https://badges.registry.platformio.org/packages/bblanchon/library/ArduinoJson.svg?version=6.19.3)](https://registry.platformio.org/packages/libraries/bblanchon/ArduinoJson?version=6.19.3) [![GitHub stars](https://img.shields.io/github/stars/bblanchon/ArduinoJson?style=flat&logo=github)](https://github.com/bblanchon/ArduinoJson/stargazers) [![GitHub Sponsors](https://img.shields.io/github/sponsors/bblanchon?logo=github)](https://github.com/sponsors/bblanchon) diff --git a/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp index 60f5cb11b..35678eebf 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -64,7 +64,7 @@ inline bool CollectionData::copyFrom(const CollectionData& src, for (VariantSlot* s = src._head; s; s = s->next()) { VariantData* var; if (s->key() != 0) { - String key(s->key(), !s->ownsKey()); + String key(s->key(), s->ownsKey() ? String::Copied : String::Linked); var = addMember(adaptString(key), pool, getStringStoragePolicy(key)); } else { var = addElement(pool); diff --git a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index 5916bac81..00b717a6c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -40,7 +40,7 @@ class MsgPackDeserializer { template bool parseVariant(VariantData *variant, TFilter filter, NestingLimit nestingLimit) { - uint8_t code = 0; + uint8_t code = 0; // TODO: why do we need to initialize this variable? if (!readByte(code)) return false; @@ -481,7 +481,7 @@ class MsgPackDeserializer { T size; if (!readInteger(size)) return false; - return skipBytes(size + 1); + return skipBytes(size + 1U); } MemoryPool *_pool; diff --git a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index 51e929bec..a1053f0a4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -23,6 +23,11 @@ class MsgPackSerializer : public Visitor { template typename enable_if::type visitFloat(T value32) { + if (canConvertNumber(value32)) { + Integer truncatedValue = Integer(value32); + if (value32 == T(truncatedValue)) + return visitSignedInteger(truncatedValue); + } writeByte(0xCA); writeInteger(value32); return bytesWritten(); @@ -32,13 +37,10 @@ class MsgPackSerializer : public Visitor { ARDUINOJSON_NO_SANITIZE("float-cast-overflow") typename enable_if::type visitFloat(T value64) { float value32 = float(value64); - if (value32 == value64) { - writeByte(0xCA); - writeInteger(value32); - } else { - writeByte(0xCB); - writeInteger(value64); - } + if (value32 == value64) + return visitFloat(value32); + writeByte(0xCB); + writeInteger(value64); return bytesWritten(); } diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/Pair.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/Pair.hpp index e9e71eb63..7e3ca32c4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/Pair.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/Pair.hpp @@ -13,7 +13,8 @@ class Pair { public: Pair(MemoryPool* pool, VariantSlot* slot) { if (slot) { - _key = String(slot->key(), !slot->ownsKey()); + _key = String(slot->key(), + slot->ownsKey() ? String::Copied : String::Linked); _value = VariantRef(pool, slot->data()); } } @@ -35,7 +36,8 @@ class PairConst { public: PairConst(const VariantSlot* slot) { if (slot) { - _key = String(slot->key(), !slot->ownsKey()); + _key = String(slot->key(), + slot->ownsKey() ? String::Copied : String::Linked); _value = VariantConstRef(slot->data()); } } diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp index 189251705..afef4ce9d 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp @@ -99,7 +99,7 @@ inline void* memcpy_P(void* dst, ARDUINOJSON_NAMESPACE::pgm_p src, size_t n) { #ifndef pgm_read_dword inline uint32_t pgm_read_dword(ARDUINOJSON_NAMESPACE::pgm_p p) { uint32_t result; - memcpy_P(&result, p, 4); + memcpy_P(&result, p.address, 4); return result; } #endif @@ -107,7 +107,7 @@ inline uint32_t pgm_read_dword(ARDUINOJSON_NAMESPACE::pgm_p p) { #ifndef pgm_read_ptr inline void* pgm_read_ptr(ARDUINOJSON_NAMESPACE::pgm_p p) { void* result; - memcpy_P(&result, p, sizeof(result)); + memcpy_P(&result, p.address, sizeof(result)); return result; } #endif diff --git a/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringCopier.hpp b/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringCopier.hpp index 455a155a1..f743e4ac1 100644 --- a/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringCopier.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringCopier.hpp @@ -22,7 +22,7 @@ class StringCopier { String save() { ARDUINOJSON_ASSERT(_ptr); ARDUINOJSON_ASSERT(_size < _capacity); // needs room for the terminator - return String(_pool->saveStringFromFreeZone(_size), _size, false); + return String(_pool->saveStringFromFreeZone(_size), _size, String::Copied); } void append(const char* s) { @@ -52,7 +52,7 @@ class StringCopier { ARDUINOJSON_ASSERT(_ptr); ARDUINOJSON_ASSERT(_size < _capacity); _ptr[_size] = 0; - return String(_ptr, _size, false); + return String(_ptr, _size, String::Copied); } private: diff --git a/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringMover.hpp b/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringMover.hpp index 4ed7d92e1..f4cd1baef 100644 --- a/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringMover.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/StringStorage/StringMover.hpp @@ -33,7 +33,7 @@ class StringMover { String str() const { _writePtr[0] = 0; // terminator - return String(_startPtr, size(), true); + return String(_startPtr, size(), String::Linked); } size_t size() const { diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp index 1d3991615..5a55552a3 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp @@ -106,13 +106,13 @@ inline SizedRamString adaptString(const char* s, size_t n) { return SizedRamString(s, n); } -template +template struct IsString : true_type {}; -template +template struct IsString : true_type {}; -template +template inline SizedRamString adaptString(char s[N]) { return SizedRamString(s, strlen(s)); } diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/StoragePolicy.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/StoragePolicy.hpp index 2a01f0d5a..d1e138c48 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/StoragePolicy.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/StoragePolicy.hpp @@ -12,7 +12,7 @@ namespace ARDUINOJSON_NAMESPACE { struct LinkStringStoragePolicy { template bool store(TAdaptedString str, MemoryPool *, TCallback callback) { - String storedString(str.data(), str.size(), true); + String storedString(str.data(), str.size(), String::Linked); callback(storedString); return !str.isNull(); } @@ -50,7 +50,7 @@ inline LinkStringStoragePolicy getStringStoragePolicy(const char *) { } inline LinkOrCopyStringStoragePolicy getStringStoragePolicy(const String &s) { - return LinkOrCopyStringStoragePolicy(s.isStatic()); + return LinkOrCopyStringStoragePolicy(s.isLinked()); } } // namespace ARDUINOJSON_NAMESPACE diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/StoredString.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/StoredString.hpp deleted file mode 100644 index 53e874685..000000000 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/StoredString.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2022, Benoit BLANCHON -// MIT License - -#pragma once - -namespace ARDUINOJSON_NAMESPACE { - -template -class StoredString { - public: - StoredString() : _data(0), _size(0) {} - StoredString(const char* p, size_t n) : _data(p), _size(n) {} - - operator const char*() const { - return _data; - } - - const char* c_str() const { - return _data; - } - - size_t size() const { - return _size; - } - - private: - const char* _data; - size_t _size; -}; - -typedef StoredString LinkedString; -typedef StoredString CopiedString; - -} // namespace ARDUINOJSON_NAMESPACE diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/String.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/String.hpp index 1c71c67ae..1371114ec 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/String.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/String.hpp @@ -14,15 +14,15 @@ namespace ARDUINOJSON_NAMESPACE { class String : public SafeBoolIdom { public: - String() : _data(0), _size(0), _isStatic(true) {} + enum Ownership { Copied, Linked }; - String(const char* data, bool isStaticData = true) - : _data(data), - _size(data ? ::strlen(data) : 0), - _isStatic(isStaticData) {} + String() : _data(0), _size(0), _ownership(Linked) {} - String(const char* data, size_t sz, bool isStaticData = true) - : _data(data), _size(sz), _isStatic(isStaticData) {} + String(const char* data, Ownership ownership = Linked) + : _data(data), _size(data ? ::strlen(data) : 0), _ownership(ownership) {} + + String(const char* data, size_t sz, Ownership ownership = Linked) + : _data(data), _size(sz), _ownership(ownership) {} const char* c_str() const { return _data; @@ -32,8 +32,8 @@ class String : public SafeBoolIdom { return !_data; } - bool isStatic() const { - return _isStatic; + bool isLinked() const { + return _ownership == Linked; } size_t size() const { @@ -46,23 +46,19 @@ class String : public SafeBoolIdom { } friend bool operator==(String lhs, String rhs) { + if (lhs._size != rhs._size) + return false; if (lhs._data == rhs._data) return true; if (!lhs._data) return false; if (!rhs._data) return false; - return strcmp(lhs._data, rhs._data) == 0; + return memcmp(lhs._data, rhs._data, lhs._size) == 0; } friend bool operator!=(String lhs, String rhs) { - if (lhs._data == rhs._data) - return false; - if (!lhs._data) - return true; - if (!rhs._data) - return true; - return strcmp(lhs._data, rhs._data) != 0; + return !(lhs == rhs); } #if ARDUINOJSON_ENABLE_STD_STREAM @@ -75,7 +71,7 @@ class String : public SafeBoolIdom { private: const char* _data; size_t _size; - bool _isStatic; + Ownership _ownership; }; } // namespace ARDUINOJSON_NAMESPACE diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp index a825760c9..baf1187ae 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -208,7 +208,7 @@ class MemoryPoolPrint : public Print { String str() { ARDUINOJSON_ASSERT(_size < _capacity); - return String(_pool->saveStringFromFreeZone(_size), _size, false); + return String(_pool->saveStringFromFreeZone(_size), _size, String::Copied); } size_t write(uint8_t c) { diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp index 43ae70c93..a71f3e0d0 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp @@ -23,7 +23,7 @@ struct Comparer; template struct Comparer::value>::type> : ComparerBase { - T rhs; + T rhs; // TODO: store adapted string? explicit Comparer(T value) : rhs(value) {} diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp index 6f8076323..27128706f 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp @@ -210,7 +210,7 @@ class VariantData { void setString(String s) { ARDUINOJSON_ASSERT(s); - if (s.isStatic()) + if (s.isLinked()) setType(VALUE_IS_LINKED_STRING); else setType(VALUE_IS_OWNED_STRING); diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp index f45b2b7d0..48c45fb8f 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp @@ -73,9 +73,11 @@ inline T VariantData::asFloat() const { inline String VariantData::asString() const { switch (type()) { case VALUE_IS_LINKED_STRING: - return String(_content.asString.data, _content.asString.size, true); + return String(_content.asString.data, _content.asString.size, + String::Linked); case VALUE_IS_OWNED_STRING: - return String(_content.asString.data, _content.asString.size, false); + return String(_content.asString.data, _content.asString.size, + String::Copied); default: return String(); } @@ -166,14 +168,15 @@ inline VariantConstRef operator|(VariantConstRef preferedValue, // Out of class definition to avoid #1560 inline bool VariantRef::set(char value) const { - return set(value); + return set(static_cast(value)); } +// TODO: move somewhere else template bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool, TCallback callback) { const char *copy = pool->saveString(str); - String storedString(copy, str.size(), false); + String storedString(copy, str.size(), String::Copied); callback(storedString); return copy != 0; } diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp index 0865d6935..31fd02198 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp @@ -119,7 +119,7 @@ class VariantRef : public VariantRefBase, ARDUINOJSON_DEPRECATED( "Support for char is deprecated, use int8_t or uint8_t instead") as() const { - return as(); + return static_cast(as()); } template @@ -265,7 +265,7 @@ class VariantConstRef : public VariantRefBase, ARDUINOJSON_DEPRECATED( "Support for char is deprecated, use int8_t or uint8_t instead") as() const { - return as(); + return static_cast(as()); } template diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantSlot.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantSlot.hpp index 8f4169cc7..83ff1d78b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantSlot.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantSlot.hpp @@ -78,7 +78,7 @@ class VariantSlot { void setKey(String k) { ARDUINOJSON_ASSERT(k); - if (k.isStatic()) + if (k.isLinked()) _flags &= VALUE_MASK; else _flags |= OWNED_KEY_BIT; diff --git a/lib/ArduinoJson/src/ArduinoJson/version.hpp b/lib/ArduinoJson/src/ArduinoJson/version.hpp index 0b4b5febf..d6a23d4c8 100644 --- a/lib/ArduinoJson/src/ArduinoJson/version.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/version.hpp @@ -4,7 +4,7 @@ #pragma once -#define ARDUINOJSON_VERSION "6.19.1" +#define ARDUINOJSON_VERSION "6.19.3" #define ARDUINOJSON_VERSION_MAJOR 6 #define ARDUINOJSON_VERSION_MINOR 19 -#define ARDUINOJSON_VERSION_REVISION 1 +#define ARDUINOJSON_VERSION_REVISION 3