Bug 15339 fixed - clicking cancel button, uigetfont() did not return an empty string. 38/19538/2
Adeline CARNIS [Wed, 22 Nov 2017 10:36:41 +0000 (11:36 +0100)]
Change-Id: If51adbabb0a8cbe5590c11d736d4685b27ddf9b9

scilab/CHANGES.md
scilab/modules/gui/sci_gateway/cpp/sci_uigetfont.cpp

index 2468f84..26e2ddd 100644 (file)
@@ -487,6 +487,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15306](http://bugzilla.scilab.org/show_bug.cgi?id=15306): After the behavior of `||` was changed, its help page was not up to date.
 * [#15308](http://bugzilla.scilab.org/show_bug.cgi?id=15308): Unlike `evstr(["1 2";"3 4"])`, `evstr(["1;2" "3;4"])` was not accepted.
 * [#15337](http://bugzilla.scilab.org/show_bug.cgi?id=15337): There was a mistake in the definition of the l_p norm of a vector in the `norm` page.
+* [#15339](http://bugzilla.scilab.org/show_bug.cgi?id=15339): `uigetfont()` returned garbage on user cancellation.
 
 ### Bugs fixed in 6.0.0:
 * [#592](http://bugzilla.scilab.org/show_bug.cgi?id=592): `linspace(a, b, n<=0)` returned `b` instead of `[]`
index 46cfed9..f295a03 100644 (file)
@@ -250,6 +250,8 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 1;
             }
+
+            AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
         }
 
         delete[] selectedFontName;
@@ -265,6 +267,7 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
             }
 
             *fontSizeAdr = selectedFontSize;
+            AssignOutputVariable(pvApiCtx, 2) = nbInputArgument(pvApiCtx) + 2;
         }
 
         if (nbOutputArgument(pvApiCtx) >= 3)
@@ -278,6 +281,7 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
             }
 
             *boldAdr = selectedBold;
+            AssignOutputVariable(pvApiCtx, 3) = nbInputArgument(pvApiCtx) + 3;
         }
 
         if (nbOutputArgument(pvApiCtx) >= 4)
@@ -291,6 +295,7 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
             }
 
             *italicAdr = selectedItalic;
+            AssignOutputVariable(pvApiCtx, 4) = nbInputArgument(pvApiCtx) + 4;
         }
     }
     else /* The user canceled */
@@ -301,12 +306,14 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
         if (nbOutputArgument(pvApiCtx) >= 1)
         {
             /* Return "" as font name */
-            char* fontNameEmpty = NULL;
-            if (allocSingleString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow * nbCol, (const char**) &fontNameEmpty))
+            const char * fontNameEmpty = "";
+            sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 1, 1, &fontNameEmpty);
+            if (sciErr.iErr)
             {
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 1;
             }
+            AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
         }
 
         if (nbOutputArgument(pvApiCtx) >= 2)
@@ -319,6 +326,7 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 1;
             }
+            AssignOutputVariable(pvApiCtx, 2) = nbInputArgument(pvApiCtx) + 2;
         }
 
         if (nbOutputArgument(pvApiCtx) >= 3)
@@ -331,6 +339,7 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 1;
             }
+            AssignOutputVariable(pvApiCtx, 3) = nbInputArgument(pvApiCtx) + 3;
         }
 
         if (nbOutputArgument(pvApiCtx) >= 4)
@@ -343,14 +352,10 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 1;
             }
+            AssignOutputVariable(pvApiCtx, 4) = nbInputArgument(pvApiCtx) + 4;
         }
     }
 
-    AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
-    AssignOutputVariable(pvApiCtx, 2) = nbInputArgument(pvApiCtx) + 2;
-    AssignOutputVariable(pvApiCtx, 3) = nbInputArgument(pvApiCtx) + 3;
-    AssignOutputVariable(pvApiCtx, 4) = nbInputArgument(pvApiCtx) + 4;
-
     if (fontNameSize)
     {
         freeAllocatedMatrixOfString(nbRow, nbCol, fontNameAdr);