|
@@ -82,6 +82,63 @@ struct record
|
|
const char *country;
|
|
const char *country;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+
|
|
|
|
+/* Create a bunch of objects as demonstration. */
|
|
|
|
+int print_preallocated(cJSON *root)
|
|
|
|
+{
|
|
|
|
+ /* declarations */
|
|
|
|
+ char *out = NULL;
|
|
|
|
+ char *buf = NULL;
|
|
|
|
+ char *buf_fail = NULL;
|
|
|
|
+ int len = 0;
|
|
|
|
+ int len_fail = 0;
|
|
|
|
+
|
|
|
|
+ /* formatted print */
|
|
|
|
+ out = cJSON_Print(root);
|
|
|
|
+
|
|
|
|
+ /* create buffer to succeed */
|
|
|
|
+ /* the extra 64 bytes are in case a floating point value is printed */
|
|
|
|
+ len = strlen(out) + 64;
|
|
|
|
+ buf = malloc(len);
|
|
|
|
+
|
|
|
|
+ /* create buffer to fail */
|
|
|
|
+ len_fail = strlen(out);
|
|
|
|
+ buf_fail = malloc(len_fail);
|
|
|
|
+
|
|
|
|
+ /* Print to buffer */
|
|
|
|
+ if (cJSON_PrintPreallocated(root, buf, len, 1) != 0) {
|
|
|
|
+ printf("cJSON_PrintPreallocated failed!\n");
|
|
|
|
+ if (strcmp(out, buf) != 0) {
|
|
|
|
+ printf("cJSON_PrintPreallocated not the same as cJSON_Print!\n");
|
|
|
|
+ printf("cJSON_Print result:\n%s\n", out);
|
|
|
|
+ printf("cJSON_PrintPreallocated result:\n%s\n", buf);
|
|
|
|
+ }
|
|
|
|
+ free(out);
|
|
|
|
+ free(buf_fail);
|
|
|
|
+ free(buf);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* success */
|
|
|
|
+ printf("%s\n", buf);
|
|
|
|
+
|
|
|
|
+ /* force it to fail */
|
|
|
|
+ if (cJSON_PrintPreallocated(root, buf_fail, len_fail, 1) == 0) {
|
|
|
|
+ printf("cJSON_PrintPreallocated failed to show error with insufficient memory!\n");
|
|
|
|
+ printf("cJSON_Print result:\n%s\n", out);
|
|
|
|
+ printf("cJSON_PrintPreallocated result:\n%s\n", buf_fail);
|
|
|
|
+ free(out);
|
|
|
|
+ free(buf_fail);
|
|
|
|
+ free(buf);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ free(out);
|
|
|
|
+ free(buf_fail);
|
|
|
|
+ free(buf);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
/* Create a bunch of objects as demonstration. */
|
|
/* Create a bunch of objects as demonstration. */
|
|
void create_objects(void)
|
|
void create_objects(void)
|
|
{
|
|
{
|