|
@@ -220,21 +220,40 @@ typedef struct
|
|
int offset;
|
|
int offset;
|
|
} printbuffer;
|
|
} printbuffer;
|
|
|
|
|
|
-static char* ensure(printbuffer *p,int needed)
|
|
|
|
|
|
+/* realloc printbuffer if necessary to have at least "needed" bytes more */
|
|
|
|
+static char* ensure(printbuffer *p, int needed)
|
|
{
|
|
{
|
|
- char *newbuffer;int newsize;
|
|
|
|
- if (!p || !p->buffer) return 0;
|
|
|
|
- needed+=p->offset;
|
|
|
|
- if (needed<=p->length) return p->buffer+p->offset;
|
|
|
|
-
|
|
|
|
- newsize=pow2gt(needed);
|
|
|
|
- newbuffer=(char*)cJSON_malloc(newsize);
|
|
|
|
- if (!newbuffer) {cJSON_free(p->buffer);p->length=0,p->buffer=0;return 0;}
|
|
|
|
- if (newbuffer) memcpy(newbuffer,p->buffer,p->length);
|
|
|
|
- cJSON_free(p->buffer);
|
|
|
|
- p->length=newsize;
|
|
|
|
- p->buffer=newbuffer;
|
|
|
|
- return newbuffer+p->offset;
|
|
|
|
|
|
+ char *newbuffer;
|
|
|
|
+ int newsize;
|
|
|
|
+ if (!p || !p->buffer)
|
|
|
|
+ {
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ needed += p->offset;
|
|
|
|
+ if (needed <= p->length)
|
|
|
|
+ {
|
|
|
|
+ return p->buffer + p->offset;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ newsize = pow2gt(needed);
|
|
|
|
+ newbuffer = (char*)cJSON_malloc(newsize);
|
|
|
|
+ if (!newbuffer)
|
|
|
|
+ {
|
|
|
|
+ cJSON_free(p->buffer);
|
|
|
|
+ p->length = 0;
|
|
|
|
+ p->buffer = 0;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ if (newbuffer)
|
|
|
|
+ {
|
|
|
|
+ memcpy(newbuffer, p->buffer, p->length);
|
|
|
|
+ }
|
|
|
|
+ cJSON_free(p->buffer);
|
|
|
|
+ p->length = newsize;
|
|
|
|
+ p->buffer = newbuffer;
|
|
|
|
+
|
|
|
|
+ return newbuffer + p->offset;
|
|
}
|
|
}
|
|
|
|
|
|
static int update(printbuffer *p)
|
|
static int update(printbuffer *p)
|