Fix #44: incorrect handling of empty string
| | |
| | | char buffer[100]; |
| | | size_t copy_len; |
| | | |
| | | SCPI_ParamCopyText(context, buffer, sizeof(buffer), ©_len, FALSE); |
| | | buffer[copy_len] = '\0'; |
| | | if (!SCPI_ParamCopyText(context, buffer, sizeof(buffer), ©_len, FALSE)) { |
| | | buffer[0] = '\0'; |
| | | } |
| | | |
| | | fprintf(stderr, "TEXT: ***%s***\r\n", buffer); |
| | | |
| | |
| | | char buffer[100]; |
| | | size_t copy_len; |
| | | |
| | | SCPI_ParamCopyText(context, buffer, sizeof(buffer), ©_len, false); |
| | | buffer[copy_len] = '\0'; |
| | | if(!SCPI_ParamCopyText(context, buffer, sizeof(buffer), ©_len, false)) { |
| | | buffer[0] = '\0'; |
| | | } |
| | | |
| | | fprintf(stderr, "TEXT: ***%s***\r\n", buffer); |
| | | |
| | |
| | | token->len = state->pos - token->ptr; |
| | | |
| | | if ((token->len > 0)) { |
| | | token->ptr++; |
| | | token->len -= 2; |
| | | //token->ptr++; |
| | | //token->len -= 2; |
| | | } else { |
| | | token->type = SCPI_TOKEN_UNKNOWN; |
| | | state->pos = token->ptr; |
| | | token->len = 0; |
| | | } |
| | | |
| | | return token->len > 0 ? token->len + 2 : 0; |
| | | return token->len > 0 ? token->len : 0; |
| | | } |
| | | |
| | | /* 7.7.6 <ARBITRARY BLOCK PROGRAM DATA> */ |
| | |
| | | |
| | | result = SCPI_Parameter(context, ¶m, mandatory); |
| | | if (result) { |
| | | *value = param.ptr; |
| | | *len = param.len; |
| | | switch(param.type) { |
| | | case SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA: |
| | | case SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA: |
| | | *value = param.ptr + 1; |
| | | *len = param.len - 2; |
| | | break; |
| | | default: |
| | | *value = param.ptr; |
| | | *len = param.len; |
| | | break; |
| | | } |
| | | |
| | | // TODO: return also parameter type (ProgramMnemonic, ArbitraryBlockProgramData, SingleQuoteProgramData, DoubleQuoteProgramData |
| | | } |
| | |
| | | case SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA: |
| | | case SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA: |
| | | quote = param.type == SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA ? '\'' : '"'; |
| | | for (i_from = 0, i_to = 0; i_from < (size_t) param.len; i_from++) { |
| | | for (i_from = 1, i_to = 0; i_from < (size_t) (param.len - 1); i_from++) { |
| | | if (i_from >= buffer_len) { |
| | | break; |
| | | } |
| | |
| | | } |
| | | |
| | | static void testString(void) { |
| | | TEST_TOKEN("\"ahoj\"", scpiLex_StringProgramData, 1, 4, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ahoj\" ", scpiLex_StringProgramData, 1, 4, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ahoj' ", scpiLex_StringProgramData, 1, 4, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ahoj\"", scpiLex_StringProgramData, 0, 6, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ahoj\" ", scpiLex_StringProgramData, 0, 6, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ahoj' ", scpiLex_StringProgramData, 0, 6, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ahoj ", scpiLex_StringProgramData, 0, 0, SCPI_TOKEN_UNKNOWN); |
| | | TEST_TOKEN("'ah''oj' ", scpiLex_StringProgramData, 1, 6, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ah\"oj' ", scpiLex_StringProgramData, 1, 5, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ah\"\"oj\" ", scpiLex_StringProgramData, 1, 6, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ah''oj' ", scpiLex_StringProgramData, 0, 8, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ah\"oj' ", scpiLex_StringProgramData, 0, 7, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ah\"\"oj\" ", scpiLex_StringProgramData, 0, 8, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"\"", scpiLex_StringProgramData, 0, 2, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("''", scpiLex_StringProgramData, 0, 2, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | } |
| | | |
| | | static void testProgramData(void) { |
| | |
| | | TEST_TOKEN("( 1 + 2 ) , ", scpiParser_parseProgramData, 0, 9, SCPI_TOKEN_PROGRAM_EXPRESSION); |
| | | TEST_TOKEN("( 1 + 2 , ", scpiParser_parseProgramData, 0, 0, SCPI_TOKEN_UNKNOWN); |
| | | |
| | | TEST_TOKEN("\"ahoj\" ", scpiParser_parseProgramData, 1, 4, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ahoj' ", scpiParser_parseProgramData, 1, 4, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ahoj\" ", scpiParser_parseProgramData, 0, 6, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ahoj' ", scpiParser_parseProgramData, 0, 6, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ahoj ", scpiParser_parseProgramData, 0, 0, SCPI_TOKEN_UNKNOWN); |
| | | TEST_TOKEN("'ah''oj' ", scpiParser_parseProgramData, 1, 6, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ah\"oj' ", scpiParser_parseProgramData, 1, 5, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ah\"\"oj\" ", scpiParser_parseProgramData, 1, 6, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ah''oj' ", scpiParser_parseProgramData, 0, 8, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("'ah\"oj' ", scpiParser_parseProgramData, 0, 7, SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"ah\"\"oj\" ", scpiParser_parseProgramData, 0, 8, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | TEST_TOKEN("\"\"", scpiParser_parseProgramData, 0, 2, SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA); |
| | | |
| | | TEST_TOKEN("abc_213as564 , ", scpiLex_CharacterProgramData, 0, 12, SCPI_TOKEN_PROGRAM_MNEMONIC); |
| | | |
| | |
| | | TEST_ParamCopyText("\'a\"c\'", TRUE, "a\"c", 3, TRUE, 0); |
| | | TEST_ParamCopyText("\"a\"\"c\"", TRUE, "a\"c", 3, TRUE, 0); |
| | | TEST_ParamCopyText("\"a\'c\"", TRUE, "a\'c", 3, TRUE, 0); |
| | | TEST_ParamCopyText("\"\"", TRUE, "", 0, TRUE, 0); |
| | | TEST_ParamCopyText("", FALSE, "", 0, FALSE, 0); |
| | | TEST_ParamCopyText("\"\"", FALSE, "", 0, TRUE, 0); |
| | | } |
| | | |
| | | |