String length and allocation
When calling the readString functions, I have to magically know how big the string buffer needs to be. There appears to be no way to check this ahead of time.
I propose a variant of readString, thusly:
char* readNewString(Stream& stream, bool safely = true) {
DataType dataFormat;
getNextDataType(stream, dataFormat, safely);
size_t outputSize;
char* value = nullptr;
switch(dataFormat) {
case DataType::String5: {
MSGPACK_SAFETY_FORMAT_CHECK(DataType::String8);
stream.read();
MSGPACK_SAFELY_RUN(readRaw(stream, outputSize, safely));
value = new char[outputSize + 1];
MSGPACK_SAFELY_RUN(readRaw(stream, value, outputSize, safely));
value[outputSize] = '\0';
return value;
}
/* ... */
}
}
Yes it's a good idea! Could you possibly make a pull request?
Naming-wise, it might be nice to be readStringNew since it is a variant of readString... (so that it shows up in auto-complete along-side the others).
Issued pull request #7
Incidentally, is there a simple way to add a function that skips whatever the next value is?
we don't have a generic skip value function. So if the next value was a map of maps, then we'd want to skip the map of maps - so the skip code would need to recursively skip all sub-elements, correct?
Correct. Would you like me to have a go?
sure! why not. that'd be great