bug 6556
Allan CORNET [Thu, 4 Feb 2010 15:11:00 +0000 (16:11 +0100)]
scilab/CHANGES_5.3.X
scilab/modules/fileio/includes/filesmanagement.h
scilab/modules/fileio/src/c/filesmanagement.c
scilab/modules/fileio/tests/nonreg_tests/bug_6556.dia.ref [new file with mode: 0644]
scilab/modules/fileio/tests/nonreg_tests/bug_6556.tst [new file with mode: 0644]
scilab/modules/integer/macros/%i_mfprintf.sci
scilab/modules/io/sci_gateway/c/sci_file.c

index d9d8e43..4dfd853 100644 (file)
@@ -36,3 +36,5 @@ Bug fixes:
 
 * bug 6543 fixed - neldermead issues for automatic restarts.
 
+* bug 6556 fixed - fprintf() returned an error if it's called 2 times (or more) on the same file.
+
index 9d427b4..d49530a 100644 (file)
@@ -174,21 +174,21 @@ FILEIO_IMPEXP int GetIdFromFilename(char *filename);
 * @param[out] size of returned array
 * @return Array of Id
 */
-FILEIO_IMPEXP int *GetFilesIdUsed(int *sizeArrayReturned);
+FILEIO_IMPEXP double *GetFilesIdUsed(int *sizeArrayReturned);
 
 /**
 * Get Ids opened in Scilab
 * @param[out] size of returned array
 * @return Array of Id
 */
-FILEIO_IMPEXP int *GetSwapsUsed(int *sizeArrayReturned);
+FILEIO_IMPEXP double *GetSwapsUsed(int *sizeArrayReturned);
 
 /**
 * Get Modes used in Scilab
 * @param[out] size of returned array
 * @return Modes associated to Id
 */
-FILEIO_IMPEXP int *GetModesUsed(int *sizeArrayReturned);
+FILEIO_IMPEXP double *GetModesUsed(int *sizeArrayReturned);
 
 /**
 * Get Types used in Scilab
index b4794e1..c9c73f2 100644 (file)
@@ -308,13 +308,13 @@ int GetIdFromFilename(char *filename)
        return FILE_ID_NOT_DEFINED;
 }
 /*--------------------------------------------------------------------------*/
-int *GetFilesIdUsed(int *sizeArrayReturned)
+double *GetFilesIdUsed(int *sizeArrayReturned)
 {
        int i = 0, j = 0;
-       int* ArrayIdUsed = NULL;
+       double* ArrayIdUsed = NULL;
        *sizeArrayReturned = GetNumberOfIdsUsed();
 
-       ArrayIdUsed = (int*)MALLOC(sizeof(int)*(*sizeArrayReturned));
+       ArrayIdUsed = (double*)MALLOC(sizeof(double)*(*sizeArrayReturned));
        if (ArrayIdUsed == NULL)
        {
                *sizeArrayReturned = 0;
@@ -326,21 +326,21 @@ int *GetFilesIdUsed(int *sizeArrayReturned)
        {
                if (GetFileTypeOpenedInScilab(i) != 0)
                {
-                       ArrayIdUsed[j] = i;
+                       ArrayIdUsed[j] = (double)i;
                        j++;
                }
        }
        return ArrayIdUsed;
 }
 /*--------------------------------------------------------------------------*/
-int *GetSwapsUsed(int *sizeArrayReturned)
+double *GetSwapsUsed(int *sizeArrayReturned)
 {
-       int *ArraySwapUsed = NULL;
+       double *ArraySwapUsed = NULL;
        int i = 0, j = 0;
 
        *sizeArrayReturned = GetNumberOfIdsUsed();
 
-       ArraySwapUsed = (int*)MALLOC(sizeof(int)*(*sizeArrayReturned));
+       ArraySwapUsed = (double*)MALLOC(sizeof(double)*(*sizeArrayReturned));
        if (ArraySwapUsed == NULL)
        {
                *sizeArrayReturned = 0;
@@ -352,21 +352,21 @@ int *GetSwapsUsed(int *sizeArrayReturned)
        {
                if (GetFileTypeOpenedInScilab(i) != 0)
                {
-                       ArraySwapUsed[j] = GetSwapStatus(i);
+                       ArraySwapUsed[j] = (double)GetSwapStatus(i);
                        j++;
                }
        }
        return ArraySwapUsed;
 }
 /*--------------------------------------------------------------------------*/
-int *GetModesUsed(int *sizeArrayReturned)
+double *GetModesUsed(int *sizeArrayReturned)
 {
-       int *ArrayModeUsed = NULL;
+       double *ArrayModeUsed = NULL;
        int i = 0, j = 0;
 
        *sizeArrayReturned = GetNumberOfIdsUsed();
 
-       ArrayModeUsed = (int*)MALLOC(sizeof(int)*(*sizeArrayReturned));
+       ArrayModeUsed = (double*)MALLOC(sizeof(double)*(*sizeArrayReturned));
        if (ArrayModeUsed == NULL)
        {
                *sizeArrayReturned = 0;
@@ -378,7 +378,7 @@ int *GetModesUsed(int *sizeArrayReturned)
        {
                if (GetFileTypeOpenedInScilab(i) != 0)
                {
-                       ArrayModeUsed[j] = GetFileModeOpenedInScilab(i);
+                       ArrayModeUsed[j] = (double)GetFileModeOpenedInScilab(i);
                        j++;
                }
        }
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_6556.dia.ref b/scilab/modules/fileio/tests/nonreg_tests/bug_6556.dia.ref
new file mode 100644 (file)
index 0000000..af04762
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 6556 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6556
+//
+// <-- Short Description -->
+// fprintf() returned an error if it's called 2 times (or more) on the same file.
+fd = mopen(TMPDIR+'/toto.txt','wt');
+[units, typ, filenmes] = file();
+k = find(filenmes == pathconvert(TMPDIR+'/toto.txt',%f,%t));
+if type(units(k)) <> 1 then bugmes();quit;end
+ierr = execstr("mfprintf(units(k),''toto'')","errcatch");
+mclose(fd);
+if ierr <> 0 then bugmes();quit;end
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_6556.tst b/scilab/modules/fileio/tests/nonreg_tests/bug_6556.tst
new file mode 100644 (file)
index 0000000..960299d
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 6556 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6556
+//
+// <-- Short Description -->
+// fprintf() returned an error if it's called 2 times (or more) on the same file.
+
+fd = mopen(TMPDIR+'/toto.txt','wt');
+[units, typ, filenmes] = file();
+k = find(filenmes == pathconvert(TMPDIR+'/toto.txt',%f,%t));
+if type(units(k)) <> 1 then pause,end
+ierr = execstr("mfprintf(units(k),''toto'')","errcatch");
+mclose(fd);
+if ierr <> 0 then pause,end
index ed1becd..beeacc4 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA - 
+// Copyright (C) DIGITEO - 2010 - Allan CORNET
 // 
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -8,11 +9,18 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
 
-function %i_mfprintf(id,fmt,varargin);
-for k=1:size(varargin)
-  if type(varargin(k))==8 then 
-    varargin(k)=double(varargin(k))
+function %i_mfprintf(id, fmt, varargin);
+
+  if type(id) == 8 then
+    id = int(id);
+  end
+
+  for k=1:size(varargin)
+    if type(varargin(k)) == 8 then 
+      varargin(k) = double(varargin(k))
+    end
   end
-end
-mfprintf(id,fmt,varargin(:))
+  
+  mfprintf(id, fmt, varargin(:));
+  
 endfunction
index 0c3b27a..e6f644e 100644 (file)
@@ -295,7 +295,7 @@ static int sci_file_no_rhs(char *fname)
        int m_out = 0, n_out = 0;
 
        int sizeArray = 0;
-       int *IdUsed = NULL;
+       double *IdUsed = NULL;
 
        CheckLhs(0,5);
 
@@ -306,7 +306,7 @@ static int sci_file_no_rhs(char *fname)
        {
                m_out = 1;
                n_out = sizeArray;
-               sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + 1, m_out, n_out, IdUsed);
+               sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, m_out, n_out, IdUsed);
                FREE(IdUsed);
                IdUsed = NULL;
 
@@ -361,12 +361,12 @@ static int sci_file_no_rhs(char *fname)
 
        if (Lhs > 3) /* mod */
        {
-               int *Modes = GetModesUsed(&sizeArray);
+               double *Modes = GetModesUsed(&sizeArray);
                if (Modes)
                {
                        m_out = 1;
                        n_out = sizeArray;
-                       sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + 4, m_out, n_out, Modes);
+                       sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 4, m_out, n_out, Modes);
                        FREE(Modes);
                        Modes = NULL;
                        if(sciErr.iErr)
@@ -381,12 +381,12 @@ static int sci_file_no_rhs(char *fname)
 
        if (Lhs > 4) /* swap */
        {
-               int *SwapId = GetSwapsUsed(&sizeArray);
+               double *SwapId = GetSwapsUsed(&sizeArray);
                if (SwapId)
                {
                        m_out = 1;
                        n_out = sizeArray;
-                       sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + 5, m_out, n_out, SwapId);
+                       sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 5, m_out, n_out, SwapId);
                        FREE(SwapId);
                        SwapId = NULL;
 
@@ -465,7 +465,7 @@ static int sci_file_one_rhs(char *fname)
        {
                m_out = 1;
                n_out = 1;
-               sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + 1, m_out, n_out, &iID);
+               sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, m_out, n_out, pdVarOne);
        }
        else
        {
@@ -552,10 +552,10 @@ static int sci_file_one_rhs(char *fname)
        {
                if (GetFileTypeOpenedInScilab(iID) != 0)
                {
-                       int ModeId = GetFileModeOpenedInScilab(iID);
+                       double ModeId = (double)GetFileModeOpenedInScilab(iID);
                        m_out = 1;
                        n_out = 1;
-                       sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + 4, m_out, n_out, &ModeId);
+                       sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 4, m_out, n_out, &ModeId);
                }
                else
                {
@@ -578,10 +578,10 @@ static int sci_file_one_rhs(char *fname)
        {
                if (GetFileTypeOpenedInScilab(iID) != 0)
                {
-                       int SwapId = GetSwapStatus(iID);
+                       double SwapId = (double)GetSwapStatus(iID);
                        m_out = 1;
                        n_out = 1;
-                       sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + 5, m_out, n_out, &SwapId);
+                       sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 5, m_out, n_out, &SwapId);
                }
                else
                {