提交 218b0c8d 编写于 作者: M Max Bruckner

cJSON_Print: Use reallocate if available

This can reduce worst case peak memory usage by 30% depending on the
realloc implementation.
上级 281df699
......@@ -1055,17 +1055,28 @@ static unsigned char *print(const cJSON * const item, cJSON_bool format, const i
}
update_offset(buffer);
/* copy the buffer over to a new one */
printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
if (printed == NULL)
/* check if reallocate is available */
if (hooks->reallocate != NULL)
{
goto fail;
printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->length);
buffer->buffer = NULL;
if (printed == NULL) {
goto fail;
}
}
strncpy((char*)printed, (char*)buffer->buffer, min(buffer->length, buffer->offset + 1));
printed[buffer->offset] = '\0'; /* just to be sure */
else /* otherwise copy the JSON over to a new buffer */
{
printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
if (printed == NULL)
{
goto fail;
}
memcpy(printed, buffer->buffer, min(buffer->length, buffer->offset + 1));
printed[buffer->offset] = '\0'; /* just to be sure */
/* free the buffer */
hooks->deallocate(buffer->buffer);
/* free the buffer */
hooks->deallocate(buffer->buffer);
}
return printed;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册