From d2a06893015a9e2845f9278af9e2ba15f9b37d9d Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周一, 31 8月 2015 17:35:32 +0800
Subject: [PATCH] Fix #44: incorrect handling of empty string

---
 libscpi/src/parser.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c
index 6a7b776..c307a37 100644
--- a/libscpi/src/parser.c
+++ b/libscpi/src/parser.c
@@ -701,8 +701,17 @@
 
     result = SCPI_Parameter(context, &param, 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
     }
@@ -760,7 +769,7 @@
             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;
                     }

--
Gitblit v1.9.1