add new function of setValuestringToObject

This commit is contained in:
Alanscut 2020-03-24 22:28:15 +08:00
parent 3ece4c893c
commit 6b35f1c5bc
2 changed files with 27 additions and 0 deletions

25
cJSON.c
View File

@ -368,6 +368,31 @@ CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
return object->valuedouble = number;
}
CJSON_PUBLIC(char*) cJSON_SetValuestringToObject(cJSON *object, const char *valuestring)
{
size_t length = 0;
char *copy = NULL;
/* if object->valuestring is NULL, it should not set valuestring */
if (object->valuestring == NULL)
{
return NULL;
}
length = strlen(valuestring) + sizeof("");
copy = (char*) cJSON_malloc(length);
if (copy == NULL)
{
return NULL;
}
memcpy(copy, valuestring, length);
if (!(object->type & cJSON_IsReference) && (object->valuestring != NULL))
{
cJSON_free(object->valuestring);
}
object->valuestring = copy;
return copy;
}
typedef struct
{
unsigned char *buffer;

View File

@ -278,6 +278,8 @@ CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * c
/* helper for the cJSON_SetNumberValue macro */
CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
/* Only takes effect when type of object is JSON_Object */
CJSON_PUBLIC(char*) cJSON_SetValuestringToObject(cJSON *object, const char *valuestring);
/* Macro for iterating over an array or object */
#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)