From 508dece619e26b08a95fa856581d14816b2eef1f Mon Sep 17 00:00:00 2001 From: Chernov Dmitriy <cd_work@mail.ru> Date: 周一, 29 2月 2016 22:16:38 +0800 Subject: [PATCH] manual heap ready --- libscpi/src/parser.c | 44 +++++++++++++++++++------------------------- 1 files changed, 19 insertions(+), 25 deletions(-) diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c index ca0aa93..fd85e47 100644 --- a/libscpi/src/parser.c +++ b/libscpi/src/parser.c @@ -269,8 +269,10 @@ context->buffer.length = input_buffer_length; context->buffer.position = 0; context->error_info_heap.data = error_info_heap; - context->error_info_heap.position = 0; - context->error_info_heap.length = error_info_heap_length; + 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); } @@ -507,36 +509,32 @@ return result; } -#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION - #if USE_MEMORY_ALLOCATION_FREE - #define MAX_BUFF_SIZE 2 - #else - #define MAX_BUFF_SIZE 3 - #endif -#else - #define MAX_BUFF_SIZE 1 -#endif -static size_t startoutputlimit = 0; - +/** + * Write string withn " to the result + * @param context + * @param data + * @return + */ +static size_t outputlimit_0=0; size_t SCPI_ResultError(scpi_t * context, scpi_error_t * error) { size_t result = 0; - size_t outputlimit = startoutputlimit++; + size_t outputlimit = outputlimit_0++; //SCPI_STD_ERROR_DESC_CHARS_LIMIT; size_t step = 0; const char * quote; - char * data[MAX_BUFF_SIZE]; - size_t len[MAX_BUFF_SIZE]; + char * data[SCPIDEFINE_DESCRIPTION_MAX_PARTS]; + size_t len[SCPIDEFINE_DESCRIPTION_MAX_PARTS]; data[0] = SCPI_ErrorTranslate(error->error_code); len[0] = strlen(data[0]); + #if USE_DEVICE_DEPENDENT_ERROR_INFORMATION + data[1] = error->device_dependent_info; #if USE_MEMORY_ALLOCATION_FREE - data[1] = error->device_dependent_info; len[1] = error->device_dependent_info ? strlen(data[1]) : 0; #else - data[1] = SCPIDEFINE_get_1st_part(error->device_dependent_info,&len[1]); - data[2] = SCPIDEFINE_get_1st_part(data[1],&len[2]); + SCPIDEFINE_get_parts(&context->error_info_heap, data[1], &len[1], &data[2], &len[2]); #endif #endif @@ -544,7 +542,7 @@ result += writeDelimiter(context); result += writeData(context, "\"", 1); - for(size_t i = 0; data[i] && outputlimit && (i < MAX_BUFF_SIZE); i++){ + for(size_t i = 0; data[i] && outputlimit && (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS); i++){ if(i==1){ result += writeSemicolon(context); outputlimit -= 1; @@ -575,15 +573,11 @@ result += writeData(context, "\"", 1); #if USE_DEVICE_DEPENDENT_ERROR_INFORMATION - #if USE_MEMORY_ALLOCATION_FREE - SCPIDEFINE_free(error->device_dependent_info); - #else - #endif + SCPIDEFINE_free(&context->error_info_heap, error->device_dependent_info, false); #endif return result; } -#undef MAX_BUFF_SIZE /** * Write arbitrary block header with length -- Gitblit v1.9.1