From b2afbd3c9f38dafc0b2b8c761aa9be2b3b5f4f37 Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Sun, 12 Nov 2017 14:30:26 +0100 Subject: [PATCH] cJSON_GetStringValue --- cJSON.c | 8 ++++++++ cJSON.h | 3 +++ tests/misc_tests.c | 14 ++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/cJSON.c b/cJSON.c index cef719f..d4d2bed 100644 --- a/cJSON.c +++ b/cJSON.c @@ -73,6 +73,14 @@ CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void) return (const char*) (global_error.json + global_error.position); } +CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item) { + if (!cJSON_IsString(item)) { + return NULL; + } + + return item->valuestring; +} + /* This is a safeguard to prevent copy-pasters from using incompatible C and header files */ #if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 6) || (CJSON_VERSION_PATCH != 0) #error cJSON.h and cJSON.c have different versions. Make sure that both have the same. diff --git a/cJSON.h b/cJSON.h index 7c4f8e7..c865000 100644 --- a/cJSON.h +++ b/cJSON.h @@ -165,6 +165,9 @@ CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *st /* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void); +/* Check if the item is a string and return its valuestring */ +CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item); + /* These functions check the type of an item */ CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item); CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item); diff --git a/tests/misc_tests.c b/tests/misc_tests.c index 1643007..af0cc7f 100644 --- a/tests/misc_tests.c +++ b/tests/misc_tests.c @@ -450,6 +450,19 @@ static void skip_utf8_bom_should_not_skip_bom_if_not_at_beginning(void) TEST_ASSERT_NULL(skip_utf8_bom(&buffer)); } +static void cjson_get_string_value_should_get_a_string(void) +{ + cJSON *string = cJSON_CreateString("test"); + cJSON *number = cJSON_CreateNumber(1); + + TEST_ASSERT_TRUE(cJSON_GetStringValue(string) == string->valuestring); + TEST_ASSERT_NULL(cJSON_GetStringValue(number)); + TEST_ASSERT_NULL(cJSON_GetStringValue(NULL)); + + cJSON_Delete(number); + cJSON_Delete(string); +} + int main(void) { UNITY_BEGIN(); @@ -468,6 +481,7 @@ int main(void) RUN_TEST(ensure_should_fail_on_failed_realloc); RUN_TEST(skip_utf8_bom_should_skip_bom); RUN_TEST(skip_utf8_bom_should_not_skip_bom_if_not_at_beginning); + RUN_TEST(cjson_get_string_value_should_get_a_string); return UNITY_END(); } -- GitLab