forked from bblanchon/ArduinoJson
Merge branch 'master' into 6.x
This commit is contained in:
@ -4,6 +4,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ArduinoJson/version.hpp"
|
||||
|
||||
#include "ArduinoJson/DynamicJsonDocument.hpp"
|
||||
#include "ArduinoJson/Json/JsonDeserializer.hpp"
|
||||
#include "ArduinoJson/Json/JsonSerializer.hpp"
|
||||
|
@ -256,15 +256,21 @@ class JsonObject : public Internals::ReferenceType,
|
||||
|
||||
template <typename TStringRef, typename TValueRef>
|
||||
bool set_impl(TStringRef key, TValueRef value) {
|
||||
// ignore null key
|
||||
if (Internals::StringTraits<TStringRef>::is_null(key)) return false;
|
||||
|
||||
// search a matching key
|
||||
iterator it = findKey<TStringRef>(key);
|
||||
if (it == end()) {
|
||||
// add the key
|
||||
it = Internals::List<JsonPair>::add();
|
||||
if (it == end()) return false;
|
||||
|
||||
bool key_ok =
|
||||
Internals::ValueSaver<TStringRef>::save(_buffer, it->key, key);
|
||||
if (!key_ok) return false;
|
||||
}
|
||||
|
||||
// save the value
|
||||
return Internals::ValueSaver<TValueRef>::save(_buffer, it->value, value);
|
||||
}
|
||||
|
||||
|
@ -129,7 +129,8 @@ class JsonVariantComparisons {
|
||||
if (is<JsonObject>() && right.template is<JsonObject>())
|
||||
return as<JsonObject>() == right.template as<JsonObject>();
|
||||
if (is<char *>() && right.template is<char *>())
|
||||
return strcmp(as<char *>(), right.template as<char *>()) == 0;
|
||||
return StringTraits<const char *>::equals(as<char *>(),
|
||||
right.template as<char *>());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -10,7 +10,9 @@ namespace Internals {
|
||||
template <typename TChar>
|
||||
struct CharPointerTraits {
|
||||
static bool equals(const TChar* str, const char* expected) {
|
||||
return strcmp(reinterpret_cast<const char*>(str), expected) == 0;
|
||||
const char* actual = reinterpret_cast<const char*>(str);
|
||||
if (!actual || !expected) return actual == expected;
|
||||
return strcmp(actual, expected) == 0;
|
||||
}
|
||||
|
||||
static bool is_null(const TChar* str) {
|
||||
|
@ -11,7 +11,9 @@ namespace Internals {
|
||||
template <>
|
||||
struct StringTraits<const __FlashStringHelper*, void> {
|
||||
static bool equals(const __FlashStringHelper* str, const char* expected) {
|
||||
return strcmp_P(expected, (const char*)str) == 0;
|
||||
const char* actual = reinterpret_cast<const char*>(str);
|
||||
if (!actual || !expected) return actual == expected;
|
||||
return strcmp_P(expected, actual) == 0;
|
||||
}
|
||||
|
||||
static bool is_null(const __FlashStringHelper* str) {
|
||||
@ -33,7 +35,7 @@ struct StringTraits<const __FlashStringHelper*, void> {
|
||||
static const bool has_equals = true;
|
||||
static const bool should_duplicate = true;
|
||||
};
|
||||
}
|
||||
}
|
||||
} // namespace Internals
|
||||
} // namespace ArduinoJson
|
||||
|
||||
#endif
|
||||
|
@ -36,7 +36,10 @@ struct StdStringTraits {
|
||||
}
|
||||
|
||||
static bool equals(const TString& str, const char* expected) {
|
||||
return 0 == strcmp(str.c_str(), expected);
|
||||
// Arduino's String::c_str() can return NULL
|
||||
const char* actual = str.c_str();
|
||||
if (!actual || !expected) return actual == expected;
|
||||
return 0 == strcmp(actual, expected);
|
||||
}
|
||||
|
||||
static void append(TString& str, char c) {
|
||||
@ -64,7 +67,7 @@ struct StringTraits<StringSumHelper, void> : StdStringTraits<StringSumHelper> {
|
||||
template <>
|
||||
struct StringTraits<std::string, void> : StdStringTraits<std::string> {};
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} // namespace Internals
|
||||
} // namespace ArduinoJson
|
||||
|
||||
#endif
|
||||
|
10
src/ArduinoJson/version.hpp
Normal file
10
src/ArduinoJson/version.hpp
Normal file
@ -0,0 +1,10 @@
|
||||
// ArduinoJson - arduinojson.org
|
||||
// Copyright Benoit Blanchon 2014-2018
|
||||
// MIT License
|
||||
|
||||
#pragma once
|
||||
|
||||
#define ARDUINOJSON_VERSION "5.13.2"
|
||||
#define ARDUINOJSON_VERSION_MAJOR 5
|
||||
#define ARDUINOJSON_VERSION_MINOR 13
|
||||
#define ARDUINOJSON_VERSION_REVISION 2
|
Reference in New Issue
Block a user