update arduinojson 6.19.3

This commit is contained in:
proddy
2022-03-08 18:19:26 +01:00
parent eaca7df527
commit b526734e4b
22 changed files with 114 additions and 133 deletions

View File

@@ -11,8 +11,8 @@
"@emotion/react": "^11.8.1", "@emotion/react": "^11.8.1",
"@emotion/styled": "^11.8.1", "@emotion/styled": "^11.8.1",
"@msgpack/msgpack": "^2.7.2", "@msgpack/msgpack": "^2.7.2",
"@mui/icons-material": "^5.4.4", "@mui/icons-material": "^5.5.0",
"@mui/material": "^5.4.4", "@mui/material": "^5.5.0",
"@types/lodash": "^4.14.179", "@types/lodash": "^4.14.179",
"@types/node": "^17.0.21", "@types/node": "^17.0.21",
"@types/react": "^17.0.39", "@types/react": "^17.0.39",
@@ -2708,14 +2708,14 @@
} }
}, },
"node_modules/@mui/base": { "node_modules/@mui/base": {
"version": "5.0.0-alpha.70", "version": "5.0.0-alpha.71",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.70.tgz", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.71.tgz",
"integrity": "sha512-8UZWhz1JYuQnPkAbC37cl4aL1JyNWZ08wDXlp57W7fYQp5xFpBP/7p56AcWg2qG9CNJP0IlFg2Wp4md1v2l4iA==", "integrity": "sha512-LinacyjmZOS+roUqCyhrcbNIW7TlRf1U+15ETGwMn6biNXI9YEVgcc1Kak08CRtjM0yczxxzLWetiAjHMCVSjQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@emotion/is-prop-valid": "^1.1.2", "@emotion/is-prop-valid": "^1.1.2",
"@mui/utils": "^5.4.4", "@mui/utils": "^5.4.4",
"@popperjs/core": "^2.4.4", "@popperjs/core": "^2.11.2",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react-is": "^17.0.2" "react-is": "^17.0.2"
@@ -2739,9 +2739,9 @@
} }
}, },
"node_modules/@mui/icons-material": { "node_modules/@mui/icons-material": {
"version": "5.4.4", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.4.4.tgz", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.5.0.tgz",
"integrity": "sha512-7zoRpjO8vsd+bPvXq6rtXu0V8Saj70X09dtTQogZmxQKabrYW3g7+Yym7SCRA7IYVF3ysz2AvdQrGD1P/sGepg==", "integrity": "sha512-rMs5flT3INyd/m1A/x8DDlNTfHmCartX8stCuSDDMmaMV123oSwg8werJ/Hg4j1FWuVk5rE5HRY45gBf12BCGw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2" "@babel/runtime": "^7.17.2"
}, },
@@ -2764,18 +2764,18 @@
} }
}, },
"node_modules/@mui/material": { "node_modules/@mui/material": {
"version": "5.4.4", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.4.tgz", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.5.0.tgz",
"integrity": "sha512-VDJC7GzO1HTFqfMe2zwvaW/sRhABBJXFkKEv5gO3uXx7x9fdwJHQr4udU7NWZCUdOcx9Y0h3BsAILLefYq+WPw==", "integrity": "sha512-E12rxqLaWBrebJCxKxBtyRrzJgpPIQSCt4MUHns2Yl9gxOx4c7vDDKuks7Qc6S36wTQf+FP4aiey72Z2WKdYgQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/base": "5.0.0-alpha.70", "@mui/base": "5.0.0-alpha.71",
"@mui/system": "^5.4.4", "@mui/system": "^5.5.0",
"@mui/types": "^7.1.2", "@mui/types": "^7.1.2",
"@mui/utils": "^5.4.4", "@mui/utils": "^5.4.4",
"@types/react-transition-group": "^4.4.4", "@types/react-transition-group": "^4.4.4",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"csstype": "^3.0.10", "csstype": "^3.0.11",
"hoist-non-react-statics": "^3.3.2", "hoist-non-react-statics": "^3.3.2",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react-is": "^17.0.2", "react-is": "^17.0.2",
@@ -2864,9 +2864,9 @@
} }
}, },
"node_modules/@mui/system": { "node_modules/@mui/system": {
"version": "5.4.4", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.4.tgz", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.5.0.tgz",
"integrity": "sha512-Zjbztq2o/VRuRRCWjG44juRrPKYLQMqtQpMHmMttGu5BnvK6PAPW3WOY0r1JCAwLhbd8Kug9nyhGQYKETjo+tQ==", "integrity": "sha512-zFOfERv3Y4m5ehwTRR9cGaPuMvlD2qVXmFKC60P0Gte3aD6vYObyNriZv+mDVGlhDxZTZhxBrNPH3ns25xSFtQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/private-theming": "^5.4.4", "@mui/private-theming": "^5.4.4",
@@ -2874,7 +2874,7 @@
"@mui/types": "^7.1.2", "@mui/types": "^7.1.2",
"@mui/utils": "^5.4.4", "@mui/utils": "^5.4.4",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"csstype": "^3.0.10", "csstype": "^3.0.11",
"prop-types": "^15.7.2" "prop-types": "^15.7.2"
}, },
"engines": { "engines": {
@@ -6204,9 +6204,9 @@
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.0.10", "version": "3.0.11",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
"integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
}, },
"node_modules/damerau-levenshtein": { "node_modules/damerau-levenshtein": {
"version": "1.0.8", "version": "1.0.8",
@@ -19340,40 +19340,40 @@
"integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw=="
}, },
"@mui/base": { "@mui/base": {
"version": "5.0.0-alpha.70", "version": "5.0.0-alpha.71",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.70.tgz", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.71.tgz",
"integrity": "sha512-8UZWhz1JYuQnPkAbC37cl4aL1JyNWZ08wDXlp57W7fYQp5xFpBP/7p56AcWg2qG9CNJP0IlFg2Wp4md1v2l4iA==", "integrity": "sha512-LinacyjmZOS+roUqCyhrcbNIW7TlRf1U+15ETGwMn6biNXI9YEVgcc1Kak08CRtjM0yczxxzLWetiAjHMCVSjQ==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@emotion/is-prop-valid": "^1.1.2", "@emotion/is-prop-valid": "^1.1.2",
"@mui/utils": "^5.4.4", "@mui/utils": "^5.4.4",
"@popperjs/core": "^2.4.4", "@popperjs/core": "^2.11.2",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react-is": "^17.0.2" "react-is": "^17.0.2"
} }
}, },
"@mui/icons-material": { "@mui/icons-material": {
"version": "5.4.4", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.4.4.tgz", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.5.0.tgz",
"integrity": "sha512-7zoRpjO8vsd+bPvXq6rtXu0V8Saj70X09dtTQogZmxQKabrYW3g7+Yym7SCRA7IYVF3ysz2AvdQrGD1P/sGepg==", "integrity": "sha512-rMs5flT3INyd/m1A/x8DDlNTfHmCartX8stCuSDDMmaMV123oSwg8werJ/Hg4j1FWuVk5rE5HRY45gBf12BCGw==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2" "@babel/runtime": "^7.17.2"
} }
}, },
"@mui/material": { "@mui/material": {
"version": "5.4.4", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.4.tgz", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.5.0.tgz",
"integrity": "sha512-VDJC7GzO1HTFqfMe2zwvaW/sRhABBJXFkKEv5gO3uXx7x9fdwJHQr4udU7NWZCUdOcx9Y0h3BsAILLefYq+WPw==", "integrity": "sha512-E12rxqLaWBrebJCxKxBtyRrzJgpPIQSCt4MUHns2Yl9gxOx4c7vDDKuks7Qc6S36wTQf+FP4aiey72Z2WKdYgQ==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/base": "5.0.0-alpha.70", "@mui/base": "5.0.0-alpha.71",
"@mui/system": "^5.4.4", "@mui/system": "^5.5.0",
"@mui/types": "^7.1.2", "@mui/types": "^7.1.2",
"@mui/utils": "^5.4.4", "@mui/utils": "^5.4.4",
"@types/react-transition-group": "^4.4.4", "@types/react-transition-group": "^4.4.4",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"csstype": "^3.0.10", "csstype": "^3.0.11",
"hoist-non-react-statics": "^3.3.2", "hoist-non-react-statics": "^3.3.2",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react-is": "^17.0.2", "react-is": "^17.0.2",
@@ -19401,9 +19401,9 @@
} }
}, },
"@mui/system": { "@mui/system": {
"version": "5.4.4", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.4.tgz", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.5.0.tgz",
"integrity": "sha512-Zjbztq2o/VRuRRCWjG44juRrPKYLQMqtQpMHmMttGu5BnvK6PAPW3WOY0r1JCAwLhbd8Kug9nyhGQYKETjo+tQ==", "integrity": "sha512-zFOfERv3Y4m5ehwTRR9cGaPuMvlD2qVXmFKC60P0Gte3aD6vYObyNriZv+mDVGlhDxZTZhxBrNPH3ns25xSFtQ==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/private-theming": "^5.4.4", "@mui/private-theming": "^5.4.4",
@@ -19411,7 +19411,7 @@
"@mui/types": "^7.1.2", "@mui/types": "^7.1.2",
"@mui/utils": "^5.4.4", "@mui/utils": "^5.4.4",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"csstype": "^3.0.10", "csstype": "^3.0.11",
"prop-types": "^15.7.2" "prop-types": "^15.7.2"
} }
}, },
@@ -21865,9 +21865,9 @@
} }
}, },
"csstype": { "csstype": {
"version": "3.0.10", "version": "3.0.11",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
"integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
}, },
"damerau-levenshtein": { "damerau-levenshtein": {
"version": "1.0.8", "version": "1.0.8",

View File

@@ -7,8 +7,8 @@
"@emotion/react": "^11.8.1", "@emotion/react": "^11.8.1",
"@emotion/styled": "^11.8.1", "@emotion/styled": "^11.8.1",
"@msgpack/msgpack": "^2.7.2", "@msgpack/msgpack": "^2.7.2",
"@mui/icons-material": "^5.4.4", "@mui/icons-material": "^5.5.0",
"@mui/material": "^5.4.4", "@mui/material": "^5.5.0",
"@types/lodash": "^4.14.179", "@types/lodash": "^4.14.179",
"@types/node": "^17.0.21", "@types/node": "^17.0.21",
"@types/react": "^17.0.39", "@types/react": "^17.0.39",

View File

@@ -1,6 +1,19 @@
ArduinoJson: change log 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) v6.19.1 (2022-01-14)
------- -------

View File

@@ -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) [![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/) [![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) [![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) [![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.1)](https://registry.platformio.org/packages/libraries/bblanchon/ArduinoJson?version=6.19.1) [![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 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) [![GitHub Sponsors](https://img.shields.io/github/sponsors/bblanchon?logo=github)](https://github.com/sponsors/bblanchon)

View File

@@ -64,7 +64,7 @@ inline bool CollectionData::copyFrom(const CollectionData& src,
for (VariantSlot* s = src._head; s; s = s->next()) { for (VariantSlot* s = src._head; s; s = s->next()) {
VariantData* var; VariantData* var;
if (s->key() != 0) { 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)); var = addMember(adaptString(key), pool, getStringStoragePolicy(key));
} else { } else {
var = addElement(pool); var = addElement(pool);

View File

@@ -40,7 +40,7 @@ class MsgPackDeserializer {
template <typename TFilter> template <typename TFilter>
bool parseVariant(VariantData *variant, TFilter filter, bool parseVariant(VariantData *variant, TFilter filter,
NestingLimit nestingLimit) { NestingLimit nestingLimit) {
uint8_t code = 0; uint8_t code = 0; // TODO: why do we need to initialize this variable?
if (!readByte(code)) if (!readByte(code))
return false; return false;
@@ -481,7 +481,7 @@ class MsgPackDeserializer {
T size; T size;
if (!readInteger(size)) if (!readInteger(size))
return false; return false;
return skipBytes(size + 1); return skipBytes(size + 1U);
} }
MemoryPool *_pool; MemoryPool *_pool;

View File

@@ -23,6 +23,11 @@ class MsgPackSerializer : public Visitor<size_t> {
template <typename T> template <typename T>
typename enable_if<sizeof(T) == 4, size_t>::type visitFloat(T value32) { typename enable_if<sizeof(T) == 4, size_t>::type visitFloat(T value32) {
if (canConvertNumber<Integer>(value32)) {
Integer truncatedValue = Integer(value32);
if (value32 == T(truncatedValue))
return visitSignedInteger(truncatedValue);
}
writeByte(0xCA); writeByte(0xCA);
writeInteger(value32); writeInteger(value32);
return bytesWritten(); return bytesWritten();
@@ -32,13 +37,10 @@ class MsgPackSerializer : public Visitor<size_t> {
ARDUINOJSON_NO_SANITIZE("float-cast-overflow") ARDUINOJSON_NO_SANITIZE("float-cast-overflow")
typename enable_if<sizeof(T) == 8, size_t>::type visitFloat(T value64) { typename enable_if<sizeof(T) == 8, size_t>::type visitFloat(T value64) {
float value32 = float(value64); float value32 = float(value64);
if (value32 == value64) { if (value32 == value64)
writeByte(0xCA); return visitFloat(value32);
writeInteger(value32);
} else {
writeByte(0xCB); writeByte(0xCB);
writeInteger(value64); writeInteger(value64);
}
return bytesWritten(); return bytesWritten();
} }

View File

@@ -13,7 +13,8 @@ class Pair {
public: public:
Pair(MemoryPool* pool, VariantSlot* slot) { Pair(MemoryPool* pool, VariantSlot* slot) {
if (slot) { if (slot) {
_key = String(slot->key(), !slot->ownsKey()); _key = String(slot->key(),
slot->ownsKey() ? String::Copied : String::Linked);
_value = VariantRef(pool, slot->data()); _value = VariantRef(pool, slot->data());
} }
} }
@@ -35,7 +36,8 @@ class PairConst {
public: public:
PairConst(const VariantSlot* slot) { PairConst(const VariantSlot* slot) {
if (slot) { if (slot) {
_key = String(slot->key(), !slot->ownsKey()); _key = String(slot->key(),
slot->ownsKey() ? String::Copied : String::Linked);
_value = VariantConstRef(slot->data()); _value = VariantConstRef(slot->data());
} }
} }

View File

@@ -99,7 +99,7 @@ inline void* memcpy_P(void* dst, ARDUINOJSON_NAMESPACE::pgm_p src, size_t n) {
#ifndef pgm_read_dword #ifndef pgm_read_dword
inline uint32_t pgm_read_dword(ARDUINOJSON_NAMESPACE::pgm_p p) { inline uint32_t pgm_read_dword(ARDUINOJSON_NAMESPACE::pgm_p p) {
uint32_t result; uint32_t result;
memcpy_P(&result, p, 4); memcpy_P(&result, p.address, 4);
return result; return result;
} }
#endif #endif
@@ -107,7 +107,7 @@ inline uint32_t pgm_read_dword(ARDUINOJSON_NAMESPACE::pgm_p p) {
#ifndef pgm_read_ptr #ifndef pgm_read_ptr
inline void* pgm_read_ptr(ARDUINOJSON_NAMESPACE::pgm_p p) { inline void* pgm_read_ptr(ARDUINOJSON_NAMESPACE::pgm_p p) {
void* result; void* result;
memcpy_P(&result, p, sizeof(result)); memcpy_P(&result, p.address, sizeof(result));
return result; return result;
} }
#endif #endif

View File

@@ -22,7 +22,7 @@ class StringCopier {
String save() { String save() {
ARDUINOJSON_ASSERT(_ptr); ARDUINOJSON_ASSERT(_ptr);
ARDUINOJSON_ASSERT(_size < _capacity); // needs room for the terminator 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) { void append(const char* s) {
@@ -52,7 +52,7 @@ class StringCopier {
ARDUINOJSON_ASSERT(_ptr); ARDUINOJSON_ASSERT(_ptr);
ARDUINOJSON_ASSERT(_size < _capacity); ARDUINOJSON_ASSERT(_size < _capacity);
_ptr[_size] = 0; _ptr[_size] = 0;
return String(_ptr, _size, false); return String(_ptr, _size, String::Copied);
} }
private: private:

View File

@@ -33,7 +33,7 @@ class StringMover {
String str() const { String str() const {
_writePtr[0] = 0; // terminator _writePtr[0] = 0; // terminator
return String(_startPtr, size(), true); return String(_startPtr, size(), String::Linked);
} }
size_t size() const { size_t size() const {

View File

@@ -106,13 +106,13 @@ inline SizedRamString adaptString(const char* s, size_t n) {
return SizedRamString(s, n); return SizedRamString(s, n);
} }
template <int N> template <size_t N>
struct IsString<char[N]> : true_type {}; struct IsString<char[N]> : true_type {};
template <int N> template <size_t N>
struct IsString<const char[N]> : true_type {}; struct IsString<const char[N]> : true_type {};
template <int N> template <size_t N>
inline SizedRamString adaptString(char s[N]) { inline SizedRamString adaptString(char s[N]) {
return SizedRamString(s, strlen(s)); return SizedRamString(s, strlen(s));
} }

View File

@@ -12,7 +12,7 @@ namespace ARDUINOJSON_NAMESPACE {
struct LinkStringStoragePolicy { struct LinkStringStoragePolicy {
template <typename TAdaptedString, typename TCallback> template <typename TAdaptedString, typename TCallback>
bool store(TAdaptedString str, MemoryPool *, TCallback callback) { bool store(TAdaptedString str, MemoryPool *, TCallback callback) {
String storedString(str.data(), str.size(), true); String storedString(str.data(), str.size(), String::Linked);
callback(storedString); callback(storedString);
return !str.isNull(); return !str.isNull();
} }
@@ -50,7 +50,7 @@ inline LinkStringStoragePolicy getStringStoragePolicy(const char *) {
} }
inline LinkOrCopyStringStoragePolicy getStringStoragePolicy(const String &s) { inline LinkOrCopyStringStoragePolicy getStringStoragePolicy(const String &s) {
return LinkOrCopyStringStoragePolicy(s.isStatic()); return LinkOrCopyStringStoragePolicy(s.isLinked());
} }
} // namespace ARDUINOJSON_NAMESPACE } // namespace ARDUINOJSON_NAMESPACE

View File

@@ -1,35 +0,0 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2022, Benoit BLANCHON
// MIT License
#pragma once
namespace ARDUINOJSON_NAMESPACE {
template <bool linked>
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<true> LinkedString;
typedef StoredString<false> CopiedString;
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -14,15 +14,15 @@ namespace ARDUINOJSON_NAMESPACE {
class String : public SafeBoolIdom<String> { class String : public SafeBoolIdom<String> {
public: public:
String() : _data(0), _size(0), _isStatic(true) {} enum Ownership { Copied, Linked };
String(const char* data, bool isStaticData = true) String() : _data(0), _size(0), _ownership(Linked) {}
: _data(data),
_size(data ? ::strlen(data) : 0),
_isStatic(isStaticData) {}
String(const char* data, size_t sz, bool isStaticData = true) String(const char* data, Ownership ownership = Linked)
: _data(data), _size(sz), _isStatic(isStaticData) {} : _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 { const char* c_str() const {
return _data; return _data;
@@ -32,8 +32,8 @@ class String : public SafeBoolIdom<String> {
return !_data; return !_data;
} }
bool isStatic() const { bool isLinked() const {
return _isStatic; return _ownership == Linked;
} }
size_t size() const { size_t size() const {
@@ -46,23 +46,19 @@ class String : public SafeBoolIdom<String> {
} }
friend bool operator==(String lhs, String rhs) { friend bool operator==(String lhs, String rhs) {
if (lhs._size != rhs._size)
return false;
if (lhs._data == rhs._data) if (lhs._data == rhs._data)
return true; return true;
if (!lhs._data) if (!lhs._data)
return false; return false;
if (!rhs._data) if (!rhs._data)
return false; 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) { friend bool operator!=(String lhs, String rhs) {
if (lhs._data == rhs._data) return !(lhs == rhs);
return false;
if (!lhs._data)
return true;
if (!rhs._data)
return true;
return strcmp(lhs._data, rhs._data) != 0;
} }
#if ARDUINOJSON_ENABLE_STD_STREAM #if ARDUINOJSON_ENABLE_STD_STREAM
@@ -75,7 +71,7 @@ class String : public SafeBoolIdom<String> {
private: private:
const char* _data; const char* _data;
size_t _size; size_t _size;
bool _isStatic; Ownership _ownership;
}; };
} // namespace ARDUINOJSON_NAMESPACE } // namespace ARDUINOJSON_NAMESPACE

View File

@@ -208,7 +208,7 @@ class MemoryPoolPrint : public Print {
String str() { String str() {
ARDUINOJSON_ASSERT(_size < _capacity); 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) { size_t write(uint8_t c) {

View File

@@ -23,7 +23,7 @@ struct Comparer;
template <typename T> template <typename T>
struct Comparer<T, typename enable_if<IsString<T>::value>::type> struct Comparer<T, typename enable_if<IsString<T>::value>::type>
: ComparerBase { : ComparerBase {
T rhs; T rhs; // TODO: store adapted string?
explicit Comparer(T value) : rhs(value) {} explicit Comparer(T value) : rhs(value) {}

View File

@@ -210,7 +210,7 @@ class VariantData {
void setString(String s) { void setString(String s) {
ARDUINOJSON_ASSERT(s); ARDUINOJSON_ASSERT(s);
if (s.isStatic()) if (s.isLinked())
setType(VALUE_IS_LINKED_STRING); setType(VALUE_IS_LINKED_STRING);
else else
setType(VALUE_IS_OWNED_STRING); setType(VALUE_IS_OWNED_STRING);

View File

@@ -73,9 +73,11 @@ inline T VariantData::asFloat() const {
inline String VariantData::asString() const { inline String VariantData::asString() const {
switch (type()) { switch (type()) {
case VALUE_IS_LINKED_STRING: 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: 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: default:
return String(); return String();
} }
@@ -166,14 +168,15 @@ inline VariantConstRef operator|(VariantConstRef preferedValue,
// Out of class definition to avoid #1560 // Out of class definition to avoid #1560
inline bool VariantRef::set(char value) const { inline bool VariantRef::set(char value) const {
return set<signed char>(value); return set(static_cast<signed char>(value));
} }
// TODO: move somewhere else
template <typename TAdaptedString, typename TCallback> template <typename TAdaptedString, typename TCallback>
bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool, bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool,
TCallback callback) { TCallback callback) {
const char *copy = pool->saveString(str); const char *copy = pool->saveString(str);
String storedString(copy, str.size(), false); String storedString(copy, str.size(), String::Copied);
callback(storedString); callback(storedString);
return copy != 0; return copy != 0;
} }

View File

@@ -119,7 +119,7 @@ class VariantRef : public VariantRefBase<VariantData>,
ARDUINOJSON_DEPRECATED( ARDUINOJSON_DEPRECATED(
"Support for char is deprecated, use int8_t or uint8_t instead") "Support for char is deprecated, use int8_t or uint8_t instead")
as() const { as() const {
return as<signed char>(); return static_cast<char>(as<signed char>());
} }
template <typename T> template <typename T>
@@ -265,7 +265,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
ARDUINOJSON_DEPRECATED( ARDUINOJSON_DEPRECATED(
"Support for char is deprecated, use int8_t or uint8_t instead") "Support for char is deprecated, use int8_t or uint8_t instead")
as() const { as() const {
return as<signed char>(); return static_cast<char>(as<signed char>());
} }
template <typename T> template <typename T>

View File

@@ -78,7 +78,7 @@ class VariantSlot {
void setKey(String k) { void setKey(String k) {
ARDUINOJSON_ASSERT(k); ARDUINOJSON_ASSERT(k);
if (k.isStatic()) if (k.isLinked())
_flags &= VALUE_MASK; _flags &= VALUE_MASK;
else else
_flags |= OWNED_KEY_BIT; _flags |= OWNED_KEY_BIT;

View File

@@ -4,7 +4,7 @@
#pragma once #pragma once
#define ARDUINOJSON_VERSION "6.19.1" #define ARDUINOJSON_VERSION "6.19.3"
#define ARDUINOJSON_VERSION_MAJOR 6 #define ARDUINOJSON_VERSION_MAJOR 6
#define ARDUINOJSON_VERSION_MINOR 19 #define ARDUINOJSON_VERSION_MINOR 19
#define ARDUINOJSON_VERSION_REVISION 1 #define ARDUINOJSON_VERSION_REVISION 3