mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-02 00:38:26 +01:00
Fixed JsonVariant::isNull() not returning true after set((char*)0)
This commit is contained in:
@@ -15,11 +15,11 @@ template <typename TAdaptedString>
|
||||
inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool) {
|
||||
if (!var) return false;
|
||||
if (key.isStatic()) {
|
||||
var->setLinkedKey(key.data());
|
||||
var->setLinkedKey(make_not_null(key.data()));
|
||||
} else {
|
||||
char* dup = key.save(pool);
|
||||
const char* dup = key.save(pool);
|
||||
if (!dup) return false;
|
||||
var->setOwnedKey(dup);
|
||||
var->setOwnedKey(make_not_null(dup));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "../Misc/SerializedValue.hpp"
|
||||
#include "../Polyfills/gsl/not_null.hpp"
|
||||
#include "VariantContent.hpp"
|
||||
|
||||
namespace ARDUINOJSON_NAMESPACE {
|
||||
@@ -179,9 +180,13 @@ class VariantData {
|
||||
}
|
||||
|
||||
void setLinkedRaw(SerializedValue<const char *> value) {
|
||||
setType(VALUE_IS_LINKED_RAW);
|
||||
_content.asRaw.data = value.data();
|
||||
_content.asRaw.size = value.size();
|
||||
if (value.data()) {
|
||||
setType(VALUE_IS_LINKED_RAW);
|
||||
_content.asRaw.data = value.data();
|
||||
_content.asRaw.size = value.size();
|
||||
} else {
|
||||
setType(VALUE_IS_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -220,25 +225,26 @@ class VariantData {
|
||||
}
|
||||
|
||||
void setLinkedString(const char *value) {
|
||||
setType(VALUE_IS_LINKED_STRING);
|
||||
_content.asString = value;
|
||||
if (value) {
|
||||
setType(VALUE_IS_LINKED_STRING);
|
||||
_content.asString = value;
|
||||
} else {
|
||||
setType(VALUE_IS_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void setNull() {
|
||||
setType(VALUE_IS_NULL);
|
||||
}
|
||||
|
||||
void setOwnedString(const char *s) {
|
||||
void setOwnedString(not_null<const char *> s) {
|
||||
setType(VALUE_IS_OWNED_STRING);
|
||||
_content.asString = s;
|
||||
_content.asString = s.get();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool setOwnedString(T value, MemoryPool *pool) {
|
||||
char *dup = value.save(pool);
|
||||
if (dup) {
|
||||
setType(VALUE_IS_OWNED_STRING);
|
||||
_content.asString = dup;
|
||||
bool setOwnedString(const char *s) {
|
||||
if (s) {
|
||||
setOwnedString(make_not_null(s));
|
||||
return true;
|
||||
} else {
|
||||
setType(VALUE_IS_NULL);
|
||||
@@ -246,6 +252,11 @@ class VariantData {
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool setOwnedString(T value, MemoryPool *pool) {
|
||||
return setOwnedString(value.save(pool));
|
||||
}
|
||||
|
||||
void setUnsignedInteger(UInt value) {
|
||||
setType(VALUE_IS_POSITIVE_INTEGER);
|
||||
_content.asInteger = static_cast<UInt>(value);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../Polyfills/gsl/not_null.hpp"
|
||||
#include "../Polyfills/type_traits.hpp"
|
||||
#include "../Variant/VariantContent.hpp"
|
||||
|
||||
@@ -67,14 +68,14 @@ class VariantSlot {
|
||||
_next = VariantSlotDiff(slot - this);
|
||||
}
|
||||
|
||||
void setOwnedKey(const char* k) {
|
||||
void setOwnedKey(not_null<const char*> k) {
|
||||
_flags |= KEY_IS_OWNED;
|
||||
_key = k;
|
||||
_key = k.get();
|
||||
}
|
||||
|
||||
void setLinkedKey(const char* k) {
|
||||
void setLinkedKey(not_null<const char*> k) {
|
||||
_flags &= VALUE_MASK;
|
||||
_key = k;
|
||||
_key = k.get();
|
||||
}
|
||||
|
||||
const char* key() const {
|
||||
|
||||
Reference in New Issue
Block a user