From a1530ab1b88cd8e4bfaeb8d52ceb57ec591ae371 Mon Sep 17 00:00:00 2001 From: Benjamin Bihler Date: Thu, 28 Apr 2016 14:18:35 +0300 Subject: [PATCH] 0027433: Opening/Saving OCAF Documents With Own Document Format Does Not Work Modified Load(...) method of Resource_Manager.cxx to print file names correctly. Removed appending (empty) file name to directory name, since this is not necessary and leads to a Standard_OutOfRange failure in TCollection_AsciiString. Appending file name is done, but only if the name is not empty. Added test case --- src/Resource/Resource_Manager.cxx | 13 +++++++++---- tests/bugs/caf/bug27433 | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100755 tests/bugs/caf/bug27433 diff --git a/src/Resource/Resource_Manager.cxx b/src/Resource/Resource_Manager.cxx index 8186eb9178..73a5d580a6 100644 --- a/src/Resource/Resource_Manager.cxx +++ b/src/Resource/Resource_Manager.cxx @@ -113,9 +113,9 @@ void Resource_Manager::Load(TCollection_AsciiString& aPath, { Resource_KindOfLine aKind; TCollection_AsciiString Token1, Token2; - TCollection_AsciiString Directory, Name; - TCollection_AsciiString FileName; - OSD_File File = OSD_Path(aPath); + OSD_Path Path(aPath); + OSD_File File = Path; + TCollection_AsciiString FileName = Path.Name(); File.Open(OSD_ReadOnly,OSD_Protection()); if (File.Failed()) { if (myVerbose) @@ -486,7 +486,12 @@ void Resource_Manager::GetResourcePath (TCollection_AsciiString& aPath, const St TCollection_AsciiString aResPath(dir); OSD_Path anOSDPath(aResPath); - anOSDPath.DownTrek(anOSDPath.Name()); + + if (!anOSDPath.Name().IsEmpty()) + { + anOSDPath.DownTrek(anOSDPath.Name()); + } + anOSDPath.SetName(aName); anOSDPath.SystemName(aPath); diff --git a/tests/bugs/caf/bug27433 b/tests/bugs/caf/bug27433 new file mode 100755 index 0000000000..72c21eb0ed --- /dev/null +++ b/tests/bugs/caf/bug27433 @@ -0,0 +1,21 @@ +puts "===========" +puts "OCC27433 Opening/Saving OCAF Documents With Own Document Format Does Not Work" +puts "===========" + +# make variable ends with "/" to get empty myName in OSD_Path +dsetenv "CSF_PluginDefaults" [dgetenv CSF_PluginDefaults]/ + +# Create simple document with some data +NewDocument Doc BinOcaf +SetInteger Doc 0:2 100 + +# Save the document +set aFile ${imagedir}/OCC27433-[file tail [info script]].cbf +file delete ${aFile} +puts ${aFile} +catch {SaveAs Doc ${aFile}} +if { ![file exists ${aFile}] } { + puts "Error: Can not save the file with path to plugins ended with slash" +} + +Close Doc -- 2.20.1