1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0031546: Application Framework - Memory leak (100 bytes) on Load / Close OCAF document

Class Standard_BaseDriver is inherited from Standard_Transient, its descendants are updated accordingly.
Handle is used to manipulate objects of this class and its descendants (instead of references or raw pointers) to ensure automatic destruction.

Added test bugs caf bug31546

Related:
- Standard_OVERRIDE is added in declarations of virtual methods in descendants of Storage_BaseDriver
- Methods operator << and operator >> are removed in descendants of Storage_BaseDriver (they repeat the same methods inherited from the base class)
- Typedef PCDM_BaseDriverPointer is marked as deprecated
- Unused class DDI_Ostream is removed
- Private field Standard_Transient::count is renamed to myRefCount_ to avoid compiler warnings if the same name is used within the scope of a descendant class
- Output of meaningful error messages is restored in DRAW commands fsdread and fsdwrite
This commit is contained in:
abv
2020-05-04 22:25:03 +03:00
committed by bugmaster
parent dcc4e908c2
commit 39c8dc708f
54 changed files with 664 additions and 2475 deletions

View File

@@ -55,9 +55,6 @@
#include <TDF_RelocationTable.hxx>
#include <TDF_Tool.hxx>
#include <DDF_IOStream.hxx>
//=======================================================================
//function : Children
//purpose : Returns a list of sub-label entries.
@@ -167,66 +164,6 @@ static Standard_Integer DDF_ForgetAttribute(Draw_Interpretor& di,
return 0;
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// save/restore & Store/Retrieve commands
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//==========================================================
// ErrorMessage
//==========================================================
void ErrorMessage (const Storage_Error n)
{
std::cout << "Storage Error: " << std::flush;
switch (n) {
case Storage_VSOk:
std::cout << "no problem" << std::endl;
break;
case Storage_VSOpenError:
std::cout << "while opening the stream" << std::endl;
break;
case Storage_VSModeError:
std::cout << "the stream is opened with a wrong mode for operation " << std::endl;
break;
case Storage_VSCloseError:
std::cout << "while closing the stream" << std::endl;
break;
case Storage_VSAlreadyOpen:
std::cout << "stream is already opened" << std::endl;
break;
case Storage_VSNotOpen:
std::cout << "stream not opened" << std::endl;
break;
case Storage_VSSectionNotFound:
std::cout << "the section is not found" << std::endl;
break;
case Storage_VSWriteError:
std::cout << "error during writing" << std::endl;
break;
case Storage_VSFormatError:
std::cout << "wrong format error occured while reading" << std::endl;
break;
case Storage_VSUnknownType:
std::cout << "try to read an unknown type" << std::endl;
break;
case Storage_VSTypeMismatch:
std::cout << "try to read a wrong primitive type (read a char while expecting a real)" << std::endl;
break;
case Storage_VSInternalError:
std::cout << "internal error" << std::endl;
break;
case Storage_VSExtCharParityError: std::cout << "parity error" << std::endl;
break;
default:
std::cout << "unknown error code" << std::endl;
break;
}
}
//=======================================================================
//function : DDF_SetTagger
//purpose : SetTagger (DF, entry)

File diff suppressed because it is too large Load Diff

View File

@@ -1,228 +0,0 @@
// Created on: 1997-08-22
// Created by: DAUTRY Philippe
// Copyright (c) 1997-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
// This file has been written using FSD_File.hxx as template.
// This is a specific adaptation for Draw use (save & restore commands).
// It is not sure at all this code is portable on any other plateform than
// SUN OS. Don't use it anywhere else.
// Thanks for comprehension. (22 august 97)
#ifndef DDF_IOStream_HeaderFile
#define DDF_IOStream_HeaderFile
#include <stdio.h>
#include <Storage_BaseDriver.hxx>
#include <Storage_Error.hxx>
#include <Storage_OpenMode.hxx>
#include <Storage_Position.hxx>
class Storage_StreamTypeMismatchError;
class Storage_StreamFormatError;
class Storage_StreamWriteError;
class Storage_StreamExtCharParityError;
#include <TColStd_SequenceOfExtendedString.hxx>
class DDF_IOStream : public Storage_BaseDriver {
public:
// Methods PUBLIC
//
DDF_IOStream();
Storage_Error Open(const TCollection_AsciiString& aName,const Storage_OpenMode aMode) ;
Storage_Error Open(std::istream* anIStream) ;
Storage_Error Open(std::ostream* anOStream) ;
Standard_Boolean IsEnd() ;
Storage_Position Tell() { return -1; }
static Storage_Error IsGoodFileType(std::istream* anIStream) ;
Storage_Error BeginWriteInfoSection() ;
void WriteInfo(const Standard_Integer nbObj,const TCollection_AsciiString& dbVersion,const TCollection_AsciiString& date,const TCollection_AsciiString& schemaName,const TCollection_AsciiString& schemaVersion,const TCollection_ExtendedString& appName,const TCollection_AsciiString& appVersion,const TCollection_ExtendedString& objectType,const TColStd_SequenceOfAsciiString& userInfo) ;
Storage_Error EndWriteInfoSection() ;
Storage_Error BeginReadInfoSection() ;
void ReadInfo(Standard_Integer& nbObj,TCollection_AsciiString& dbVersion,TCollection_AsciiString& date,TCollection_AsciiString& schemaName,TCollection_AsciiString& schemaVersion,TCollection_ExtendedString& appName,TCollection_AsciiString& appVersion,TCollection_ExtendedString& objectType,TColStd_SequenceOfAsciiString& userInfo) ;
void ReadCompleteInfo (Standard_IStream& theIStream, Handle(Storage_Data)& theData);
Storage_Error EndReadInfoSection() ;
Storage_Error BeginWriteCommentSection() ;
void WriteComment(const TColStd_SequenceOfExtendedString& userComments) ;
Storage_Error EndWriteCommentSection() ;
Storage_Error BeginReadCommentSection() ;
void ReadComment(TColStd_SequenceOfExtendedString& userComments) ;
Storage_Error EndReadCommentSection() ;
Storage_Error BeginWriteTypeSection() ;
void SetTypeSectionSize(const Standard_Integer aSize) ;
void WriteTypeInformations(const Standard_Integer typeNum,const TCollection_AsciiString& typeName) ;
Storage_Error EndWriteTypeSection() ;
Storage_Error BeginReadTypeSection() ;
Standard_Integer TypeSectionSize() ;
void ReadTypeInformations(Standard_Integer& typeNum,TCollection_AsciiString& typeName) ;
Storage_Error EndReadTypeSection() ;
Storage_Error BeginWriteRootSection() ;
void SetRootSectionSize(const Standard_Integer aSize) ;
void WriteRoot(const TCollection_AsciiString& rootName,const Standard_Integer aRef,const TCollection_AsciiString& aType) ;
Storage_Error EndWriteRootSection() ;
Storage_Error BeginReadRootSection() ;
Standard_Integer RootSectionSize() ;
void ReadRoot(TCollection_AsciiString& rootName,Standard_Integer& aRef,TCollection_AsciiString& aType) ;
Storage_Error EndReadRootSection() ;
Storage_Error BeginWriteRefSection() ;
void SetRefSectionSize(const Standard_Integer aSize) ;
void WriteReferenceType(const Standard_Integer reference,const Standard_Integer typeNum) ;
Storage_Error EndWriteRefSection() ;
Storage_Error BeginReadRefSection() ;
Standard_Integer RefSectionSize() ;
void ReadReferenceType(Standard_Integer& reference,Standard_Integer& typeNum) ;
Storage_Error EndReadRefSection() ;
Storage_Error BeginWriteDataSection() ;
void WritePersistentObjectHeader(const Standard_Integer aRef,const Standard_Integer aType) ;
void BeginWritePersistentObjectData() ;
void BeginWriteObjectData() ;
void EndWriteObjectData() ;
void EndWritePersistentObjectData() ;
Storage_Error EndWriteDataSection() ;
Storage_Error BeginReadDataSection() ;
void ReadPersistentObjectHeader(Standard_Integer& aRef,Standard_Integer& aType) ;
void BeginReadPersistentObjectData() ;
void BeginReadObjectData() ;
void EndReadObjectData() ;
void EndReadPersistentObjectData() ;
Storage_Error EndReadDataSection() ;
void SkipObject() ;
Storage_BaseDriver& PutReference(const Standard_Integer aValue) ;
Storage_BaseDriver& PutCharacter(const Standard_Character aValue) ;
Storage_BaseDriver& operator <<(const Standard_Character aValue)
{
return PutCharacter(aValue);
}
Storage_BaseDriver& PutExtCharacter(const Standard_ExtCharacter aValue) ;
Storage_BaseDriver& operator <<(const Standard_ExtCharacter aValue)
{
return PutExtCharacter(aValue);
}
Storage_BaseDriver& PutInteger(const Standard_Integer aValue) ;
Storage_BaseDriver& operator <<(const Standard_Integer aValue)
{
return PutInteger(aValue);
}
Storage_BaseDriver& PutBoolean(const Standard_Boolean aValue) ;
Storage_BaseDriver& operator <<(const Standard_Boolean aValue)
{
return PutBoolean(aValue);
}
Storage_BaseDriver& PutReal(const Standard_Real aValue) ;
Storage_BaseDriver& operator <<(const Standard_Real aValue)
{
return PutReal(aValue);
}
Storage_BaseDriver& PutShortReal(const Standard_ShortReal aValue) ;
Storage_BaseDriver& operator <<(const Standard_ShortReal aValue)
{
return PutShortReal(aValue);
}
Storage_BaseDriver& GetReference(Standard_Integer& aValue) ;
Storage_BaseDriver& GetCharacter(Standard_Character& aValue) ;
Storage_BaseDriver& operator >>(Standard_Character& aValue)
{
return GetCharacter(aValue);
}
Storage_BaseDriver& GetExtCharacter(Standard_ExtCharacter& aValue) ;
Storage_BaseDriver& operator >>(Standard_ExtCharacter& aValue)
{
return GetExtCharacter(aValue);
}
Storage_BaseDriver& GetInteger(Standard_Integer& aValue) ;
Storage_BaseDriver& operator >>(Standard_Integer& aValue)
{
return GetInteger(aValue);
}
Storage_BaseDriver& GetBoolean(Standard_Boolean& aValue) ;
Storage_BaseDriver& operator >>(Standard_Boolean& aValue)
{
return GetBoolean(aValue);
}
Storage_BaseDriver& GetReal(Standard_Real& aValue) ;
Storage_BaseDriver& operator >>(Standard_Real& aValue)
{
return GetReal(aValue);
}
Storage_BaseDriver& GetShortReal(Standard_ShortReal& aValue) ;
Storage_BaseDriver& operator >>(Standard_ShortReal& aValue)
{
return GetShortReal(aValue);
}
Storage_Error Close() ;
void Destroy() ;
~DDF_IOStream()
{
Destroy();
}
protected:
// Methods PROTECTED
//
void ReadLine(TCollection_AsciiString& buffer) ;
void ReadWord(TCollection_AsciiString& buffer) ;
void ReadExtendedLine(TCollection_ExtendedString& buffer) ;
void WriteExtendedLine(const TCollection_ExtendedString& buffer) ;
void ReadChar(TCollection_AsciiString& buffer,const Standard_Integer rsize) ;
void ReadString(TCollection_AsciiString& buffer) ;
void FlushEndOfLine() ;
Storage_Error FindTag(const Standard_CString aTag) ;
// Fields PROTECTED
//
private:
// Methods PRIVATE
//
static Standard_CString MagicNumber() ;
// Fields PRIVATE
//
//FSD_FStream myStream;
std::istream* myIStream;
std::ostream* myOStream;
};
// other inline functions and methods (like "C++: function call" methods)
//
#endif

View File

@@ -9,8 +9,6 @@ DDF_BrowserCommands.cxx
DDF_Data.cxx
DDF_Data.hxx
DDF_DataCommands.cxx
DDF_IOStream.cxx
DDF_IOStream.hxx
DDF_ListIteratorOfTransactionStack.hxx
DDF_Transaction.cxx
DDF_Transaction.hxx