From 1f77a03fa02b0cdbaa878cd7015838638eedc4a8 Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周日, 24 4月 2016 22:11:15 +0800 Subject: [PATCH] Fix strndup of NULL, add auto length for SCPI_ErrorPushEx --- libscpi/src/parser.c | 48 ++++++++++++++++++++++++++++++------------------ 1 files changed, 30 insertions(+), 18 deletions(-) diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c index 6d7f8a9..db6f5df 100644 --- a/libscpi/src/parser.c +++ b/libscpi/src/parser.c @@ -219,11 +219,11 @@ result &= processCommand(context); cmd_prev = state->programHeader; } else { - /* test */ /* place undefined header with error */ - data[r ? (r - 1) : r] = 0; - SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data); - //SCPI_ErrorPush(context, SCPI_ERROR_UNDEFINED_HEADER); + /* calculate length of errornouse header and trim \r\n */ + size_t r2 = r; + while(r2 > 0 && (data[r2 - 1] == '\r' || data[r2 - 1] == '\n')) r2--; + SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data, r2); result = FALSE; } } @@ -246,9 +246,17 @@ /** * Initialize SCPI context structure * @param context - * @param command_list - * @param buffer + * @param commands * @param interface + * @param units + * @param idn1 + * @param idn2 + * @param idn3 + * @param idn4 + * @param input_buffer + * @param input_buffer_length + * @param error_queue_data + * @param error_queue_size */ void SCPI_Init(scpi_t * context, const scpi_command_t * commands, @@ -256,8 +264,7 @@ const scpi_unit_def_t * units, const char * idn1, const char * idn2, const char * idn3, const char * idn4, char * input_buffer, size_t input_buffer_length, - scpi_error_t * error_queue_data, int16_t error_queue_size, - char * error_info_heap, size_t error_info_heap_length) { + scpi_error_t * error_queue_data, int16_t error_queue_size) { memset(context, 0, sizeof (*context)); context->cmdlist = commands; context->interface = interface; @@ -269,13 +276,22 @@ context->buffer.data = input_buffer; context->buffer.length = input_buffer_length; context->buffer.position = 0; - context->error_info_heap.data = error_info_heap; - context->error_info_heap.wr = 0; - context->error_info_heap.size = error_info_heap_length; - context->error_info_heap.count = context->error_info_heap.size; - memset(context->error_info_heap.data, 0, context->error_info_heap.size); SCPI_ErrorInit(context, error_queue_data, error_queue_size); } + +#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE +/** + * Initialize context's + * @param context + * @param data + * @param len + * @return + */ +void SCPI_InitHeap(scpi_t * context, + char * error_info_heap, size_t error_info_heap_length) { + scpiheap_init(&context->error_info_heap, error_info_heap, error_info_heap_length); +} +#endif /** * Interface to the application. Adds data to system buffer and try to search @@ -547,7 +563,7 @@ result += writeDelimiter(context); result += writeData(context, "\"", 1); - for (i = 0; data[i] && outputlimit && (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS); i++) { + for (i = 0; (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS) && data[i] && outputlimit; i++) { if (i == 1) { result += writeSemicolon(context); outputlimit -= 1; @@ -576,10 +592,6 @@ outputlimit -= len[i]; } result += writeData(context, "\"", 1); - -#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION - SCPIDEFINE_free(&context->error_info_heap, error->device_dependent_info, false); -#endif return result; } -- Gitblit v1.9.1