diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qa/cppunit/test_json_writer.cxx | 10 | ||||
-rw-r--r-- | tools/source/misc/json_writer.cxx | 16 |
2 files changed, 20 insertions, 6 deletions
diff --git a/tools/qa/cppunit/test_json_writer.cxx b/tools/qa/cppunit/test_json_writer.cxx index c4e9331c8d17..e27afc95f712 100644 --- a/tools/qa/cppunit/test_json_writer.cxx +++ b/tools/qa/cppunit/test_json_writer.cxx @@ -7,6 +7,10 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <sal/config.h> + +#include <cstdlib> + #include <cppunit/extensions/HelperMacros.h> #include <test/bootstrapfixture.hxx> #include <rtl/ustring.hxx> @@ -44,7 +48,11 @@ void JsonWriterTest::test1() aJson.put("int", 12); } - std::unique_ptr<char[]> result(aJson.extractData()); + struct Free + { + void operator()(void* p) const { std::free(p); } + }; + std::unique_ptr<char, Free> result(aJson.extractData()); CPPUNIT_ASSERT_EQUAL(std::string("{ \"node\": { \"oustring\": \"val1\", \"ostring\": \"val2\", " "\"charptr\": \"val3\", \"int\": 12}}"), diff --git a/tools/source/misc/json_writer.cxx b/tools/source/misc/json_writer.cxx index 81b22e92a2d1..8a57e2ac337f 100644 --- a/tools/source/misc/json_writer.cxx +++ b/tools/source/misc/json_writer.cxx @@ -19,9 +19,9 @@ constexpr int DEFAULT_BUFFER_SIZE = 2048; JsonWriter::JsonWriter() : mSpaceAllocated(DEFAULT_BUFFER_SIZE) - , maBuffer(new char[mSpaceAllocated]) + , mpBuffer(static_cast<char*>(malloc(mSpaceAllocated))) , mStartNodeCount(0) - , mPos(maBuffer.get()) + , mPos(mpBuffer) { *mPos = '{'; ++mPos; @@ -29,7 +29,11 @@ JsonWriter::JsonWriter() ++mPos; } -JsonWriter::~JsonWriter() { assert(!maBuffer && "forgot to extract data?"); } +JsonWriter::~JsonWriter() +{ + assert(!mpBuffer && "forgot to extract data?"); + free(mpBuffer); +} ScopedJsonWriterNode JsonWriter::startNode(const char* pNodeName) { @@ -239,14 +243,16 @@ void JsonWriter::addCommaBeforeField() char* JsonWriter::extractData() { assert(mStartNodeCount == 0 && "did not close all nodes"); - assert(maBuffer && "data already extracted"); + assert(mpBuffer && "data already extracted"); // add closing brace *mPos = '}'; ++mPos; // null-terminate *mPos = 0; mPos = nullptr; - return maBuffer.release(); + char* pRet = nullptr; + std::swap(pRet, mpBuffer); + return pRet; } } // namespace tools |