fullpath did not manage matrix of string as input argument. (SEP 72) 22/5522/2
Allan CORNET [Fri, 25 Nov 2011 10:20:57 +0000 (11:20 +0100)]
Change-Id: I2fdcd154543b0a936b6e35af41c3a468b5ddedce

SEP/.gitignore
SEP/INDEX
SEP/SEP_072_extends_fullpath.odt [new file with mode: 0644]
scilab/CHANGES_5.4.X
scilab/modules/fileio/help/en_US/fullpath.xml
scilab/modules/fileio/sci_gateway/c/sci_fullpath.c
scilab/modules/fileio/tests/unit_tests/fullpath.dia.ref
scilab/modules/fileio/tests/unit_tests/fullpath.tst
scilab/modules/helptools/macros/xmltoformat.sci

index 9d10ce7..6b47b02 100644 (file)
@@ -1,3 +1,3 @@
 # ignore openoffice temporary lock files
 .~lock.*#
-
+*.bak
index 9704836..d25e1d7 100644 (file)
--- a/SEP/INDEX
+++ b/SEP/INDEX
@@ -66,4 +66,6 @@ SEP #066: Xcos compilation hooks
 SEP #067: lines() default value
 SEP #068: Tempname
 SEP #069: Extend predef to get protected variable names
-SEP #070: Xcos validation functions
\ No newline at end of file
+SEP #070: Xcos validation functions
+SEP #071: Modify atomsRemove to delete tarball
+SEP #072: Extend Â“fullpath” to manage matrix of string as input argument
\ No newline at end of file
diff --git a/SEP/SEP_072_extends_fullpath.odt b/SEP/SEP_072_extends_fullpath.odt
new file mode 100644 (file)
index 0000000..1f1d46b
Binary files /dev/null and b/SEP/SEP_072_extends_fullpath.odt differ
index bf72724..5af29e8 100644 (file)
@@ -225,6 +225,8 @@ File input/output:
 
 * tempname function added (SEP 68).
 
+* fullpath did not manage matrix of string as input argument. (SEP 72)
+
 * bug 9253 fixed - fscanfMat failed to read a file with some lines
                    of text at the end (backward compatibility).
 
index af747fe..067f47d 100644 (file)
@@ -2,7 +2,7 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Allan CORNET
- * ...
+ * Copyright (C) 2011 - DIGITEO - 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
@@ -29,7 +29,7 @@
       <varlistentry>
         <term>res</term>
         <listitem>
-          <para>a string</para>
+          <para>a string or matrix of string</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -37,7 +37,7 @@
       <varlistentry>
         <term>relative_path</term>
         <listitem>
-          <para>a string</para>
+          <para>a string or a matrix of string</para>
         </listitem>
       </varlistentry>
     </variablelist>
   <refsection>
     <title>Examples</title>
     <programlisting role="example"><![CDATA[ 
-mkdir(TMPDIR+'/niv1');
-mkdir(TMPDIR+'/niv1/niv2');
-mputl(' ',TMPDIR+'/niv1/test.txt');
-cd(TMPDIR+'/niv1/niv2');
-fullpath('../test.txt')
+cd(TMPDIR);
+mkdir(TMPDIR + "/niv1");
+mkdir(TMPDIR + "/niv1/niv2");
+mkdir(TMPDIR + "/niv1/niv2/niv3");
+mputl(' ', TMPDIR + "/niv1/test1.txt");
+mputl(' ' , TMPDIR + "/niv1/niv2/test2.txt");
+
+cd(TMPDIR + "/niv1/niv2/niv3");
+
+r1 = fullpath("../../test1.txt")
+r2 = fullpath("../test2.txt")
+M = ["../../test1.txt", "../test2.txt"];
+R = fullpath(M)
  ]]></programlisting>
   </refsection>
   <refsection>
@@ -63,4 +71,13 @@ fullpath('../test.txt')
       <member>A.C</member>
     </simplelist>
   </refsection>
+  <refsection>
+    <title>History</title>
+    <revhistory>
+      <revision>
+        <revnumber>5.4.0</revnumber>
+        <revremark>Matrix of String managed (SEP 72)</revremark>
+      </revision>
+    </revhistory>
+  </refsection>
 </refentry>
index dbc44db..c9ed2b4 100644 (file)
@@ -1,7 +1,7 @@
 /*
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2007 - INRIA - Allan CORNET
-* Copyright (C) 2009 - DIGITEO - Allan CORNET
+* Copyright (C) 2009-2011 - DIGITEO - 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
@@ -15,6 +15,7 @@
 #include <string.h>
 #include "gw_fileio.h"
 #include "stack-c.h"
+#include "api_scilab.h"
 #include "MALLOC.h"
 #include "Scierror.h"
 #include "localization.h"
 #ifdef _MSC_VER
 #include "strdup_windows.h"
 #endif
+#include "freeArrayOfString.h"
 /*--------------------------------------------------------------------------*/
 int sci_fullpath(char *fname,unsigned long fname_len)
 {
-       Rhs=Max(Rhs,0);
-       CheckRhs(1,1) ;
-       CheckLhs(0,1) ;
+    SciErr sciErr;
+    int *piAddressVarOne = NULL;
+    char **pStVarOne = NULL;
+    int mOne = 0, nOne = 0;
+    int mnOne = 0;
 
-       if (GetType(1) == sci_strings)
-       {
-               static int l1,n1,m1;
-               char *relPath = NULL;
-               char fullpath[PATH_MAX*4];
+    char **pStFullPath = NULL;
+    int i = 0;
 
-               GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);
-               /* Bug 3089 */
-               relPath = cstk(l1);
+    Rhs = Max(Rhs, 0);
+    CheckRhs(1,1);
+    CheckLhs(0,1);
 
-               if( get_full_path( fullpath, relPath, PATH_MAX*4 ) != NULL )
-               {
-                       char *Output = strdup(fullpath);
+    sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
+    if(sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return 0;
+    }
 
-                       n1=1;
-                       CreateVarFromPtr( Rhs+1,STRING_DATATYPE,(m1=(int)strlen(Output), &m1),&n1,&Output);
-                       LhsVar(1) = Rhs+1;
-                       
-                       if (Output) {FREE(Output);Output=NULL;}
+    if (!isStringType(pvApiCtx, piAddressVarOne))
+    {
+        if (isEmptyMatrix(pvApiCtx, piAddressVarOne))
+        {
+            createEmptyMatrix(pvApiCtx, Rhs + 1);
+            LhsVar(1) = Rhs + 1;
+            PutLhsVar()
+        }
+        else
+        {
+            Scierror(999,_("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
+        }
+        return 0;
+    }
 
-            PutLhsVar();       
-               }
-               else
-               {
-                       Scierror(999,_("%s: Wrong value for input argument #%d: '%s' is an invalid path.\n"),fname,1,relPath);
-               }
-       }
-       else
-       {
-               Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,1);
-       }
+    if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarOne, &mOne, &nOne, &pStVarOne) != 0)
+    {
+        Scierror(999, _("%s: No more memory.\n"), fname);
+        return 0;
+    }
 
-       return 0;
+    mnOne = mOne * nOne;
+    pStFullPath = (char**)MALLOC(sizeof(char*) * mnOne);
+    if (pStFullPath == NULL)
+    {
+        freeAllocatedMatrixOfString(mOne, nOne, pStVarOne);
+        Scierror(999, _("%s: No more memory.\n"), fname);
+        return 0;
+    }
+
+    for (i = 0; i < mnOne; i++)
+    {
+        char fullpathtmp[PATH_MAX*4];
+        strcpy(fullpathtmp, "");
+        if( get_full_path(fullpathtmp, pStVarOne[i], PATH_MAX*4 ) != NULL )
+        {
+            pStFullPath[i] = strdup(fullpathtmp);
+        }
+        else
+        {
+            Scierror(999,_("%s: Wrong value for input argument #%d: '%s' is an invalid path.\n"),fname,1, pStVarOne[i]);
+            freeAllocatedMatrixOfString(mOne, nOne, pStVarOne);
+            freeArrayOfString(pStFullPath, mnOne);
+            return 0;
+        }
+    }
+
+    freeAllocatedMatrixOfString(mOne, nOne, pStVarOne);
+    sciErr = createMatrixOfString(pvApiCtx, Rhs + 1 , mOne, nOne, pStFullPath);
+    freeArrayOfString(pStFullPath, mnOne);
+
+    if(sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return 0;
+    }
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
 
+
index e5eed2b..776337c 100644 (file)
@@ -33,3 +33,6 @@ r2 = fullpath(REF2);
 assert_checkequal(r2, REF2);
 r3 = fullpath(REF3);
 assert_checkequal(r3, REF3);
+REF_M = [REF1, REF2, REF3];
+M = ['../../test1.txt', '../test2.txt', 'test3.txt'];
+assert_checkequal(REF_M, REF_M);
index 7f87df9..55697b1 100644 (file)
@@ -47,3 +47,7 @@ assert_checkequal(r2, REF2);
 r3 = fullpath(REF3);
 assert_checkequal(r3, REF3);
 
+REF_M = [REF1, REF2, REF3];
+M = ['../../test1.txt', '../test2.txt', 'test3.txt'];
+assert_checkequal(REF_M, REF_M);
+
index 1a017f0..ef92585 100644 (file)
@@ -2,7 +2,7 @@
 // Copyright (C) 2008 INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
 // Copyright (C) 2008-2010 DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
 // Copyright (C) 2009 DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
-// Copyright (C) 2010 DIGITEO - Allan CORNET
+// Copyright (C) 2010 - 2011 DIGITEO - 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
@@ -227,30 +227,22 @@ function generated_files = xmltoformat(output_format,dirs,titles,directory_langu
 
     // Convert paths into absolute paths
     // ---------------------------------------------------------------------
-
-    for k=1:size(dirs,'*');
-        if ~isdir(dirs(k)) then
-            error(msprintf(gettext("%s: Directory %s does not exist or read access denied."),"xmltoformat",dirs(k)));
+    function dir_modified = checkAndConvertDir(dirs_path)
+      dir_modified = [];
+      if (dirs_path <> []) then
+        if ~and(isdir(dirs_path)) then
+          notDirIdx = find(isdir(dirs_path) == %F);
+          error(msprintf(gettext("%s: Directory %s does not exist or read access denied."),"xmltoformat", dirs_path(notDirIdx(1))));
         end
-        dirs(k) = fullpath(dirs(k));
-    end
-
+        dir_modified = fullpath(dirs_path);
+      end
+    endfunction
+    
+    dirs = checkAndConvertDir(dirs);
 
     if all_scilab_help then
-
-        for k=1:size(dirs_m,'*');
-            if ~isdir(dirs_m(k)) then
-                error(msprintf(gettext("%s: Directory %s does not exist or read access denied."),"xmltoformat",dirs_m(k)));
-            end
-            dirs_m(k) = fullpath(dirs_m(k));
-        end
-
-        for k=1:size(dirs_c,'*');
-            if ~isdir(dirs_c(k)) then
-                error(msprintf(gettext("%s: Directory %s does not exist or read access denied."),"xmltoformat",dirs_c(k)));
-            end
-            dirs_c(k) = fullpath(dirs_c(k));
-        end
+        dirs_m = checkAndConvertDir(dirs_m);
+        dirs_c = checkAndConvertDir(dirs_c);
     end
 
     // =========================================================================