diff --git a/cJSON.c b/cJSON.c index d72b62b..2f8ab5f 100644 --- a/cJSON.c +++ b/cJSON.c @@ -327,14 +327,14 @@ static void update_offset(printbuffer * const buffer) } /* Removes trailing zeroes from the end of a printed number */ -static unsigned char *trim_trailing_zeroes(printbuffer * const buffer) +static cJSON_bool trim_trailing_zeroes(printbuffer * const buffer) { size_t offset = 0; unsigned char *content = NULL; if ((buffer == NULL) || (buffer->buffer == NULL) || (buffer->offset < 1)) { - return NULL; + return false; } offset = buffer->offset - 1; @@ -354,11 +354,11 @@ static unsigned char *trim_trailing_zeroes(printbuffer * const buffer) buffer->offset = offset; - return content + offset; + return true; } /* Render the number nicely from the given item into a string. */ -static unsigned char *print_number(const cJSON * const item, printbuffer * const output_buffer, const internal_hooks * const hooks) +static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer, const internal_hooks * const hooks) { unsigned char *output_pointer = NULL; double d = item->valuedouble; @@ -367,7 +367,7 @@ static unsigned char *print_number(const cJSON * const item, printbuffer * const if (output_buffer == NULL) { - return NULL; + return false; } /* This is a nice tradeoff. */ @@ -399,7 +399,7 @@ static unsigned char *print_number(const cJSON * const item, printbuffer * const /* sprintf failed */ if (length < 0) { - return NULL; + return false; } output_buffer->offset += (size_t)length; @@ -409,7 +409,7 @@ static unsigned char *print_number(const cJSON * const item, printbuffer * const return trim_trailing_zeroes(output_buffer); } - return output_buffer->buffer; + return true; } /* parse 4 digit hexadecimal number */ @@ -1069,8 +1069,7 @@ static cJSON_bool print_value(const cJSON * const item, const size_t depth, cons } break; case cJSON_Number: - output = print_number(item, output_buffer, hooks); - break; + return print_number(item, output_buffer, hooks); case cJSON_Raw: { size_t raw_length = 0; diff --git a/tests/print_number.c b/tests/print_number.c index ad25b74..b478049 100644 --- a/tests/print_number.c +++ b/tests/print_number.c @@ -37,7 +37,7 @@ static void assert_print_number(const char *expected, double input) memset(item, 0, sizeof(item)); cJSON_SetNumberValue(item, input); - TEST_ASSERT_NOT_NULL_MESSAGE(print_number(item, &buffer, &global_hooks), "Failed to print number."); + TEST_ASSERT_TRUE_MESSAGE(print_number(item, &buffer, &global_hooks), "Failed to print number."); TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, buffer.buffer, "Printed number is not as expected."); } @@ -91,14 +91,13 @@ static void trim_trailing_zeroes_should_trim_trailing_zeroes(void) { printbuffer buffer; unsigned char number[100]; - unsigned char *pointer = NULL; buffer.length = sizeof(number); buffer.buffer = number; strcpy((char*)number, "10.00"); buffer.offset = sizeof("10.00") - 1; - pointer = trim_trailing_zeroes(&buffer); - TEST_ASSERT_EQUAL_UINT8('\0', *pointer); + TEST_ASSERT_TRUE(trim_trailing_zeroes(&buffer)); + TEST_ASSERT_EQUAL_UINT8('\0', buffer.buffer[buffer.offset]); TEST_ASSERT_EQUAL_STRING("10", number); TEST_ASSERT_EQUAL_UINT(sizeof("10") - 1, buffer.offset); }