Przeglądaj źródła

added Print function call for pre-allocated buffer

Kyle Chisholm 8 lat temu
rodzic
commit
23dafa4739
2 zmienionych plików z 12 dodań i 0 usunięć
  1. 10 0
      cJSON.c
  2. 2 0
      cJSON.h

+ 10 - 0
cJSON.c

@@ -886,6 +886,16 @@ char *cJSON_PrintBuffered(const cJSON *item, int prebuffer, cjbool fmt)
     return print_value(item, 0, fmt, &p);
 }
 
+int cJSON_PrintMallocedBuffer(cJSON *item,char *buf,const int len, cjbool fmt)
+{
+    char *out;
+    printbuffer p;
+    p.buffer = buf;
+    p.length = len;
+    p.offset = 0;
+    out = print_value(item,0,fmt,&p);
+    return (out != buf ? -1 : 0);
+}
 
 /* Parser core - when encountering text, process appropriately. */
 static const char *parse_value(cJSON *item, const char *value, const char **ep)

+ 2 - 0
cJSON.h

@@ -83,6 +83,8 @@ extern char  *cJSON_Print(const cJSON *item);
 extern char  *cJSON_PrintUnformatted(const cJSON *item);
 /* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
 extern char *cJSON_PrintBuffered(const cJSON *item, int prebuffer, int fmt);
+/* Render a cJSON entity to text using a buffer already allocated in memory with length buf_len */
+extern int cJSON_PrintMallocedBuffer(cJSON *item, char *buf, const int len, int fmt);
 /* Delete a cJSON entity and all subentities. */
 extern void   cJSON_Delete(cJSON *c);