loadlib fixed about path file 63/17163/2
Cedric Delamarre [Fri, 4 Sep 2015 12:27:44 +0000 (14:27 +0200)]
test_run functions bug_6549
test_run functions bug_6550

Change-Id: I1e3ca8052e0eaee63795b7d435c8e0a72bca9bcf

scilab/modules/ast/src/cpp/types/library.cpp
scilab/modules/functions/tests/nonreg_tests/bug_6549.dia.ref
scilab/modules/functions/tests/nonreg_tests/bug_6549.tst
scilab/modules/functions/tests/nonreg_tests/bug_6550.dia.ref
scilab/modules/functions/tests/nonreg_tests/bug_6550.tst
scilab/modules/io/src/cpp/loadlib.cpp

index c3012a0..c49c69f 100644 (file)
@@ -55,7 +55,9 @@ Library::~Library()
 bool Library::toString(std::wostringstream& ostr)
 {
     wchar_t output[1024] = {0};
-    os_swprintf(output, 1024, _W("Functions files location : %s.\n").c_str(), m_wstPath.c_str());
+    char* str = wide_string_to_UTF8(m_wstPath.c_str());
+    os_swprintf(output, 1024, _W("Functions files location : %s.\n").c_str(), str);
+    FREE(str);
 
     ostr << output << std::endl;
 
index b2712e8..cc36eab 100644 (file)
@@ -12,6 +12,7 @@
 // <-- Short Description -->
 // genlib function had a behavior which was not consistent with the load function.
 // =============================================================================
+// <-- CLI SHELL MODE -->
 f = [
 "function titi()"
 "  disp(''titi'');"
@@ -27,52 +28,37 @@ f = [
 ""
 ];
 cd TMPDIR;
-mkdir('bug_6549');
-cd('bug_6549'); 
-mputl(f,'toto.sci');
-if genlib('bug_6549lib',TMPDIR + '/bug_6549') <> %t then bugmes();quit;end;
+mkdir("bug_6549");
+cd("bug_6549");
+mputl(f,"toto.sci");
+if genlib("bug_6549lib",TMPDIR + "/bug_6549") <> %t then bugmes();quit;end;
 // =============================================================================
-ierr = execstr('toto','errcatch');
- toto   
-if ierr <> 0 then bugmes();quit;end
-ierr = execstr('titi','errcatch');
- titi   
-if ierr <> 0 then bugmes();quit;end
-ierr = execstr('tata','errcatch');
- tata   
+ierr = execstr("toto","errcatch");
+ toto
 if ierr <> 0 then bugmes();quit;end
+ierr = execstr("titi","errcatch");
+if ierr == 0 then bugmes();quit;end
+ierr = execstr("tata","errcatch");
+if ierr == 0 then bugmes();quit;end
 clear bug_6549lib titi toto tata ierr;
 // =============================================================================
-load(TMPDIR + '/bug_6549/lib');
-ierr = execstr('toto','errcatch');
- toto   
-if ierr <> 0 then bugmes();quit;end
-ierr = execstr('titi','errcatch');
- titi   
-if ierr <> 0 then bugmes();quit;end
-ierr = execstr('tata','errcatch');
- tata   
+load(TMPDIR + "/bug_6549/lib");
+ierr = execstr("toto","errcatch");
+ toto
 if ierr <> 0 then bugmes();quit;end
+ierr = execstr("titi","errcatch");
+if ierr == 0 then bugmes();quit;end
+ierr = execstr("tata","errcatch");
+if ierr == 0 then bugmes();quit;end
 clear bug_6549lib titi toto tata ierr;
 // =============================================================================
-bug_6549lib = lib(TMPDIR + '/bug_6549');
-ierr = execstr('toto','errcatch');
- toto   
-if ierr <> 0 then bugmes();quit;end
-ierr = execstr('titi','errcatch');
- titi   
-if ierr <> 0 then bugmes();quit;end
-ierr = execstr('tata','errcatch');
- tata   
+bug_6549lib = lib(TMPDIR + "/bug_6549");
+ierr = execstr("toto","errcatch");
+ toto
 if ierr <> 0 then bugmes();quit;end
+ierr = execstr("titi","errcatch");
+if ierr == 0 then bugmes();quit;end
+ierr = execstr("tata","errcatch");
+if ierr == 0 then bugmes();quit;end
 clear bug_6549lib titi toto tata ierr;
 // =============================================================================
index 51f9967..e65ae9d 100644 (file)
@@ -36,26 +36,26 @@ if genlib("bug_6549lib",TMPDIR + "/bug_6549") <> %t then pause,end;
 ierr = execstr("toto","errcatch");
 if ierr <> 0 then pause,end
 ierr = execstr("titi","errcatch");
-if ierr <> 0 then pause,end
+if ierr == 0 then pause,end
 ierr = execstr("tata","errcatch");
-if ierr <> 0 then pause,end
+if ierr == 0 then pause,end
 clear bug_6549lib titi toto tata ierr;
 // =============================================================================
 load(TMPDIR + "/bug_6549/lib");
 ierr = execstr("toto","errcatch");
 if ierr <> 0 then pause,end
 ierr = execstr("titi","errcatch");
-if ierr <> 0 then pause,end
+if ierr == 0 then pause,end
 ierr = execstr("tata","errcatch");
-if ierr <> 0 then pause,end
+if ierr == 0 then pause,end
 clear bug_6549lib titi toto tata ierr;
 // =============================================================================
 bug_6549lib = lib(TMPDIR + "/bug_6549");
 ierr = execstr("toto","errcatch");
 if ierr <> 0 then pause,end
 ierr = execstr("titi","errcatch");
-if ierr <> 0 then pause,end
+if ierr == 0 then pause,end
 ierr = execstr("tata","errcatch");
-if ierr <> 0 then pause,end
+if ierr == 0 then pause,end
 clear bug_6549lib titi toto tata ierr;
 // =============================================================================
index 8b717df..324b97f 100644 (file)
 //
 // <-- Short Description -->
 // lib(".") used relative path in library variable created
+// <-- CLI SHELL MODE -->
 // =============================================================================
-function z = myplus(x, y), z = x + y,endfunction
-function z = yourplus(x, y), x = x - y,endfunction
-// =============================================================================
+f = [
+"function bug_6550()"
+"  1+1;"
+"endfunction"
+""
+];
 cd TMPDIR;
-mkdir('bug_6550');
-libdir = TMPDIR + '/bug_6550';
-warning("off");
-save(libdir + '/myplus.bin', myplus);
-save(libdir + '/yourplus.bin', yourplus);
-//create the name file
-mputl(['myplus';'yourplus'], libdir + '/names');
+mkdir("bug_6550");
+cd("bug_6550");
+mputl(f,"bug_6550.sci");
+if genlib("bug_6550lib",TMPDIR + "/bug_6550") <> %t then bugmes();quit;end;
 // =============================================================================
-cd(libdir);
-AAlib = lib('.');
-[f, p] = libraryinfo('AAlib');
-if pathconvert(p, %f, %f) <> pathconvert(libdir, %f, %f) then bugmes();quit;end
+AAlib = lib(".");
+[f, p] = libraryinfo("AAlib");
+if pathconvert(p, %f, %f) <> pathconvert(pwd(), %f, %f) then bugmes();quit;end
 // =============================================================================
-BBlib = lib(libdir + '/../bug_6550/../bug_6550');
-[f, p] = libraryinfo('BBlib');
-if pathconvert(p, %f, %f) <> pathconvert(libdir, %f, %f) then bugmes();quit;end
+BBlib = lib(pwd() + "/../bug_6550/../bug_6550");
+[f, p] = libraryinfo("BBlib");
+if pathconvert(p, %f, %f) <> pathconvert(pwd(), %f, %f) then bugmes();quit;end
 // =============================================================================
index 0653542..ac298d7 100644 (file)
 // lib(".") used relative path in library variable created
 // <-- CLI SHELL MODE -->
 // =============================================================================
-function z = myplus(x, y), z = x + y,endfunction
-function z = yourplus(x, y), x = x - y,endfunction
-// =============================================================================
+f = [
+"function bug_6550()"
+"  1+1;"
+"endfunction"
+""
+];
 cd TMPDIR;
 mkdir("bug_6550");
-libdir = TMPDIR + "/bug_6550";
-warning("off");
-save(libdir + "/myplus.bin", "myplus");
-save(libdir + "/yourplus.bin", "yourplus");
-//create the name file
-mputl(["myplus";"yourplus"], libdir + "/names");
+cd("bug_6550");
+mputl(f,"bug_6550.sci");
+if genlib("bug_6550lib",TMPDIR + "/bug_6550") <> %t then pause,end;
 // =============================================================================
-cd(libdir);
 AAlib = lib(".");
 [f, p] = libraryinfo("AAlib");
-if pathconvert(p, %f, %f) <> pathconvert(libdir, %f, %f) then pause,end
+if pathconvert(p, %f, %f) <> pathconvert(pwd(), %f, %f) then pause,end
 // =============================================================================
-BBlib = lib(libdir + "/../bug_6550/../bug_6550");
+BBlib = lib(pwd() + "/../bug_6550/../bug_6550");
 [f, p] = libraryinfo("BBlib");
-if pathconvert(p, %f, %f) <> pathconvert(libdir, %f, %f) then pause,end
+if pathconvert(p, %f, %f) <> pathconvert(pwd(), %f, %f) then pause,end
 // =============================================================================
index 9a9b992..f52a622 100644 (file)
@@ -21,6 +21,7 @@ extern "C"
 #include "sci_malloc.h"
 #include "os_string.h"
 #include "expandPathVariable.h"
+#include "fullpath.h"
 #include "PATH_MAX.h"
 #include <libxml/xpath.h>
 #include <libxml/xmlreader.h>
@@ -36,11 +37,15 @@ types::Library* loadlib(const std::wstring& _wstXML, int* err, bool _isFile, boo
 
     wchar_t* pwstPathLib = expandPathVariableW((wchar_t*)_wstXML.c_str());
 
-    std::wstring wstOriginalPath(_wstXML);
-    std::wstring wstFile(pwstPathLib);
-    std::wstring wstPath(pwstPathLib);
+    wchar_t* pwstTemp = (wchar_t*)MALLOC(sizeof(wchar_t) * (PATH_MAX * 2));
+    get_full_pathW(pwstTemp, pwstPathLib, PATH_MAX * 2);
     FREE(pwstPathLib);
 
+    std::wstring wstOriginalPath(pwstTemp);
+    std::wstring wstFile(pwstTemp);
+    std::wstring wstPath(pwstTemp);
+    FREE(pwstTemp);
+
     if (_isFile)
     {
         //remove / or \ at the end
@@ -59,7 +64,6 @@ types::Library* loadlib(const std::wstring& _wstXML, int* err, bool _isFile, boo
         wstFile += L"lib";
     }
 
-
     std::wstring libname;
     MacroInfoList lst;
     *err = parseLibFile(wstFile, lst, libname);
@@ -77,7 +81,7 @@ types::Library* loadlib(const std::wstring& _wstXML, int* err, bool _isFile, boo
     }
 
 
-    for (const auto& macro : lst)
+    for (const auto & macro : lst)
     {
         lib->add(macro.second.name, new types::MacroFile(macro.second.name, stFilename + macro.second.file, libname));
     }