From 072c98d567c1e487c5471b4e52154da013fdd9f1 Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周六, 05 12月 2015 18:47:41 +0800 Subject: [PATCH] Extend ieee488.c test coverage --- libscpi/src/parser.c | 60 ++++++++++++++++++++++++++++-------------------------------- 1 files changed, 28 insertions(+), 32 deletions(-) diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c index faaeb3f..c4220f5 100644 --- a/libscpi/src/parser.c +++ b/libscpi/src/parser.c @@ -53,7 +53,11 @@ * @return number of bytes written */ static size_t writeData(scpi_t * context, const char * data, size_t len) { - return context->interface->write(context, data, len); + if (len > 0) { + return context->interface->write(context, data, len); + } else { + return 0; + } } /** @@ -243,19 +247,6 @@ * @param interface */ void SCPI_Init(scpi_t * context) { - if (context->idn[0] == NULL) { - context->idn[0] = SCPI_DEFAULT_1_MANUFACTURE; - } - if (context->idn[1] == NULL) { - context->idn[1] = SCPI_DEFAULT_2_MODEL; - } - if (context->idn[2] == NULL) { - context->idn[2] = SCPI_DEFAULT_3; - } - if (context->idn[3] == NULL) { - context->idn[3] = SCPI_DEFAULT_4_REVISION; - } - context->buffer.position = 0; SCPI_ErrorInit(context); } @@ -477,10 +468,17 @@ */ size_t SCPI_ResultText(scpi_t * context, const char * data) { size_t result = 0; + size_t len = strlen(data); + const char * quote; result += writeDelimiter(context); result += writeData(context, "\"", 1); - // TODO: convert " to "" - result += writeData(context, data, strlen(data)); + while ((quote = strnpbrk(data, len, "\""))) { + result += writeData(context, data, quote - data + 1); + result += writeData(context, "\"", 1); + len -= quote - data + 1; + data = quote + 1; + } + result += writeData(context, data, len); result += writeData(context, "\"", 1); context->output_count++; return result; @@ -1433,7 +1431,7 @@ * @param count * @param item_size * @param format - * @return + * @return */ static size_t parserResultArrayBinary(scpi_t * context, const void * array, size_t count, size_t item_size, scpi_array_format_t format) { @@ -1457,6 +1455,7 @@ case 4: case 8: result += SCPI_ResultArbitraryBlockHeader(context, count * item_size); + break; default: SCPI_ErrorPush(context, SCPI_ERROR_SYSTEM_ERROR); return 0; @@ -1468,19 +1467,19 @@ break; case 2: for (i = 0; i < count; i++) { - uint16_t val = SCPI_Swap16(((uint16_t*)array)[i]); + uint16_t val = SCPI_Swap16(((uint16_t*) array)[i]); result += SCPI_ResultArbitraryBlockData(context, &val, item_size); } break; case 4: for (i = 0; i < count; i++) { - uint32_t val = SCPI_Swap32(((uint32_t*)array)[i]); + uint32_t val = SCPI_Swap32(((uint32_t*) array)[i]); result += SCPI_ResultArbitraryBlockData(context, &val, item_size); } break; case 8: for (i = 0; i < count; i++) { - uint64_t val = SCPI_Swap64(((uint64_t*)array)[i]); + uint64_t val = SCPI_Swap64(((uint64_t*) array)[i]); result += SCPI_ResultArbitraryBlockData(context, &val, item_size); } break; @@ -1492,14 +1491,11 @@ #define RESULT_ARRAY(func) do {\ - size_t result;\ + size_t result = 0;\ if (format == SCPI_FORMAT_ASCII) {\ size_t i;\ for (i = 0; i < count; i++) {\ result += func(context, array[i]);\ - }\ - if (count > 0) {\ - result += count - 1; /* add length of commas */\ }\ } else {\ result = parserResultArrayBinary(context, array, count, sizeof(*array), format);\ @@ -1537,7 +1533,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayInt16(scpi_t * context, const int16_t * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultInt16); @@ -1549,7 +1545,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayUInt16(scpi_t * context, const uint16_t * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultUInt16); @@ -1561,7 +1557,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayInt32(scpi_t * context, const int32_t * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultInt32); @@ -1573,7 +1569,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayUInt32(scpi_t * context, const uint32_t * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultUInt32); @@ -1585,7 +1581,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayInt64(scpi_t * context, const int64_t * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultInt64); @@ -1597,7 +1593,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayUInt64(scpi_t * context, const uint64_t * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultUInt64); @@ -1609,7 +1605,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayFloat(scpi_t * context, const float * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultFloat); @@ -1621,7 +1617,7 @@ * @param array * @param count * @param format - * @return + * @return */ size_t SCPI_ResultArrayDouble(scpi_t * context, const double * array, size_t count, scpi_array_format_t format) { RESULT_ARRAY(SCPI_ResultDouble); -- Gitblit v1.9.1