diff --git a/CHANGELOG.md b/CHANGELOG.md index 867227fd..62dbdf4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ HEAD ---- * Changed the rules of string duplication (issue #658) +* Changed the return type of `strdup()` to `const char*` to prevent double duplication > ### New rules for string duplication > diff --git a/src/ArduinoJson/JsonBuffer.hpp b/src/ArduinoJson/JsonBuffer.hpp index 5a42a7d0..36775cb1 100644 --- a/src/ArduinoJson/JsonBuffer.hpp +++ b/src/ArduinoJson/JsonBuffer.hpp @@ -38,19 +38,19 @@ class JsonBuffer : Internals::NonCopyable { // Duplicates a string // - // char* strdup(TValue); + // const char* strdup(TValue); // TValue = const std::string&, const String&, template typename TypeTraits::EnableIf::value, - char *>::type + const char *>::type strdup(const TString &src) { return Internals::StringTraits::duplicate(src, this); } // - // char* strdup(TValue); + // const char* strdup(TValue); // TValue = const char*, const char[N], const FlashStringHelper* template - char *strdup(const TString *src) { + const char *strdup(const TString *src) { return Internals::StringTraits::duplicate(src, this); } diff --git a/test/DynamicJsonBuffer/strdup.cpp b/test/DynamicJsonBuffer/strdup.cpp index 9feea421..f6fb3b1c 100644 --- a/test/DynamicJsonBuffer/strdup.cpp +++ b/test/DynamicJsonBuffer/strdup.cpp @@ -10,14 +10,14 @@ TEST_CASE("DynamicJsonBuffer::strdup()") { SECTION("Should return a copy") { char original[] = "hello"; - char* copy = buffer.strdup(original); + const char* copy = buffer.strdup(original); strcpy(original, "world"); REQUIRE(std::string("hello") == copy); } SECTION("Given NULL, return NULL") { const char* original = NULL; - char* copy = buffer.strdup(original); + const char* copy = buffer.strdup(original); REQUIRE(0 == copy); } } diff --git a/test/Misc/std_string.cpp b/test/Misc/std_string.cpp index 00b76e83..2cfa3a3c 100644 --- a/test/Misc/std_string.cpp +++ b/test/Misc/std_string.cpp @@ -243,7 +243,7 @@ TEST_CASE("std::string") { SECTION("JsonBuffer_strdup") { std::string original("hello"); - char *copy = jb.strdup(original); + const char *copy = jb.strdup(original); original[0] = 'w'; REQUIRE(std::string("hello") == copy); }