XML: return empty matrix with xmlAsText applied to an empty list 50/9550/3
Calixte DENIZET [Mon, 29 Oct 2012 10:22:39 +0000 (11:22 +0100)]
Change-Id: Ib954c0471537a32234ba4caa0dd0682ab67eaaf8

scilab/modules/xml/sci_gateway/cpp/sci_xmlAsNumber.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlAsText.cpp

index da26dbb..ef408e5 100644 (file)
@@ -59,18 +59,25 @@ int sci_xmlAsNumber(char *fname, unsigned long fname_len)
         return 0;
     }
 
-    err = allocMatrixOfDouble(pvApiCtx, Rhs + 1, 1, list->getSize(), &pdblReal);
-    const char **contents = list->getContentFromList();
-
-    for (int i = 0; i < list->getSize(); i++)
+    if (list->getSize())
     {
-        stringToDoubleError convErr = STRINGTODOUBLE_NO_ERROR;
+        err = allocMatrixOfDouble(pvApiCtx, Rhs + 1, 1, list->getSize(), &pdblReal);
+        const char **contents = list->getContentFromList();
 
-        pdblReal[i] = stringToDouble(contents[i], TRUE, &convErr);
-        xmlFree(const_cast < char *>(contents[i]));
-    }
+        for (int i = 0; i < list->getSize(); i++)
+        {
+            stringToDoubleError convErr = STRINGTODOUBLE_NO_ERROR;
+
+            pdblReal[i] = stringToDouble(contents[i], TRUE, &convErr);
+            xmlFree(const_cast < char *>(contents[i]));
+        }
 
-    delete[]contents;
+        delete[]contents;
+    }
+    else
+    {
+        createEmptyMatrix(pvApiCtx, Rhs + 1);
+    }
 
     LhsVar(1) = Rhs + 1;
     PutLhsVar();
index 3fe8c60..7c15fff 100644 (file)
@@ -60,17 +60,25 @@ int sci_xmlAsText(char *fname, unsigned long fname_len)
 
     pstStrings = list->getContentFromList();
 
-    err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, list->getSize(), const_cast < const char *const *>(pstStrings));
-    for (int i = 0; i < list->getSize(); i++)
+    if (list->getSize())
     {
-        xmlFree(const_cast < char *>(pstStrings[i]));
+        err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, list->getSize(), const_cast < const char * const *>(pstStrings));
+        for (int i = 0; i < list->getSize(); i++)
+        {
+            xmlFree(const_cast < char *>(pstStrings[i]));
+        }
+        delete[]pstStrings;
+
+        if (err.iErr)
+        {
+            printError(&err, 0);
+            Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            return 0;
+        }
     }
-    delete[]pstStrings;
-    if (err.iErr)
+    else
     {
-        printError(&err, 0);
-        Scierror(999, _("%s: Memory allocation error.\n"), fname);
-        return 0;
+        createEmptyMatrix(pvApiCtx, Rhs + 1);
     }
 
     LhsVar(1) = Rhs + 1;