0031546: Application Framework - Memory leak (100 bytes) on Load / Close OCAF document
[occt.git] / src / PCDM / PCDM_ReadWriter.cxx
index e8304bf..f3cc807 100644 (file)
@@ -45,7 +45,7 @@ static TCollection_ExtendedString TryXmlDriverType (Standard_IStream& theIStream
 //purpose  : 
 //=======================================================================
 
-void PCDM_ReadWriter::Open (Storage_BaseDriver&                 aDriver,
+void PCDM_ReadWriter::Open (const Handle(Storage_BaseDriver)&   aDriver,
                             const TCollection_ExtendedString&   aFileName,
                             const Storage_OpenMode              aMode)
 {
@@ -113,7 +113,7 @@ TCollection_ExtendedString PCDM_ReadWriter::FileFormat
 {
   TCollection_ExtendedString theFormat;
   
-  PCDM_BaseDriverPointer theFileDriver;
+  Handle(Storage_BaseDriver) theFileDriver;
 
   // conversion to UTF-8 is done inside
   TCollection_AsciiString theFileName (aFileName);
@@ -126,10 +126,10 @@ TCollection_ExtendedString PCDM_ReadWriter::FileFormat
   try {
     OCC_CATCH_SIGNALS
     
-    Open(*theFileDriver,aFileName,Storage_VSRead);
+    Open(theFileDriver,aFileName,Storage_VSRead);
     theFileIsOpen=Standard_True;
     Storage_HeaderData hd;
-    hd.Read (*theFileDriver);
+    hd.Read (theFileDriver);
     const TColStd_SequenceOfAsciiString &refUserInfo = hd.UserInfo();
     Standard_Boolean found=Standard_False;
     for (Standard_Integer i =1; !found && i<=  refUserInfo.Length() ; i++) {
@@ -142,16 +142,16 @@ TCollection_ExtendedString PCDM_ReadWriter::FileFormat
     if (!found)
     {
       Storage_TypeData td;
-      td.Read (*theFileDriver);
+      td.Read (theFileDriver);
       theFormat = td.Types()->Value(1);
     }
   }
   catch (Standard_Failure const&) {}
-
   
-  if(theFileIsOpen)theFileDriver->Close();
-
-  delete theFileDriver;
+  if(theFileIsOpen)
+  {
+    theFileDriver->Close();
+  }
 
   return theFormat;
 }
@@ -165,7 +165,7 @@ TCollection_ExtendedString PCDM_ReadWriter::FileFormat (Standard_IStream& theISt
 {
   TCollection_ExtendedString aFormat;
 
-  Storage_BaseDriver* aFileDriver = 0L;
+  Handle(Storage_BaseDriver) aFileDriver;
   if (PCDM::FileDriverType (theIStream, aFileDriver) == PCDM_TOFD_XmlFile)
   {
     return ::TryXmlDriverType (theIStream);