mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
This patch is only known to work with OCE version 0.17.3 on mingw. It should not be used for any other purpose. It breaks all other OCE builds except mingw.
2535 lines
85 KiB
Diff
2535 lines
85 KiB
Diff
From af336de6fd7984b045b8e67c127c1d12f911cd66 Mon Sep 17 00:00:00 2001
|
|
From: Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
|
Date: Sun, 5 Mar 2017 13:46:16 +1100
|
|
Subject: [PATCH] Hack code to provide UTF8 filename support in MinGW
|
|
|
|
---
|
|
inc/FSD_CmpFile.hxx | 10 +-
|
|
inc/FSD_File.hxx | 13 +-
|
|
src/BRepTools/BRepTools.cxx | 14 +-
|
|
src/FSD/FSD_CmpFile.cxx | 326 +++++++++++++++------------
|
|
src/FSD/FSD_File.cxx | 356 +++++++++++++++++-------------
|
|
src/IGESControl/IGESControl_Writer.cxx | 7 +-
|
|
src/IGESSelect/IGESSelect_WorkLibrary.cxx | 7 +-
|
|
src/OSD/OSD_MAllocHook.cxx | 40 ++--
|
|
src/OSD/OSD_MAllocHook.hxx | 7 +-
|
|
src/OSD/OSD_OpenFile.cxx | 169 +++++++++-----
|
|
src/OSD/OSD_OpenFile.hxx | 65 +++---
|
|
src/StepSelect/StepSelect_WorkLibrary.cxx | 10 +-
|
|
src/VrmlAPI/VrmlAPI_Writer.cxx | 6 +-
|
|
13 files changed, 601 insertions(+), 429 deletions(-)
|
|
|
|
diff --git a/inc/FSD_CmpFile.hxx b/inc/FSD_CmpFile.hxx
|
|
index 57453a341..1351a026a 100644
|
|
--- a/inc/FSD_CmpFile.hxx
|
|
+++ b/inc/FSD_CmpFile.hxx
|
|
@@ -6,6 +6,7 @@
|
|
#ifndef _FSD_CmpFile_HeaderFile
|
|
#define _FSD_CmpFile_HeaderFile
|
|
|
|
+#include <iostream>
|
|
#include <Standard.hxx>
|
|
#include <Standard_DefineAlloc.hxx>
|
|
#include <Standard_Macro.hxx>
|
|
@@ -34,6 +35,7 @@ class TColStd_SequenceOfAsciiString;
|
|
class TColStd_SequenceOfExtendedString;
|
|
class Storage_BaseDriver;
|
|
class Standard_Type;
|
|
+class STREAM_WRAPPER;
|
|
|
|
|
|
|
|
@@ -236,10 +238,7 @@ public:
|
|
Standard_EXPORT Storage_Error Close() ;
|
|
|
|
Standard_EXPORT void Destroy() ;
|
|
-~FSD_CmpFile()
|
|
-{
|
|
- Destroy();
|
|
-}
|
|
+ ~FSD_CmpFile();
|
|
|
|
|
|
|
|
@@ -280,7 +279,8 @@ private:
|
|
Standard_EXPORT void RaiseError (const Handle(Standard_Type)& theFailure) ;
|
|
|
|
|
|
- FSD_FStream myStream;
|
|
+ STREAM_WRAPPER* m_wrapper;
|
|
+ std::iostream* myStream;
|
|
|
|
|
|
};
|
|
diff --git a/inc/FSD_File.hxx b/inc/FSD_File.hxx
|
|
index 7fc8f8788..b14a5fd37 100644
|
|
--- a/inc/FSD_File.hxx
|
|
+++ b/inc/FSD_File.hxx
|
|
@@ -6,6 +6,7 @@
|
|
#ifndef _FSD_File_HeaderFile
|
|
#define _FSD_File_HeaderFile
|
|
|
|
+#include <iostream>
|
|
#include <Standard.hxx>
|
|
#include <Standard_DefineAlloc.hxx>
|
|
#include <Standard_Macro.hxx>
|
|
@@ -32,7 +33,7 @@ class TCollection_ExtendedString;
|
|
class TColStd_SequenceOfAsciiString;
|
|
class TColStd_SequenceOfExtendedString;
|
|
class Storage_BaseDriver;
|
|
-
|
|
+class STREAM_WRAPPER;
|
|
|
|
|
|
//! A general driver which defines as a file, the
|
|
@@ -253,10 +254,8 @@ public:
|
|
Standard_EXPORT Storage_Error Close() ;
|
|
|
|
Standard_EXPORT void Destroy() ;
|
|
-~FSD_File()
|
|
-{
|
|
- Destroy();
|
|
-}
|
|
+
|
|
+ ~FSD_File();
|
|
|
|
|
|
|
|
@@ -295,8 +294,8 @@ private:
|
|
Standard_EXPORT static Standard_CString MagicNumber() ;
|
|
|
|
|
|
- FSD_FStream myStream;
|
|
-
|
|
+ STREAM_WRAPPER* m_wrapper;
|
|
+ std::iostream* myStream;
|
|
|
|
};
|
|
|
|
diff --git a/src/BRepTools/BRepTools.cxx b/src/BRepTools/BRepTools.cxx
|
|
index ec467ee53..33f562676 100644
|
|
--- a/src/BRepTools/BRepTools.cxx
|
|
+++ b/src/BRepTools/BRepTools.cxx
|
|
@@ -611,9 +611,8 @@ Standard_Boolean BRepTools::Write(const TopoDS_Shape& Sh,
|
|
const Standard_CString File,
|
|
const Handle(Message_ProgressIndicator)& PR)
|
|
{
|
|
- ofstream os;
|
|
- OSD_OpenStream(os, File, ios::out);
|
|
- if (!os.rdbuf()->is_open()) return Standard_False;
|
|
+ OPEN_STREAM( os, File, ios::out );
|
|
+ if( !IS_OPEN( os )) return Standard_False;
|
|
|
|
Standard_Boolean isGood = (os.good() && !os.eof());
|
|
if(!isGood)
|
|
@@ -632,7 +631,7 @@ Standard_Boolean BRepTools::Write(const TopoDS_Shape& Sh,
|
|
isGood = os.good();
|
|
|
|
errno = 0;
|
|
- os.close();
|
|
+ CLOSE_STREAM( os );
|
|
isGood = os.good() && isGood && !errno;
|
|
|
|
return isGood;
|
|
@@ -648,10 +647,9 @@ Standard_Boolean BRepTools::Read(TopoDS_Shape& Sh,
|
|
const BRep_Builder& B,
|
|
const Handle(Message_ProgressIndicator)& PR)
|
|
{
|
|
- filebuf fic;
|
|
- istream in(&fic);
|
|
- OSD_OpenFileBuf(fic,File,ios::in);
|
|
- if(!fic.is_open()) return Standard_False;
|
|
+ OPEN_ISTREAM( in, File );
|
|
+
|
|
+ if( !IS_OPEN( in ) ) return Standard_False;
|
|
|
|
BRepTools_ShapeSet SS(B);
|
|
SS.SetProgress(PR);
|
|
diff --git a/src/FSD/FSD_CmpFile.cxx b/src/FSD/FSD_CmpFile.cxx
|
|
index 102d0cc32..ecca0813f 100644
|
|
--- a/src/FSD/FSD_CmpFile.cxx
|
|
+++ b/src/FSD/FSD_CmpFile.cxx
|
|
@@ -14,6 +14,7 @@
|
|
|
|
#include <FSD_CmpFile.ixx>
|
|
#include <OSD.hxx>
|
|
+#include <OSD_OpenFile.hxx>
|
|
|
|
#include <Storage_StreamModeError.hxx>
|
|
#include <Storage_StreamUnknownTypeError.hxx>
|
|
@@ -42,7 +43,13 @@ const Standard_CString MAGICNUMBER = "CMPFILE";
|
|
|
|
FSD_CmpFile::FSD_CmpFile()
|
|
{
|
|
+ m_wrapper = new STREAM_WRAPPER;
|
|
+}
|
|
|
|
+FSD_CmpFile::~FSD_CmpFile()
|
|
+{
|
|
+ Destroy();
|
|
+ delete m_wrapper;
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -87,45 +94,22 @@ Storage_Error FSD_CmpFile::Open(const TCollection_AsciiString& aName,const Stora
|
|
|
|
if (OpenMode() == Storage_VSNone) {
|
|
|
|
-#if defined(_WNT32)
|
|
- TCollection_ExtendedString aWName(aName);
|
|
- if (aMode == Storage_VSRead) {
|
|
- myStream.open((const wchar_t*)aWName.ToExtString(),ios::in|ios::binary); // ios::nocreate is not portable
|
|
- }
|
|
- else if (aMode == Storage_VSWrite) {
|
|
- myStream.open((const wchar_t*)aWName.ToExtString(),ios::out|ios::binary);
|
|
- }
|
|
- else if (aMode == Storage_VSReadWrite) {
|
|
- myStream.open((const wchar_t*)aWName.ToExtString(),ios::in|ios::out|ios::binary);
|
|
- }
|
|
-#elif !defined(IRIX) && !defined(DECOSF1)
|
|
if (aMode == Storage_VSRead) {
|
|
- myStream.open(aName.ToCString(),ios::in|ios::binary); // ios::nocreate is not portable
|
|
+ myStream = m_wrapper->Open( aName.ToCString(), ios::in|ios::binary); // ios::nocreate is not portable
|
|
}
|
|
else if (aMode == Storage_VSWrite) {
|
|
- myStream.open(aName.ToCString(),ios::out|ios::binary);
|
|
+ myStream = m_wrapper->Open( aName.ToCString(), ios::out|ios::binary); // ios::nocreate is not portable
|
|
}
|
|
else if (aMode == Storage_VSReadWrite) {
|
|
- myStream.open(aName.ToCString(),ios::in|ios::out|ios::binary);
|
|
+ myStream = m_wrapper->Open( aName.ToCString(), ios::in|ios::out|ios::binary); // ios::nocreate is not portable
|
|
}
|
|
-#else
|
|
- if (aMode == Storage_VSRead) {
|
|
- myStream.open(aName.ToCString(),ios::in); // ios::nocreate is not portable
|
|
- }
|
|
- else if (aMode == Storage_VSWrite) {
|
|
- myStream.open(aName.ToCString(),ios::out);
|
|
- }
|
|
- else if (aMode == Storage_VSReadWrite) {
|
|
- myStream.open(aName.ToCString(),ios::in|ios::out);
|
|
- }
|
|
-#endif
|
|
|
|
- if (myStream.fail()) {
|
|
+ if ( !m_wrapper->IsOpen() ) {
|
|
result = Storage_VSOpenError;
|
|
}
|
|
else {
|
|
- myStream.precision(17);
|
|
- myStream.imbue (std::locale::classic()); // use always C locale
|
|
+ myStream->precision(17);
|
|
+ myStream->imbue (std::locale::classic()); // use always C locale
|
|
SetOpenMode(aMode);
|
|
}
|
|
}
|
|
@@ -142,7 +126,10 @@ Storage_Error FSD_CmpFile::Open(const TCollection_AsciiString& aName,const Stora
|
|
|
|
Standard_Boolean FSD_CmpFile::IsEnd()
|
|
{
|
|
- return myStream.eof();
|
|
+ if( NULL == myStream )
|
|
+ return true;
|
|
+
|
|
+ return myStream->eof();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -155,7 +142,8 @@ Storage_Error FSD_CmpFile::Close()
|
|
Storage_Error result = Storage_VSOk;
|
|
|
|
if (OpenMode() != Storage_VSNone) {
|
|
- myStream.close();
|
|
+ m_wrapper->Init();
|
|
+ myStream = NULL;
|
|
SetOpenMode(Storage_VSNone);
|
|
}
|
|
else {
|
|
@@ -218,7 +206,7 @@ void FSD_CmpFile::ReadLine(TCollection_AsciiString& buffer)
|
|
while (!IsEnd && !FSD_CmpFile::IsEnd()) {
|
|
Buffer[0] = '\0';
|
|
//myStream.get(Buffer,8192,'\n');
|
|
- myStream.getline(Buffer,8192,'\n');
|
|
+ myStream->getline(Buffer,8192,'\n');
|
|
for (Standard_Size lv = (strlen(Buffer)- 1); lv > 1 && (Buffer[lv] == '\r' || Buffer[lv] == '\n') ;lv--) {
|
|
Buffer[lv] = '\0';
|
|
}
|
|
@@ -256,6 +244,8 @@ void FSD_CmpFile::WriteExtendedLine(const TCollection_ExtendedString& buffer)
|
|
|
|
myStream << (char)0 << "\n";
|
|
#endif
|
|
+ if( NULL == myStream ) return;
|
|
+
|
|
Standard_ExtString extBuffer;
|
|
Standard_Integer i;
|
|
|
|
@@ -265,7 +255,7 @@ void FSD_CmpFile::WriteExtendedLine(const TCollection_ExtendedString& buffer)
|
|
PutExtCharacter(extBuffer[i]);
|
|
}
|
|
|
|
- myStream << "\n";
|
|
+ (*myStream) << "\n";
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -301,7 +291,7 @@ void FSD_CmpFile::ReadChar(TCollection_AsciiString& buffer, const Standard_Size
|
|
buffer.Clear();
|
|
|
|
while (!IsEnd() && (ccount < rsize)) {
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
buffer += c;
|
|
ccount++;
|
|
}
|
|
@@ -323,7 +313,7 @@ void FSD_CmpFile::ReadString(TCollection_AsciiString& buffer)
|
|
while (!IsEnd && !FSD_CmpFile::IsEnd()) {
|
|
Buffer[0] = '\0';
|
|
//myStream.get(Buffer,8192,'\n');
|
|
- myStream.getline(Buffer,8192,'\n');
|
|
+ myStream->getline(Buffer,8192,'\n');
|
|
for (Standard_Size lv = (strlen(Buffer)- 1); lv > 1 && (Buffer[lv] == '\r' || Buffer[lv] == '\n') ;lv--) {
|
|
Buffer[lv] = '\0';
|
|
}
|
|
@@ -364,7 +354,7 @@ void FSD_CmpFile::ReadWord(TCollection_AsciiString& buffer)
|
|
buffer.Clear();
|
|
|
|
while (!IsEnd && !FSD_CmpFile::IsEnd()) {
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
if ((c != ' ') && (c != '\n')) IsEnd = Standard_True;
|
|
}
|
|
|
|
@@ -380,7 +370,7 @@ void FSD_CmpFile::ReadWord(TCollection_AsciiString& buffer)
|
|
}
|
|
*tmpb = c;
|
|
tmpb++; i++;
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
if ((c == '\n') || (c == ' ')) IsEnd = Standard_True;
|
|
}
|
|
|
|
@@ -427,8 +417,9 @@ void FSD_CmpFile::SkipObject()
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutReference(const Standard_Integer aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -439,11 +430,12 @@ Storage_BaseDriver& FSD_CmpFile::PutReference(const Standard_Integer aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutCharacter(const Standard_Character aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
unsigned short i;
|
|
|
|
i = aValue;
|
|
- myStream << i << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << i << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -454,8 +446,9 @@ Storage_BaseDriver& FSD_CmpFile::PutCharacter(const Standard_Character aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutExtCharacter(const Standard_ExtCharacter aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -466,8 +459,9 @@ Storage_BaseDriver& FSD_CmpFile::PutExtCharacter(const Standard_ExtCharacter aVa
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutInteger(const Standard_Integer aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -478,8 +472,9 @@ Storage_BaseDriver& FSD_CmpFile::PutInteger(const Standard_Integer aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutBoolean(const Standard_Boolean aValue)
|
|
{
|
|
- myStream << ((Standard_Integer)aValue) << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << ((Standard_Integer)aValue) << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -490,8 +485,9 @@ Storage_BaseDriver& FSD_CmpFile::PutBoolean(const Standard_Boolean aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutReal(const Standard_Real aValue)
|
|
{
|
|
- myStream << ((Standard_Real)aValue) << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << ((Standard_Real)aValue) << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -502,8 +498,9 @@ Storage_BaseDriver& FSD_CmpFile::PutReal(const Standard_Real aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::PutShortReal(const Standard_ShortReal aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -514,7 +511,8 @@ Storage_BaseDriver& FSD_CmpFile::PutShortReal(const Standard_ShortReal aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetReference(Standard_Integer& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -526,13 +524,14 @@ Storage_BaseDriver& FSD_CmpFile::GetReference(Standard_Integer& aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetCharacter(Standard_Character& aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
unsigned short i = 0;
|
|
- if (!(myStream >> i)) {
|
|
+ if (!((*myStream) >> i)) {
|
|
// SGI : donne une erreur mais a une bonne valeur pour les caracteres ecrits
|
|
// signes (-80 fait ios::badbit, mais la variable i est initialisee)
|
|
//
|
|
if (i == 0) Storage_StreamTypeMismatchError::Raise();
|
|
- myStream.clear(ios::goodbit);
|
|
+ myStream->clear(ios::goodbit);
|
|
}
|
|
aValue = (char)i;
|
|
|
|
@@ -546,7 +545,8 @@ Storage_BaseDriver& FSD_CmpFile::GetCharacter(Standard_Character& aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetExtCharacter(Standard_ExtCharacter& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -558,7 +558,8 @@ Storage_BaseDriver& FSD_CmpFile::GetExtCharacter(Standard_ExtCharacter& aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetInteger(Standard_Integer& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -570,7 +571,8 @@ Storage_BaseDriver& FSD_CmpFile::GetInteger(Standard_Integer& aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetBoolean(Standard_Boolean& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -582,11 +584,12 @@ Storage_BaseDriver& FSD_CmpFile::GetBoolean(Standard_Boolean& aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetReal(Standard_Real& aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
#ifdef BUC60808
|
|
char realbuffer[100];
|
|
|
|
realbuffer[0] = '\0';
|
|
- if (!(myStream >> realbuffer)) {
|
|
+ if (!((*myStream) >> realbuffer)) {
|
|
#ifdef OCCT_DEBUG
|
|
cerr << "%%%ERROR: read error of double at offset " << myStream.tellg() << endl;
|
|
cerr << "\t buffer is" << realbuffer<< endl;
|
|
@@ -603,7 +606,7 @@ Storage_BaseDriver& FSD_CmpFile::GetReal(Standard_Real& aValue)
|
|
|
|
return *this;
|
|
#else
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
#endif
|
|
@@ -616,12 +619,13 @@ Storage_BaseDriver& FSD_CmpFile::GetReal(Standard_Real& aValue)
|
|
|
|
Storage_BaseDriver& FSD_CmpFile::GetShortReal(Standard_ShortReal& aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
#ifdef BUC60808
|
|
char realbuffer[100];
|
|
Standard_Real r = 0.0;
|
|
|
|
realbuffer[0] = '\0';
|
|
- if (!(myStream >> realbuffer)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> realbuffer)) Storage_StreamTypeMismatchError::Raise();
|
|
if (!OSD::CStringToReal(realbuffer,r))
|
|
Storage_StreamTypeMismatchError::Raise();
|
|
|
|
@@ -629,7 +633,7 @@ Storage_BaseDriver& FSD_CmpFile::GetShortReal(Standard_ShortReal& aValue)
|
|
|
|
return *this;
|
|
#else
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
return *this;
|
|
#endif
|
|
}
|
|
@@ -653,9 +657,10 @@ void FSD_CmpFile::Destroy()
|
|
|
|
Storage_Error FSD_CmpFile::BeginWriteInfoSection()
|
|
{
|
|
- myStream << FSD_CmpFile::MagicNumber() << '\n';
|
|
- myStream << "BEGIN_INFO_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << FSD_CmpFile::MagicNumber() << '\n';
|
|
+ (*myStream) << "BEGIN_INFO_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
|
|
return Storage_VSOk;
|
|
}
|
|
@@ -675,24 +680,25 @@ void FSD_CmpFile::WriteInfo(const Standard_Integer nbObj,
|
|
const TCollection_ExtendedString& dataType,
|
|
const TColStd_SequenceOfAsciiString& userInfo)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- myStream << nbObj;
|
|
- myStream << "\n";
|
|
- myStream << dbVersion.ToCString() << "\n";
|
|
- myStream << date.ToCString() << "\n";
|
|
- myStream << schemaName.ToCString() << "\n";
|
|
- myStream << schemaVersion.ToCString() << "\n";
|
|
+ (*myStream) << nbObj;
|
|
+ (*myStream) << "\n";
|
|
+ (*myStream) << dbVersion.ToCString() << "\n";
|
|
+ (*myStream) << date.ToCString() << "\n";
|
|
+ (*myStream) << schemaName.ToCString() << "\n";
|
|
+ (*myStream) << schemaVersion.ToCString() << "\n";
|
|
WriteExtendedLine(appName);
|
|
- myStream << appVersion.ToCString() << "\n";
|
|
+ (*myStream) << appVersion.ToCString() << "\n";
|
|
WriteExtendedLine(dataType);
|
|
- myStream << userInfo.Length() << "\n";
|
|
+ (*myStream) << userInfo.Length() << "\n";
|
|
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
|
|
for (i = 1; i <= userInfo.Length(); i++) {
|
|
- myStream << userInfo.Value(i).ToCString() << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << userInfo.Value(i).ToCString() << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
}
|
|
|
|
@@ -703,8 +709,9 @@ void FSD_CmpFile::WriteInfo(const Standard_Integer nbObj,
|
|
|
|
Storage_Error FSD_CmpFile::EndWriteInfoSection()
|
|
{
|
|
- myStream << "END_INFO_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_INFO_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -746,7 +753,8 @@ void FSD_CmpFile::ReadInfo(Standard_Integer& nbObj,
|
|
TCollection_ExtendedString& dataType,
|
|
TColStd_SequenceOfAsciiString& userInfo)
|
|
{
|
|
- if (!(myStream >> nbObj)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> nbObj)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -760,7 +768,7 @@ void FSD_CmpFile::ReadInfo(Standard_Integer& nbObj,
|
|
|
|
Standard_Integer i,len = 0;
|
|
|
|
- if (!(myStream >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -791,8 +799,9 @@ Storage_Error FSD_CmpFile::EndReadInfoSection()
|
|
|
|
Storage_Error FSD_CmpFile::BeginWriteCommentSection()
|
|
{
|
|
- myStream << "BEGIN_COMMENT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_COMMENT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -803,15 +812,16 @@ Storage_Error FSD_CmpFile::BeginWriteCommentSection()
|
|
|
|
void FSD_CmpFile::WriteComment(const TColStd_SequenceOfExtendedString& aCom)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
Standard_Integer i,aSize;
|
|
|
|
aSize = aCom.Length();
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
|
|
for (i = 1; i <= aSize; i++) {
|
|
WriteExtendedLine(aCom.Value(i));
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
}
|
|
|
|
@@ -822,8 +832,9 @@ void FSD_CmpFile::WriteComment(const TColStd_SequenceOfExtendedString& aCom)
|
|
|
|
Storage_Error FSD_CmpFile::EndWriteCommentSection()
|
|
{
|
|
- myStream << "END_COMMENT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_COMMENT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -844,10 +855,11 @@ Storage_Error FSD_CmpFile::BeginReadCommentSection()
|
|
|
|
void FSD_CmpFile::ReadComment(TColStd_SequenceOfExtendedString& aCom)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
TCollection_ExtendedString line;
|
|
Standard_Integer len,i;
|
|
|
|
- if (!(myStream >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -875,8 +887,9 @@ Storage_Error FSD_CmpFile::EndReadCommentSection()
|
|
|
|
Storage_Error FSD_CmpFile::BeginWriteTypeSection()
|
|
{
|
|
- myStream << "BEGIN_TYPE_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_TYPE_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -887,8 +900,9 @@ Storage_Error FSD_CmpFile::BeginWriteTypeSection()
|
|
|
|
void FSD_CmpFile::SetTypeSectionSize(const Standard_Integer aSize)
|
|
{
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -899,8 +913,9 @@ void FSD_CmpFile::SetTypeSectionSize(const Standard_Integer aSize)
|
|
void FSD_CmpFile::WriteTypeInformations(const Standard_Integer typeNum,
|
|
const TCollection_AsciiString& typeName)
|
|
{
|
|
- myStream << typeNum << " " << typeName.ToCString() << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << typeNum << " " << typeName.ToCString() << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -910,8 +925,9 @@ void FSD_CmpFile::WriteTypeInformations(const Standard_Integer typeNum,
|
|
|
|
Storage_Error FSD_CmpFile::EndWriteTypeSection()
|
|
{
|
|
- myStream << "END_TYPE_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_TYPE_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -932,9 +948,10 @@ Storage_Error FSD_CmpFile::BeginReadTypeSection()
|
|
|
|
Standard_Integer FSD_CmpFile::TypeSectionSize()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- if (!(myStream >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -949,8 +966,9 @@ Standard_Integer FSD_CmpFile::TypeSectionSize()
|
|
void FSD_CmpFile::ReadTypeInformations(Standard_Integer& typeNum,
|
|
TCollection_AsciiString& typeName)
|
|
{
|
|
- if (!(myStream >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
- if (!(myStream >> typeName)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> typeName)) Storage_StreamTypeMismatchError::Raise();
|
|
FlushEndOfLine();
|
|
}
|
|
|
|
@@ -972,8 +990,9 @@ Storage_Error FSD_CmpFile::EndReadTypeSection()
|
|
|
|
Storage_Error FSD_CmpFile::BeginWriteRootSection()
|
|
{
|
|
- myStream << "BEGIN_ROOT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_ROOT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -984,8 +1003,9 @@ Storage_Error FSD_CmpFile::BeginWriteRootSection()
|
|
|
|
void FSD_CmpFile::SetRootSectionSize(const Standard_Integer aSize)
|
|
{
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -995,8 +1015,9 @@ void FSD_CmpFile::SetRootSectionSize(const Standard_Integer aSize)
|
|
|
|
void FSD_CmpFile::WriteRoot(const TCollection_AsciiString& rootName, const Standard_Integer aRef, const TCollection_AsciiString& rootType)
|
|
{
|
|
- myStream << aRef << " " << rootName.ToCString() << " " << rootType.ToCString() << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aRef << " " << rootName.ToCString() << " " << rootType.ToCString() << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1006,8 +1027,9 @@ void FSD_CmpFile::WriteRoot(const TCollection_AsciiString& rootName, const Stand
|
|
|
|
Storage_Error FSD_CmpFile::EndWriteRootSection()
|
|
{
|
|
- myStream << "END_ROOT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_ROOT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1028,9 +1050,10 @@ Storage_Error FSD_CmpFile::BeginReadRootSection()
|
|
|
|
Standard_Integer FSD_CmpFile::RootSectionSize()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- if (!(myStream >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -1044,7 +1067,8 @@ Standard_Integer FSD_CmpFile::RootSectionSize()
|
|
|
|
void FSD_CmpFile::ReadRoot(TCollection_AsciiString& rootName, Standard_Integer& aRef,TCollection_AsciiString& rootType)
|
|
{
|
|
- if (!(myStream >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
ReadWord(rootName);
|
|
ReadWord(rootType);
|
|
}
|
|
@@ -1067,8 +1091,9 @@ Storage_Error FSD_CmpFile::EndReadRootSection()
|
|
|
|
Storage_Error FSD_CmpFile::BeginWriteRefSection()
|
|
{
|
|
- myStream << "BEGIN_REF_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_REF_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1079,8 +1104,9 @@ Storage_Error FSD_CmpFile::BeginWriteRefSection()
|
|
|
|
void FSD_CmpFile::SetRefSectionSize(const Standard_Integer aSize)
|
|
{
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1091,8 +1117,9 @@ void FSD_CmpFile::SetRefSectionSize(const Standard_Integer aSize)
|
|
void FSD_CmpFile::WriteReferenceType(const Standard_Integer reference,
|
|
const Standard_Integer typeNum)
|
|
{
|
|
- myStream << reference << " " << typeNum << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << reference << " " << typeNum << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1102,8 +1129,9 @@ void FSD_CmpFile::WriteReferenceType(const Standard_Integer reference,
|
|
|
|
Storage_Error FSD_CmpFile::EndWriteRefSection()
|
|
{
|
|
- myStream << "END_REF_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_REF_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1124,9 +1152,10 @@ Storage_Error FSD_CmpFile::BeginReadRefSection()
|
|
|
|
Standard_Integer FSD_CmpFile::RefSectionSize()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- if (!(myStream >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
FlushEndOfLine();
|
|
|
|
return i;
|
|
@@ -1140,8 +1169,9 @@ Standard_Integer FSD_CmpFile::RefSectionSize()
|
|
void FSD_CmpFile::ReadReferenceType(Standard_Integer& reference,
|
|
Standard_Integer& typeNum)
|
|
{
|
|
- if (!(myStream >> reference)) Storage_StreamTypeMismatchError::Raise();
|
|
- if (!(myStream >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> reference)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
FlushEndOfLine();
|
|
}
|
|
|
|
@@ -1163,8 +1193,9 @@ Storage_Error FSD_CmpFile::EndReadRefSection()
|
|
|
|
Storage_Error FSD_CmpFile::BeginWriteDataSection()
|
|
{
|
|
- myStream << "BEGIN_DATA_SECTION";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_DATA_SECTION";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1176,8 +1207,10 @@ Storage_Error FSD_CmpFile::BeginWriteDataSection()
|
|
void FSD_CmpFile::WritePersistentObjectHeader(const Standard_Integer aRef,
|
|
const Standard_Integer aType)
|
|
{
|
|
- myStream << "\n#" << aRef << "%" << aType << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ (*myStream) << "\n#" << aRef << "%" << aType << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1187,7 +1220,8 @@ void FSD_CmpFile::WritePersistentObjectHeader(const Standard_Integer aRef,
|
|
|
|
void FSD_CmpFile::BeginWritePersistentObjectData()
|
|
{
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1197,7 +1231,8 @@ void FSD_CmpFile::BeginWritePersistentObjectData()
|
|
|
|
void FSD_CmpFile::BeginWriteObjectData()
|
|
{
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1207,7 +1242,8 @@ void FSD_CmpFile::BeginWriteObjectData()
|
|
|
|
void FSD_CmpFile::EndWriteObjectData()
|
|
{
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1217,7 +1253,8 @@ void FSD_CmpFile::EndWriteObjectData()
|
|
|
|
void FSD_CmpFile::EndWritePersistentObjectData()
|
|
{
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1227,8 +1264,9 @@ void FSD_CmpFile::EndWritePersistentObjectData()
|
|
|
|
Storage_Error FSD_CmpFile::EndWriteDataSection()
|
|
{
|
|
- myStream << "\nEND_DATA_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "\nEND_DATA_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1250,29 +1288,30 @@ Storage_Error FSD_CmpFile::BeginReadDataSection()
|
|
void FSD_CmpFile::ReadPersistentObjectHeader(Standard_Integer& aRef,
|
|
Standard_Integer& aType)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
char c;
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
|
|
while (c != '#') {
|
|
if (IsEnd() || (c != ' ') || (c == '\r')|| (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
- if (!(myStream >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
|
|
while (c != '%') {
|
|
if (IsEnd() || (c != ' ') || (c == '\r')|| (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
- if (!(myStream >> aType)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aType)) Storage_StreamTypeMismatchError::Raise();
|
|
// cout << "REF:" << aRef << " TYPE:"<< aType << endl;
|
|
}
|
|
|
|
@@ -1313,17 +1352,18 @@ void FSD_CmpFile::EndReadObjectData()
|
|
|
|
void FSD_CmpFile::EndReadPersistentObjectData()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamFormatError::Raise();
|
|
char c;
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
while (c != '\n' && (c != '\r')) {
|
|
if (IsEnd() || (c != ' ')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
if (c == '\r') {
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
// cout << "EndReadPersistentObjectData" << endl;
|
|
}
|
|
@@ -1345,14 +1385,16 @@ Storage_Error FSD_CmpFile::EndReadDataSection()
|
|
|
|
Storage_Position FSD_CmpFile::Tell()
|
|
{
|
|
+ if( NULL == myStream ) return -1;
|
|
+
|
|
switch (OpenMode()) {
|
|
case Storage_VSRead:
|
|
- return (Storage_Position) myStream.tellp();
|
|
+ return (Storage_Position) myStream->tellp();
|
|
case Storage_VSWrite:
|
|
- return (Storage_Position) myStream.tellg();
|
|
+ return (Storage_Position) myStream->tellg();
|
|
case Storage_VSReadWrite: {
|
|
- Storage_Position aPosR = (Storage_Position) myStream.tellp();
|
|
- Storage_Position aPosW = (Storage_Position) myStream.tellg();
|
|
+ Storage_Position aPosR = (Storage_Position) myStream->tellp();
|
|
+ Storage_Position aPosW = (Storage_Position) myStream->tellg();
|
|
if (aPosR < aPosW)
|
|
return aPosW;
|
|
else
|
|
diff --git a/src/FSD/FSD_File.cxx b/src/FSD/FSD_File.cxx
|
|
index 393fed9ca..47f6e5db3 100644
|
|
--- a/src/FSD/FSD_File.cxx
|
|
+++ b/src/FSD/FSD_File.cxx
|
|
@@ -14,6 +14,7 @@
|
|
|
|
#include <FSD_File.ixx>
|
|
#include <OSD.hxx>
|
|
+#include <OSD_OpenFile.hxx>
|
|
|
|
const Standard_CString MAGICNUMBER = "FSDFILE";
|
|
const Standard_CString ENDOFNORMALEXTENDEDSECTION = "BEGIN_REF_SECTION";
|
|
@@ -28,7 +29,14 @@ const Standard_Integer SIZEOFNORMALEXTENDEDSECTION = 16;
|
|
|
|
FSD_File::FSD_File()
|
|
{
|
|
+ m_wrapper = new STREAM_WRAPPER;
|
|
+ myStream = NULL;
|
|
+}
|
|
|
|
+FSD_File::~FSD_File()
|
|
+{
|
|
+ Destroy();
|
|
+ delete m_wrapper;
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -73,34 +81,22 @@ Storage_Error FSD_File::Open(const TCollection_AsciiString& aName,const Storage_
|
|
|
|
if (OpenMode() == Storage_VSNone) {
|
|
|
|
-#ifdef _MSC_VER
|
|
- TCollection_ExtendedString aWName(aName);
|
|
if (aMode == Storage_VSRead) {
|
|
- myStream.open( (const wchar_t*) aWName.ToExtString(),ios::in); // ios::nocreate is not portable
|
|
+ myStream = m_wrapper->Open( aName.ToCString(), ios::in); // ios::nocreate is not portable
|
|
}
|
|
else if (aMode == Storage_VSWrite) {
|
|
- myStream.open( (const wchar_t*) aWName.ToExtString(),ios::out);
|
|
+ myStream = m_wrapper->Open( aName.ToCString(), ios::out); // ios::nocreate is not portable
|
|
}
|
|
else if (aMode == Storage_VSReadWrite) {
|
|
- myStream.open( (const wchar_t*) aWName.ToExtString(),ios::in|ios::out);
|
|
-#else
|
|
- if (aMode == Storage_VSRead) {
|
|
- myStream.open(aName.ToCString(),ios::in); // ios::nocreate is not portable
|
|
- }
|
|
- else if (aMode == Storage_VSWrite) {
|
|
- myStream.open(aName.ToCString(),ios::out);
|
|
- }
|
|
- else if (aMode == Storage_VSReadWrite) {
|
|
- myStream.open(aName.ToCString(),ios::in|ios::out);
|
|
-#endif
|
|
+ myStream = m_wrapper->Open( aName.ToCString(), ios::in|ios::out); // ios::nocreate is not portable
|
|
}
|
|
|
|
- if (myStream.fail()) {
|
|
+ if ( !m_wrapper->IsOpen() ) {
|
|
result = Storage_VSOpenError;
|
|
}
|
|
else {
|
|
- myStream.precision(17);
|
|
- myStream.imbue (std::locale::classic()); // use always C locale
|
|
+ myStream->precision(17);
|
|
+ myStream->imbue (std::locale::classic()); // use always C locale
|
|
SetOpenMode(aMode);
|
|
}
|
|
}
|
|
@@ -118,7 +114,10 @@ Storage_Error FSD_File::Open(const TCollection_AsciiString& aName,const Storage_
|
|
|
|
Standard_Boolean FSD_File::IsEnd()
|
|
{
|
|
- return myStream.eof();
|
|
+ if( NULL == myStream )
|
|
+ return true;
|
|
+
|
|
+ return myStream->eof();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -131,7 +130,8 @@ Storage_Error FSD_File::Close()
|
|
Storage_Error result = Storage_VSOk;
|
|
|
|
if (OpenMode() != Storage_VSNone) {
|
|
- myStream.close();
|
|
+ m_wrapper->Init();
|
|
+ myStream = NULL;
|
|
SetOpenMode(Storage_VSNone);
|
|
}
|
|
else {
|
|
@@ -190,7 +190,7 @@ void FSD_File::ReadLine(TCollection_AsciiString& buffer)
|
|
|
|
while (!IsEnd && !FSD_File::IsEnd()) {
|
|
Buffer[0] = '\0';
|
|
- myStream.getline(Buffer,8192,'\n');
|
|
+ myStream->getline(Buffer,8192,'\n');
|
|
|
|
// char c;
|
|
// if (myStream.get(c) && c != '\n') {
|
|
@@ -211,6 +211,8 @@ void FSD_File::ReadLine(TCollection_AsciiString& buffer)
|
|
|
|
void FSD_File::WriteExtendedLine(const TCollection_ExtendedString& buffer)
|
|
{
|
|
+ if( NULL == myStream ) return;
|
|
+
|
|
Standard_ExtString extBuffer;
|
|
Standard_Integer i,c,d;
|
|
|
|
@@ -220,10 +222,10 @@ void FSD_File::WriteExtendedLine(const TCollection_ExtendedString& buffer)
|
|
c = (extBuffer[i] & 0x0000FF00 ) >> 8 ;
|
|
d = extBuffer[i] & 0x000000FF;
|
|
|
|
- myStream << (char)c << (char)d;
|
|
+ (*myStream) << (char)c << (char)d;
|
|
}
|
|
|
|
- myStream << (char)0 << "\n";
|
|
+ (*myStream) << (char)0 << "\n";
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -233,6 +235,8 @@ void FSD_File::WriteExtendedLine(const TCollection_ExtendedString& buffer)
|
|
|
|
void FSD_File::ReadExtendedLine(TCollection_ExtendedString& buffer)
|
|
{
|
|
+ if( NULL == myStream ) return;
|
|
+
|
|
char c = '\0';
|
|
Standard_ExtCharacter i = 0,j,count = 0;
|
|
Standard_Boolean fin = Standard_False;
|
|
@@ -241,7 +245,7 @@ void FSD_File::ReadExtendedLine(TCollection_ExtendedString& buffer)
|
|
buffer.Clear();
|
|
|
|
while (!fin && !IsEnd()) {
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
|
|
if (c == tg[count]) count++;
|
|
else count = 0;
|
|
@@ -251,7 +255,7 @@ void FSD_File::ReadExtendedLine(TCollection_ExtendedString& buffer)
|
|
if (c == '\0') fin = Standard_True;
|
|
i = (i << 8);
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
if (c == tg[count]) count++;
|
|
else count = 0;
|
|
if (count < SIZEOFNORMALEXTENDEDSECTION) {
|
|
@@ -285,7 +289,7 @@ void FSD_File::ReadChar(TCollection_AsciiString& buffer, const Standard_Size rsi
|
|
buffer.Clear();
|
|
|
|
while (!IsEnd() && (ccount < rsize)) {
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
buffer += c;
|
|
ccount++;
|
|
}
|
|
@@ -306,7 +310,7 @@ void FSD_File::ReadString(TCollection_AsciiString& buffer)
|
|
|
|
while (!IsEnd && !FSD_File::IsEnd()) {
|
|
Buffer[0] = '\0';
|
|
- myStream.getline(Buffer,8192,'\n');
|
|
+ myStream->getline(Buffer,8192,'\n');
|
|
bpos = Buffer;
|
|
|
|
// LeftAdjust
|
|
@@ -345,7 +349,7 @@ void FSD_File::ReadWord(TCollection_AsciiString& buffer)
|
|
buffer.Clear();
|
|
|
|
while (!IsEnd && !FSD_File::IsEnd()) {
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
if ((c != ' ') && (c != '\n')) IsEnd = Standard_True;
|
|
}
|
|
|
|
@@ -361,7 +365,7 @@ void FSD_File::ReadWord(TCollection_AsciiString& buffer)
|
|
}
|
|
*tmpb = c;
|
|
tmpb++; i++;
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
if ((c == '\n') || (c == ' ')) IsEnd = Standard_True;
|
|
}
|
|
|
|
@@ -408,8 +412,9 @@ void FSD_File::SkipObject()
|
|
|
|
Storage_BaseDriver& FSD_File::PutReference(const Standard_Integer aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -420,11 +425,12 @@ Storage_BaseDriver& FSD_File::PutReference(const Standard_Integer aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::PutCharacter(const Standard_Character aValue)
|
|
{
|
|
- unsigned short i;
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
|
|
+ unsigned short i;
|
|
i = aValue;
|
|
- myStream << i << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << i << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -435,8 +441,10 @@ Storage_BaseDriver& FSD_File::PutCharacter(const Standard_Character aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::PutExtCharacter(const Standard_ExtCharacter aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -447,8 +455,9 @@ Storage_BaseDriver& FSD_File::PutExtCharacter(const Standard_ExtCharacter aValue
|
|
|
|
Storage_BaseDriver& FSD_File::PutInteger(const Standard_Integer aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -459,8 +468,9 @@ Storage_BaseDriver& FSD_File::PutInteger(const Standard_Integer aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::PutBoolean(const Standard_Boolean aValue)
|
|
{
|
|
- myStream << ((Standard_Integer)aValue) << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << ((Standard_Integer)aValue) << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -471,8 +481,9 @@ Storage_BaseDriver& FSD_File::PutBoolean(const Standard_Boolean aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::PutReal(const Standard_Real aValue)
|
|
{
|
|
- myStream << ((Standard_Real)aValue) << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << ((Standard_Real)aValue) << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -483,8 +494,9 @@ Storage_BaseDriver& FSD_File::PutReal(const Standard_Real aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::PutShortReal(const Standard_ShortReal aValue)
|
|
{
|
|
- myStream << aValue << " ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aValue << " ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return *this;
|
|
}
|
|
|
|
@@ -495,7 +507,8 @@ Storage_BaseDriver& FSD_File::PutShortReal(const Standard_ShortReal aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetReference(Standard_Integer& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -507,13 +520,14 @@ Storage_BaseDriver& FSD_File::GetReference(Standard_Integer& aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetCharacter(Standard_Character& aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
unsigned short i = 0;
|
|
- if (!(myStream >> i)) {
|
|
+ if (!((*myStream) >> i)) {
|
|
// SGI : donne une erreur mais a une bonne valeur pour les caracteres ecrits
|
|
// signes (-80 fait ios::badbit, mais la variable i est initialisee)
|
|
//
|
|
if (i == 0) Storage_StreamTypeMismatchError::Raise();
|
|
- myStream.clear(ios::goodbit); // .clear(0) is not portable
|
|
+ myStream->clear(ios::goodbit); // .clear(0) is not portable
|
|
}
|
|
aValue = (char)i;
|
|
|
|
@@ -527,7 +541,8 @@ Storage_BaseDriver& FSD_File::GetCharacter(Standard_Character& aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetExtCharacter(Standard_ExtCharacter& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -539,7 +554,8 @@ Storage_BaseDriver& FSD_File::GetExtCharacter(Standard_ExtCharacter& aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetInteger(Standard_Integer& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -551,7 +567,8 @@ Storage_BaseDriver& FSD_File::GetInteger(Standard_Integer& aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetBoolean(Standard_Boolean& aValue)
|
|
{
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
}
|
|
@@ -563,16 +580,17 @@ Storage_BaseDriver& FSD_File::GetBoolean(Standard_Boolean& aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetReal(Standard_Real& aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
#ifdef USEOSDREAL
|
|
char realbuffer[100];
|
|
|
|
realbuffer[0] = '\0';
|
|
- if (!(myStream >> realbuffer)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> realbuffer)) Storage_StreamTypeMismatchError::Raise();
|
|
if (!OSD::CStringToReal(realbuffer,aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
#else
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
return *this;
|
|
#endif
|
|
@@ -585,19 +603,20 @@ Storage_BaseDriver& FSD_File::GetReal(Standard_Real& aValue)
|
|
|
|
Storage_BaseDriver& FSD_File::GetShortReal(Standard_ShortReal& aValue)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
#ifdef USEOSDREAL
|
|
char realbuffer[100];
|
|
Standard_Real r = 0.0;
|
|
|
|
realbuffer[0] = '\0';
|
|
- if (!(myStream >> realbuffer)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> realbuffer)) Storage_StreamTypeMismatchError::Raise();
|
|
if (!OSD::CStringToReal(realbuffer,r)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
aValue = r;
|
|
|
|
return *this;
|
|
#else
|
|
- if (!(myStream >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aValue)) Storage_StreamTypeMismatchError::Raise();
|
|
return *this;
|
|
#endif
|
|
}
|
|
@@ -621,9 +640,11 @@ void FSD_File::Destroy()
|
|
|
|
Storage_Error FSD_File::BeginWriteInfoSection()
|
|
{
|
|
- myStream << FSD_File::MagicNumber() << '\n';
|
|
- myStream << "BEGIN_INFO_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+
|
|
+ (*myStream) << FSD_File::MagicNumber() << '\n';
|
|
+ (*myStream) << "BEGIN_INFO_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
|
|
return Storage_VSOk;
|
|
}
|
|
@@ -643,24 +664,25 @@ void FSD_File::WriteInfo(const Standard_Integer nbObj,
|
|
const TCollection_ExtendedString& dataType,
|
|
const TColStd_SequenceOfAsciiString& userInfo)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- myStream << nbObj;
|
|
- myStream << "\n";
|
|
- myStream << dbVersion.ToCString() << "\n";
|
|
- myStream << date.ToCString() << "\n";
|
|
- myStream << schemaName.ToCString() << "\n";
|
|
- myStream << schemaVersion.ToCString() << "\n";
|
|
+ (*myStream) << nbObj;
|
|
+ (*myStream) << "\n";
|
|
+ (*myStream) << dbVersion.ToCString() << "\n";
|
|
+ (*myStream) << date.ToCString() << "\n";
|
|
+ (*myStream) << schemaName.ToCString() << "\n";
|
|
+ (*myStream) << schemaVersion.ToCString() << "\n";
|
|
WriteExtendedLine(appName);
|
|
- myStream << appVersion.ToCString() << "\n";
|
|
+ (*myStream) << appVersion.ToCString() << "\n";
|
|
WriteExtendedLine(dataType);
|
|
- myStream << userInfo.Length() << "\n";
|
|
+ (*myStream) << userInfo.Length() << "\n";
|
|
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
|
|
for (i = 1; i <= userInfo.Length(); i++) {
|
|
- myStream << userInfo.Value(i).ToCString() << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << userInfo.Value(i).ToCString() << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
}
|
|
|
|
@@ -671,8 +693,9 @@ void FSD_File::WriteInfo(const Standard_Integer nbObj,
|
|
|
|
Storage_Error FSD_File::EndWriteInfoSection()
|
|
{
|
|
- myStream << "END_INFO_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_INFO_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -714,7 +737,8 @@ void FSD_File::ReadInfo(Standard_Integer& nbObj,
|
|
TCollection_ExtendedString& dataType,
|
|
TColStd_SequenceOfAsciiString& userInfo)
|
|
{
|
|
- if (!(myStream >> nbObj)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> nbObj)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -728,7 +752,7 @@ void FSD_File::ReadInfo(Standard_Integer& nbObj,
|
|
|
|
Standard_Integer i,len = 0;
|
|
|
|
- if (!(myStream >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -759,8 +783,9 @@ Storage_Error FSD_File::EndReadInfoSection()
|
|
|
|
Storage_Error FSD_File::BeginWriteCommentSection()
|
|
{
|
|
- myStream << "BEGIN_COMMENT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_COMMENT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -771,15 +796,16 @@ Storage_Error FSD_File::BeginWriteCommentSection()
|
|
|
|
void FSD_File::WriteComment(const TColStd_SequenceOfExtendedString& aCom)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
Standard_Integer i,aSize;
|
|
|
|
aSize = aCom.Length();
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
|
|
for (i = 1; i <= aSize; i++) {
|
|
WriteExtendedLine(aCom.Value(i));
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
}
|
|
|
|
@@ -790,8 +816,9 @@ void FSD_File::WriteComment(const TColStd_SequenceOfExtendedString& aCom)
|
|
|
|
Storage_Error FSD_File::EndWriteCommentSection()
|
|
{
|
|
- myStream << "END_COMMENT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_COMMENT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -812,10 +839,11 @@ Storage_Error FSD_File::BeginReadCommentSection()
|
|
|
|
void FSD_File::ReadComment(TColStd_SequenceOfExtendedString& aCom)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
TCollection_ExtendedString line;
|
|
Standard_Integer len,i;
|
|
|
|
- if (!(myStream >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> len)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -843,8 +871,9 @@ Storage_Error FSD_File::EndReadCommentSection()
|
|
|
|
Storage_Error FSD_File::BeginWriteTypeSection()
|
|
{
|
|
- myStream << "BEGIN_TYPE_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_TYPE_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -855,8 +884,9 @@ Storage_Error FSD_File::BeginWriteTypeSection()
|
|
|
|
void FSD_File::SetTypeSectionSize(const Standard_Integer aSize)
|
|
{
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -867,8 +897,9 @@ void FSD_File::SetTypeSectionSize(const Standard_Integer aSize)
|
|
void FSD_File::WriteTypeInformations(const Standard_Integer typeNum,
|
|
const TCollection_AsciiString& typeName)
|
|
{
|
|
- myStream << typeNum << " " << typeName.ToCString() << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << typeNum << " " << typeName.ToCString() << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -878,8 +909,9 @@ void FSD_File::WriteTypeInformations(const Standard_Integer typeNum,
|
|
|
|
Storage_Error FSD_File::EndWriteTypeSection()
|
|
{
|
|
- myStream << "END_TYPE_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_TYPE_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -900,9 +932,10 @@ Storage_Error FSD_File::BeginReadTypeSection()
|
|
|
|
Standard_Integer FSD_File::TypeSectionSize()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- if (!(myStream >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -917,8 +950,9 @@ Standard_Integer FSD_File::TypeSectionSize()
|
|
void FSD_File::ReadTypeInformations(Standard_Integer& typeNum,
|
|
TCollection_AsciiString& typeName)
|
|
{
|
|
- if (!(myStream >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
- if (!(myStream >> typeName)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> typeName)) Storage_StreamTypeMismatchError::Raise();
|
|
FlushEndOfLine();
|
|
}
|
|
|
|
@@ -940,8 +974,9 @@ Storage_Error FSD_File::EndReadTypeSection()
|
|
|
|
Storage_Error FSD_File::BeginWriteRootSection()
|
|
{
|
|
- myStream << "BEGIN_ROOT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_ROOT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -952,8 +987,9 @@ Storage_Error FSD_File::BeginWriteRootSection()
|
|
|
|
void FSD_File::SetRootSectionSize(const Standard_Integer aSize)
|
|
{
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -963,8 +999,9 @@ void FSD_File::SetRootSectionSize(const Standard_Integer aSize)
|
|
|
|
void FSD_File::WriteRoot(const TCollection_AsciiString& rootName, const Standard_Integer aRef, const TCollection_AsciiString& rootType)
|
|
{
|
|
- myStream << aRef << " " << rootName.ToCString() << " " << rootType.ToCString() << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aRef << " " << rootName.ToCString() << " " << rootType.ToCString() << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -974,8 +1011,9 @@ void FSD_File::WriteRoot(const TCollection_AsciiString& rootName, const Standard
|
|
|
|
Storage_Error FSD_File::EndWriteRootSection()
|
|
{
|
|
- myStream << "END_ROOT_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_ROOT_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -996,9 +1034,10 @@ Storage_Error FSD_File::BeginReadRootSection()
|
|
|
|
Standard_Integer FSD_File::RootSectionSize()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- if (!(myStream >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
FlushEndOfLine();
|
|
|
|
@@ -1012,7 +1051,8 @@ Standard_Integer FSD_File::RootSectionSize()
|
|
|
|
void FSD_File::ReadRoot(TCollection_AsciiString& rootName, Standard_Integer& aRef,TCollection_AsciiString& rootType)
|
|
{
|
|
- if (!(myStream >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
ReadWord(rootName);
|
|
ReadWord(rootType);
|
|
}
|
|
@@ -1035,8 +1075,9 @@ Storage_Error FSD_File::EndReadRootSection()
|
|
|
|
Storage_Error FSD_File::BeginWriteRefSection()
|
|
{
|
|
- myStream << "BEGIN_REF_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_REF_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1047,8 +1088,9 @@ Storage_Error FSD_File::BeginWriteRefSection()
|
|
|
|
void FSD_File::SetRefSectionSize(const Standard_Integer aSize)
|
|
{
|
|
- myStream << aSize << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << aSize << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1059,8 +1101,9 @@ void FSD_File::SetRefSectionSize(const Standard_Integer aSize)
|
|
void FSD_File::WriteReferenceType(const Standard_Integer reference,
|
|
const Standard_Integer typeNum)
|
|
{
|
|
- myStream << reference << " " << typeNum << "\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << reference << " " << typeNum << "\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1070,8 +1113,9 @@ void FSD_File::WriteReferenceType(const Standard_Integer reference,
|
|
|
|
Storage_Error FSD_File::EndWriteRefSection()
|
|
{
|
|
- myStream << "END_REF_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "END_REF_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1092,9 +1136,10 @@ Storage_Error FSD_File::BeginReadRefSection()
|
|
|
|
Standard_Integer FSD_File::RefSectionSize()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
Standard_Integer i;
|
|
|
|
- if (!(myStream >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> i)) Storage_StreamTypeMismatchError::Raise();
|
|
FlushEndOfLine();
|
|
|
|
return i;
|
|
@@ -1108,8 +1153,9 @@ Standard_Integer FSD_File::RefSectionSize()
|
|
void FSD_File::ReadReferenceType(Standard_Integer& reference,
|
|
Standard_Integer& typeNum)
|
|
{
|
|
- if (!(myStream >> reference)) Storage_StreamTypeMismatchError::Raise();
|
|
- if (!(myStream >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> reference)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> typeNum)) Storage_StreamTypeMismatchError::Raise();
|
|
FlushEndOfLine();
|
|
}
|
|
|
|
@@ -1131,8 +1177,9 @@ Storage_Error FSD_File::EndReadRefSection()
|
|
|
|
Storage_Error FSD_File::BeginWriteDataSection()
|
|
{
|
|
- myStream << "BEGIN_DATA_SECTION";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "BEGIN_DATA_SECTION";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1144,8 +1191,9 @@ Storage_Error FSD_File::BeginWriteDataSection()
|
|
void FSD_File::WritePersistentObjectHeader(const Standard_Integer aRef,
|
|
const Standard_Integer aType)
|
|
{
|
|
- myStream << "\n#" << aRef << "=%" << aType;
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "\n#" << aRef << "=%" << aType;
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1155,8 +1203,9 @@ void FSD_File::WritePersistentObjectHeader(const Standard_Integer aRef,
|
|
|
|
void FSD_File::BeginWritePersistentObjectData()
|
|
{
|
|
- myStream << "( ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "( ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1166,8 +1215,9 @@ void FSD_File::BeginWritePersistentObjectData()
|
|
|
|
void FSD_File::BeginWriteObjectData()
|
|
{
|
|
- myStream << "( ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "( ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1177,8 +1227,9 @@ void FSD_File::BeginWriteObjectData()
|
|
|
|
void FSD_File::EndWriteObjectData()
|
|
{
|
|
- myStream << ") ";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << ") ";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1188,8 +1239,9 @@ void FSD_File::EndWriteObjectData()
|
|
|
|
void FSD_File::EndWritePersistentObjectData()
|
|
{
|
|
- myStream << ")";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << ")";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -1199,8 +1251,9 @@ void FSD_File::EndWritePersistentObjectData()
|
|
|
|
Storage_Error FSD_File::EndWriteDataSection()
|
|
{
|
|
- myStream << "\nEND_DATA_SECTION\n";
|
|
- if (myStream.bad()) Storage_StreamWriteError::Raise();
|
|
+ if( NULL == myStream ) Storage_StreamWriteError::Raise();
|
|
+ (*myStream) << "\nEND_DATA_SECTION\n";
|
|
+ if (myStream->bad()) Storage_StreamWriteError::Raise();
|
|
return Storage_VSOk;
|
|
}
|
|
|
|
@@ -1222,39 +1275,40 @@ Storage_Error FSD_File::BeginReadDataSection()
|
|
void FSD_File::ReadPersistentObjectHeader(Standard_Integer& aRef,
|
|
Standard_Integer& aType)
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamFormatError::Raise();
|
|
char c;
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
|
|
while (c != '#') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
- if (!(myStream >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aRef)) Storage_StreamTypeMismatchError::Raise();
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
|
|
|
|
while (c != '=') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
|
|
while (c != '%') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
- if (!(myStream >> aType)) Storage_StreamTypeMismatchError::Raise();
|
|
+ if (!((*myStream) >> aType)) Storage_StreamTypeMismatchError::Raise();
|
|
// cout << "REF:" << aRef << " TYPE:"<< aType << endl;
|
|
}
|
|
|
|
@@ -1265,13 +1319,14 @@ void FSD_File::ReadPersistentObjectHeader(Standard_Integer& aRef,
|
|
|
|
void FSD_File::BeginReadPersistentObjectData()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamFormatError::Raise();
|
|
char c;
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
while (c != '(') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
//cout << "BeginReadPersistentObjectData" << endl;
|
|
@@ -1284,14 +1339,15 @@ void FSD_File::BeginReadPersistentObjectData()
|
|
|
|
void FSD_File::BeginReadObjectData()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamFormatError::Raise();
|
|
|
|
char c;
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
while (c != '(') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
// cout << "BeginReadObjectData" << endl;
|
|
@@ -1304,14 +1360,15 @@ void FSD_File::BeginReadObjectData()
|
|
|
|
void FSD_File::EndReadObjectData()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamFormatError::Raise();
|
|
|
|
char c;
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
while (c != ')') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
// cout << "EndReadObjectData" << endl;
|
|
@@ -1324,23 +1381,24 @@ void FSD_File::EndReadObjectData()
|
|
|
|
void FSD_File::EndReadPersistentObjectData()
|
|
{
|
|
+ if( NULL == myStream ) Storage_StreamFormatError::Raise();
|
|
|
|
char c;
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
while (c != ')') {
|
|
if (IsEnd() || (c != ' ') || (c == '\n')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
while (c != '\n') {
|
|
if (IsEnd() || (c != ' ')) {
|
|
Storage_StreamFormatError::Raise();
|
|
}
|
|
- myStream.get(c);
|
|
+ myStream->get(c);
|
|
}
|
|
// cout << "EndReadPersistentObjectData" << endl;
|
|
}
|
|
@@ -1362,14 +1420,16 @@ Storage_Error FSD_File::EndReadDataSection()
|
|
|
|
Storage_Position FSD_File::Tell()
|
|
{
|
|
+ if( NULL == myStream ) return -1;
|
|
+
|
|
switch (OpenMode()) {
|
|
case Storage_VSRead:
|
|
- return (Storage_Position) myStream.tellp();
|
|
+ return (Storage_Position) myStream->tellp();
|
|
case Storage_VSWrite:
|
|
- return (Storage_Position) myStream.tellg();
|
|
+ return (Storage_Position) myStream->tellg();
|
|
case Storage_VSReadWrite: {
|
|
- Storage_Position aPosR = (Storage_Position) myStream.tellp();
|
|
- Storage_Position aPosW = (Storage_Position) myStream.tellg();
|
|
+ Storage_Position aPosR = (Storage_Position) myStream->tellp();
|
|
+ Storage_Position aPosW = (Storage_Position) myStream->tellg();
|
|
if (aPosR < aPosW)
|
|
return aPosW;
|
|
else
|
|
diff --git a/src/IGESControl/IGESControl_Writer.cxx b/src/IGESControl/IGESControl_Writer.cxx
|
|
index 99ef6ddc6..f58a069ed 100644
|
|
--- a/src/IGESControl/IGESControl_Writer.cxx
|
|
+++ b/src/IGESControl/IGESControl_Writer.cxx
|
|
@@ -268,16 +268,15 @@ Standard_Boolean IGESControl_Writer::Write
|
|
Standard_Boolean IGESControl_Writer::Write
|
|
(const Standard_CString file, const Standard_Boolean fnes)
|
|
{
|
|
- ofstream fout;
|
|
- OSD_OpenStream(fout,file,ios::out);
|
|
- if (!fout) return Standard_False;
|
|
+ OPEN_OSTREAM( fout, file );
|
|
+ if( !IS_OPEN( fout ) ) return Standard_False;
|
|
#ifdef OCCT_DEBUG
|
|
cout<<" Ecriture fichier ("<< (fnes ? "fnes" : "IGES") <<"): "<<file<<endl;
|
|
#endif
|
|
Standard_Boolean res = Write (fout,fnes);
|
|
|
|
errno = 0;
|
|
- fout.close();
|
|
+ CLOSE_STREAM( fout );
|
|
res = fout.good() && res && !errno;
|
|
|
|
return res;
|
|
diff --git a/src/IGESSelect/IGESSelect_WorkLibrary.cxx b/src/IGESSelect/IGESSelect_WorkLibrary.cxx
|
|
index b7f0aa490..dcf1e747b 100644
|
|
--- a/src/IGESSelect/IGESSelect_WorkLibrary.cxx
|
|
+++ b/src/IGESSelect/IGESSelect_WorkLibrary.cxx
|
|
@@ -97,9 +97,8 @@ static Handle(IGESData_FileProtocol) IGESProto;
|
|
DeclareAndCast(IGESData_Protocol,prot,ctx.Protocol());
|
|
|
|
if (igesmod.IsNull() || prot.IsNull()) return Standard_False;
|
|
- ofstream fout;
|
|
- OSD_OpenStream(fout,ctx.FileName(),ios::out );
|
|
- if (!fout) {
|
|
+ OPEN_OSTREAM( fout, ctx.FileName() );
|
|
+ if( !IS_OPEN( fout ) ) {
|
|
ctx.CCheck(0)->AddFail("IGES File could not be created");
|
|
sout<<" - IGES File could not be created : " << ctx.FileName() << endl; return 0;
|
|
}
|
|
@@ -127,7 +126,7 @@ static Handle(IGESData_FileProtocol) IGESProto;
|
|
Standard_Boolean status = VW.Print(fout); sout<<" Done"<<endl;
|
|
|
|
errno = 0;
|
|
- fout.close();
|
|
+ CLOSE_STREAM( fout );
|
|
status = fout.good() && status && !errno;
|
|
if(errno)
|
|
sout << strerror(errno) << endl;
|
|
diff --git a/src/OSD/OSD_MAllocHook.cxx b/src/OSD/OSD_MAllocHook.cxx
|
|
index e9e3d9c68..aba7afa21 100644
|
|
--- a/src/OSD/OSD_MAllocHook.cxx
|
|
+++ b/src/OSD/OSD_MAllocHook.cxx
|
|
@@ -14,6 +14,7 @@
|
|
// commercial license or contractual agreement.
|
|
|
|
#include <OSD_MAllocHook.hxx>
|
|
+#include <OSD_OpenFile.hxx>
|
|
|
|
#if !defined(WNT) || defined(__MINGW32__) || defined(__BORLANDC__)
|
|
#if !defined __STDC_LIMIT_MACROS
|
|
@@ -205,7 +206,8 @@ void OSD_MAllocHook::SetCallback(Callback* theCB)
|
|
OSD_MAllocHook::LogFileHandler::LogFileHandler()
|
|
: myBreakSize(0)
|
|
{
|
|
- myLogFile.imbue (std::locale ("C"));
|
|
+ myLogFile = NULL;
|
|
+ m_wrapper = new STREAM_WRAPPER;
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -216,6 +218,7 @@ OSD_MAllocHook::LogFileHandler::LogFileHandler()
|
|
OSD_MAllocHook::LogFileHandler::~LogFileHandler()
|
|
{
|
|
Close();
|
|
+ delete m_wrapper;
|
|
}
|
|
|
|
//=======================================================================
|
|
@@ -226,13 +229,15 @@ OSD_MAllocHook::LogFileHandler::~LogFileHandler()
|
|
Standard_Boolean OSD_MAllocHook::LogFileHandler::Open(const char* theFileName)
|
|
{
|
|
Close();
|
|
- myLogFile.open (theFileName);
|
|
- if (!myLogFile.is_open())
|
|
+ myLogFile = m_wrapper->Open( theFileName, ios::out );
|
|
+
|
|
+ if (!m_wrapper->IsOpen())
|
|
{
|
|
return Standard_False;
|
|
}
|
|
|
|
- myLogFile << "Operation type; Request Number; Block Size\n"
|
|
+ myLogFile->imbue (std::locale ("C"));
|
|
+ (*myLogFile) << "Operation type; Request Number; Block Size\n"
|
|
"------------------------------------------\n";
|
|
return Standard_True;
|
|
}
|
|
@@ -244,9 +249,10 @@ Standard_Boolean OSD_MAllocHook::LogFileHandler::Open(const char* theFileName)
|
|
|
|
void OSD_MAllocHook::LogFileHandler::Close()
|
|
{
|
|
- if (myLogFile.is_open())
|
|
+ if ( m_wrapper->IsOpen() )
|
|
{
|
|
- myLogFile.close();
|
|
+ m_wrapper->Init();
|
|
+ myLogFile = NULL;
|
|
}
|
|
}
|
|
|
|
@@ -371,11 +377,13 @@ Standard_Boolean OSD_MAllocHook::LogFileHandler::MakeReport
|
|
fclose(aLogFile);
|
|
|
|
// print the report
|
|
- std::ofstream aRepFile (theOutFile);
|
|
- if(!aRepFile.is_open())
|
|
+ OPEN_STREAM( aRepFile, theOutFile, ios::out );
|
|
+
|
|
+ if( !IS_OPEN( aRepFile ) )
|
|
{
|
|
return Standard_False;
|
|
}
|
|
+
|
|
aRepFile.imbue (std::locale ("C"));
|
|
|
|
aRepFile << std::setw(20) << "BlockSize "
|
|
@@ -424,7 +432,7 @@ Standard_Boolean OSD_MAllocHook::LogFileHandler::MakeReport
|
|
<< std::setw(20) << aTotalLeftSize << ' '
|
|
<< std::setw(20) << aTotalPeakSize << std::endl;
|
|
|
|
- aRepFile.close();
|
|
+ CLOSE_STREAM( aRepFile );
|
|
return Standard_True;
|
|
}
|
|
|
|
@@ -437,10 +445,10 @@ void OSD_MAllocHook::LogFileHandler::AllocEvent
|
|
(size_t theSize,
|
|
long theRequestNum)
|
|
{
|
|
- if (myLogFile.is_open())
|
|
+ if ( m_wrapper->IsOpen())
|
|
{
|
|
myMutex.Lock();
|
|
- myLogFile << "alloc "<< std::setw(10) << theRequestNum
|
|
+ (*myLogFile) << "alloc "<< std::setw(10) << theRequestNum
|
|
<< std::setw(20) << theSize << std::endl;
|
|
if (myBreakSize == theSize)
|
|
place_for_breakpoint();
|
|
@@ -458,10 +466,10 @@ void OSD_MAllocHook::LogFileHandler::FreeEvent
|
|
size_t theSize,
|
|
long theRequestNum)
|
|
{
|
|
- if (myLogFile.is_open())
|
|
+ if (m_wrapper->IsOpen())
|
|
{
|
|
myMutex.Lock();
|
|
- myLogFile << "free " << std::setw(20) << theRequestNum
|
|
+ (*myLogFile) << "free " << std::setw(20) << theRequestNum
|
|
<< std::setw(20) << theSize << std::endl;
|
|
myMutex.Unlock();
|
|
}
|
|
@@ -528,8 +536,8 @@ void OSD_MAllocHook::CollectBySize::Reset()
|
|
Standard_Boolean OSD_MAllocHook::CollectBySize::MakeReport(const char* theOutFile)
|
|
{
|
|
// print the report
|
|
- std::ofstream aRepFile(theOutFile);
|
|
- if (!aRepFile.is_open())
|
|
+ OPEN_STREAM( aRepFile, theOutFile, ios::out );
|
|
+ if( !IS_OPEN( aRepFile ) )
|
|
return Standard_False;
|
|
std::locale aCLoc("C");
|
|
aRepFile.imbue(aCLoc);
|
|
@@ -575,7 +583,7 @@ Standard_Boolean OSD_MAllocHook::CollectBySize::MakeReport(const char* theOutFil
|
|
<< std::setw(20) << aTotAlloc << ' '
|
|
<< std::setw(20) << myTotalLeftSize << ' '
|
|
<< std::setw(20) << myTotalPeakSize << std::endl;
|
|
- aRepFile.close();
|
|
+ CLOSE_STREAM( aRepFile );
|
|
return Standard_True;
|
|
}
|
|
|
|
diff --git a/src/OSD/OSD_MAllocHook.hxx b/src/OSD/OSD_MAllocHook.hxx
|
|
index 175a58857..fd1840a7d 100644
|
|
--- a/src/OSD/OSD_MAllocHook.hxx
|
|
+++ b/src/OSD/OSD_MAllocHook.hxx
|
|
@@ -19,7 +19,9 @@
|
|
#include <Standard_TypeDef.hxx>
|
|
#include <Standard_Mutex.hxx>
|
|
#include <stdio.h>
|
|
-#include <fstream>
|
|
+#include <iostream>
|
|
+
|
|
+class STREAM_WRAPPER;
|
|
|
|
/**
|
|
* This class provides the possibility to set callback for memory
|
|
@@ -101,7 +103,8 @@ public:
|
|
Standard_EXPORT virtual void FreeEvent(void*, size_t, long);
|
|
|
|
private:
|
|
- std::ofstream myLogFile;
|
|
+ STREAM_WRAPPER* m_wrapper;
|
|
+ std::ostream* myLogFile;
|
|
Standard_Mutex myMutex;
|
|
size_t myBreakSize;
|
|
};
|
|
diff --git a/src/OSD/OSD_OpenFile.cxx b/src/OSD/OSD_OpenFile.cxx
|
|
index 32e5ccd07..1530afccf 100644
|
|
--- a/src/OSD/OSD_OpenFile.cxx
|
|
+++ b/src/OSD/OSD_OpenFile.cxx
|
|
@@ -11,6 +11,7 @@
|
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
|
// commercial license or contractual agreement.
|
|
|
|
+#include <locale>
|
|
#include <OSD_OpenFile.hxx>
|
|
#include <TCollection_ExtendedString.hxx>
|
|
#include <NCollection_UtfString.hxx>
|
|
@@ -23,7 +24,7 @@ FILE* OSD_OpenFile(const char* theName,
|
|
const char* theMode)
|
|
{
|
|
FILE* aFile = 0;
|
|
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__)
|
|
+#if defined(_WIN32)
|
|
// file name is treated as UTF-8 string and converted to UTF-16 one
|
|
const TCollection_ExtendedString aFileNameW (theName, Standard_True);
|
|
const TCollection_ExtendedString aFileModeW (theMode, Standard_True);
|
|
@@ -43,7 +44,7 @@ FILE* OSD_OpenFile(const TCollection_ExtendedString& theName,
|
|
const char* theMode)
|
|
{
|
|
FILE* aFile = 0;
|
|
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__)
|
|
+#if defined(_WIN32)
|
|
const TCollection_ExtendedString aFileModeW (theMode, Standard_True);
|
|
aFile = ::_wfopen ((const wchar_t* )theName.ToExtString(),
|
|
(const wchar_t* )aFileModeW.ToExtString());
|
|
@@ -55,71 +56,123 @@ FILE* OSD_OpenFile(const TCollection_ExtendedString& theName,
|
|
return aFile;
|
|
}
|
|
|
|
-// ==============================================
|
|
-// function : OSD_OpenFileBuf
|
|
-// purpose : Opens file buffer
|
|
-// ==============================================
|
|
-void OSD_OpenFileBuf(std::filebuf& theBuff,
|
|
- const char* theName,
|
|
- const std::ios_base::openmode theMode)
|
|
+#include <iostream>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+#include <fcntl.h>
|
|
+
|
|
+
|
|
+STREAM_WRAPPER::STREAM_WRAPPER()
|
|
{
|
|
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__)
|
|
- // file name is treated as UTF-8 string and converted to UTF-16 one
|
|
- const TCollection_ExtendedString aFileNameW (theName, Standard_True);
|
|
- theBuff.open ((const wchar_t* )aFileNameW.ToExtString(), theMode);
|
|
-#else
|
|
- theBuff.open (theName, theMode);
|
|
-#endif
|
|
+ m_buf = NULL;
|
|
+ m_stream = NULL;
|
|
+ return;
|
|
}
|
|
|
|
-// ==============================================
|
|
-// function : OSD_OpenFileBuf
|
|
-// purpose : Opens file buffer
|
|
-// ==============================================
|
|
-void OSD_OpenFileBuf(std::filebuf& theBuff,
|
|
- const TCollection_ExtendedString& theName,
|
|
- const std::ios_base::openmode theMode)
|
|
+
|
|
+STREAM_WRAPPER::~STREAM_WRAPPER()
|
|
{
|
|
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__)
|
|
- theBuff.open ((const wchar_t* )theName.ToExtString(), theMode);
|
|
-#else
|
|
- // conversion in UTF-8 for linux
|
|
- NCollection_Utf8String aString((const Standard_Utf16Char*)theName.ToExtString());
|
|
- theBuff.open (aString.ToCString(),theMode);
|
|
-#endif
|
|
+ if( NULL != m_stream )
|
|
+ delete m_stream;
|
|
+
|
|
+ if( NULL != m_buf )
|
|
+ {
|
|
+ m_buf->close(); // ensure file is closed regardless of m_buf's destructor
|
|
+ delete m_buf;
|
|
+ }
|
|
+
|
|
+ return;
|
|
}
|
|
|
|
-// ==============================================
|
|
-// function : OSD_OpenStream
|
|
-// purpose : Opens file stream
|
|
-// ==============================================
|
|
-void OSD_OpenStream(std::ofstream& theStream,
|
|
- const char* theName,
|
|
- const std::ios_base::openmode theMode)
|
|
+
|
|
+std::iostream* STREAM_WRAPPER::Open( const char* aFileName, std::ios_base::openmode aMode )
|
|
{
|
|
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__)
|
|
- // file name is treated as UTF-8 string and converted to UTF-16 one
|
|
- const TCollection_ExtendedString aFileNameW (theName, Standard_True);
|
|
- theStream.open ((const wchar_t* )aFileNameW.ToExtString(), theMode);
|
|
-#else
|
|
- theStream.open (theName, theMode);
|
|
-#endif
|
|
+ if( NULL != m_stream )
|
|
+ {
|
|
+ delete m_stream;
|
|
+ m_stream = NULL;
|
|
+ }
|
|
+
|
|
+ if( NULL != m_buf )
|
|
+ {
|
|
+ m_buf->close();
|
|
+ delete m_buf;
|
|
+ }
|
|
+
|
|
+ int flags = 0;
|
|
+
|
|
+ if( aMode & std::ios_base::app )
|
|
+ flags |= _O_APPEND;
|
|
+
|
|
+ if( aMode & std::ios_base::out && aMode & std::ios_base::in )
|
|
+ flags |= _O_RDWR;
|
|
+ else if( aMode & std::ios_base::out )
|
|
+ flags |= _O_WRONLY;
|
|
+ else if( aMode & std::ios_base::in )
|
|
+ flags |= _O_RDONLY;
|
|
+
|
|
+ if( aMode & std::ios_base::binary )
|
|
+ flags |= _O_BINARY;
|
|
+
|
|
+ if( aMode & std::ios_base::out && aMode & std::ios_base::trunc
|
|
+ && !( aMode & std::ios_base::app ) && !( aMode & std::ios_base::ate ) )
|
|
+ flags |= _O_TRUNC;
|
|
+
|
|
+ if( aMode & std::ios_base::out )
|
|
+ flags |= _O_CREAT;
|
|
+
|
|
+ // convert from UTF8 to wchar_t
|
|
+ const TCollection_ExtendedString aFileNameW( aFileName, Standard_True);
|
|
+
|
|
+ int fd = _wopen( (const wchar_t* )aFileNameW.ToExtString(), flags, _S_IREAD | _S_IWRITE );
|
|
+
|
|
+ if( fd >= 0 && aMode & std::ios_base::ate )
|
|
+ lseek( fd, 0, SEEK_END );
|
|
+
|
|
+ m_buf = new __gnu_cxx::stdio_filebuf<char>( fd, aMode );
|
|
+
|
|
+ m_stream = new std::iostream( m_buf );
|
|
+
|
|
+ return m_stream;
|
|
}
|
|
|
|
-// ==============================================
|
|
-// function : OSD_OpenStream
|
|
-// purpose : Opens file stream
|
|
-// ==============================================
|
|
-void OSD_OpenStream(std::ofstream& theStream,
|
|
- const TCollection_ExtendedString& theName,
|
|
- const std::ios_base::openmode theMode)
|
|
+
|
|
+void STREAM_WRAPPER::Close( void )
|
|
{
|
|
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__)
|
|
- theStream.open ((const wchar_t* )theName.ToExtString(), theMode);
|
|
-#else
|
|
- // conversion in UTF-8 for linux
|
|
- NCollection_Utf8String aString((const Standard_Utf16Char*)theName.ToExtString());
|
|
- theStream.open (aString.ToCString(),theMode);
|
|
-#endif
|
|
+ if( m_buf )
|
|
+ m_buf->close();
|
|
+
|
|
+ return;
|
|
+}
|
|
+
|
|
+
|
|
+void STREAM_WRAPPER::Init( void )
|
|
+{
|
|
+ if( m_stream )
|
|
+ {
|
|
+ delete m_stream;
|
|
+ m_stream = NULL;
|
|
+ }
|
|
+
|
|
+ if( m_buf )
|
|
+ {
|
|
+ m_buf->close();
|
|
+ delete m_buf;
|
|
+ m_buf = NULL;
|
|
+ }
|
|
+}
|
|
+
|
|
+
|
|
+std::iostream* STREAM_WRAPPER::GetStream( void )
|
|
+{
|
|
+ return m_stream;
|
|
}
|
|
|
|
+
|
|
+bool STREAM_WRAPPER::IsOpen( void )
|
|
+{
|
|
+ if( NULL == m_buf )
|
|
+ return false;
|
|
+
|
|
+ return m_buf->is_open();
|
|
+}
|
|
diff --git a/src/OSD/OSD_OpenFile.hxx b/src/OSD/OSD_OpenFile.hxx
|
|
index 5c4a70aaf..bc9c13339 100644
|
|
--- a/src/OSD/OSD_OpenFile.hxx
|
|
+++ b/src/OSD/OSD_OpenFile.hxx
|
|
@@ -23,39 +23,48 @@
|
|
|
|
#include <fstream>
|
|
#include <TCollection_ExtendedString.hxx>
|
|
+#include <ext/stdio_filebuf.h>
|
|
|
|
-//! Function opens the file stream.
|
|
-//! @param theStream stream to open
|
|
-//! @param theName name of file encoded in UTF-8
|
|
-//! @param theMode opening mode
|
|
-__Standard_API void OSD_OpenStream (std::ofstream& theStream,
|
|
- const char* theName,
|
|
- const std::ios_base::openmode theMode);
|
|
|
|
-//! Function opens the file stream.
|
|
-//! @param theStream stream to open
|
|
-//! @param theName name of file encoded in UTF-16
|
|
-//! @param theMode opening mode
|
|
-__Standard_API void OSD_OpenStream (std::ofstream& theStream,
|
|
- const TCollection_ExtendedString& theName,
|
|
- const std::ios_base::openmode theMode);
|
|
+#define OPEN_OSTREAM( var, name ) \
|
|
+ STREAM_WRAPPER var ## _BUF_; \
|
|
+ std::ostream& var = *var ## _BUF_.Open( name, std::ios_base::out | std::ios_base::trunc | std::ios_base::binary )
|
|
|
|
-//! Function opens the file buffer.
|
|
-//! @param theBuff file buffer to open
|
|
-//! @param theName name of file encoded in UTF-8
|
|
-//! @param theMode opening mode
|
|
-__Standard_API void OSD_OpenFileBuf (std::filebuf& theBuff,
|
|
- const char* theName,
|
|
- const std::ios_base::openmode theMode);
|
|
+#define OPEN_ISTREAM( var, name ) \
|
|
+ STREAM_WRAPPER var ## _BUF_; \
|
|
+ std::istream& var = *var ## _BUF_.Open( name, std::ios_base::in | std::ios_base::binary )
|
|
|
|
-//! Function opens the file buffer.
|
|
-//! @param theBuff file buffer to open
|
|
-//! @param theName name of file encoded in UTF-16
|
|
-//! @param theMode opening mode
|
|
-__Standard_API void OSD_OpenFileBuf (std::filebuf& theBuff,
|
|
- const TCollection_ExtendedString& theName,
|
|
- const std::ios_base::openmode theMode);
|
|
+#define OPEN_IOSTREAM( var, name ) \
|
|
+ STREAM_WRAPPER var ## _BUF_; \
|
|
+ std::iostream& var = *var ## _BUF_.Open( name, std::ios_base::out | std::ios_base::in | std::ios_base::binary )
|
|
+
|
|
+#define OPEN_STREAM( var, name, mode ) \
|
|
+ STREAM_WRAPPER var ## _BUF_; \
|
|
+ std::iostream& var = *var ## _BUF_.Open( name, mode )
|
|
+
|
|
+#define IS_OPEN( var ) var ## _BUF_.IsOpen()
|
|
+
|
|
+#define CLOSE_STREAM( var ) var ## _BUF_.Close()
|
|
+
|
|
+class STREAM_WRAPPER
|
|
+{
|
|
+private:
|
|
+ __gnu_cxx::stdio_filebuf<char>* m_buf;
|
|
+ std::iostream* m_stream;
|
|
+
|
|
+public:
|
|
+ STREAM_WRAPPER();
|
|
+ virtual ~STREAM_WRAPPER();
|
|
+
|
|
+ std::iostream* Open( const char* aFileName, std::ios_base::openmode aMode );
|
|
+ void Close( void );
|
|
+
|
|
+ std::iostream* GetStream( void );
|
|
+
|
|
+ bool IsOpen( void );
|
|
|
|
+ void Init( void );
|
|
+};
|
|
|
|
//! Function opens the file.
|
|
//! @param theName name of file encoded in UTF-16
|
|
diff --git a/src/StepSelect/StepSelect_WorkLibrary.cxx b/src/StepSelect/StepSelect_WorkLibrary.cxx
|
|
index 5ff57af96..e822cbef1 100644
|
|
--- a/src/StepSelect/StepSelect_WorkLibrary.cxx
|
|
+++ b/src/StepSelect/StepSelect_WorkLibrary.cxx
|
|
@@ -12,6 +12,7 @@
|
|
// commercial license or contractual agreement.
|
|
|
|
#include <StepSelect_WorkLibrary.ixx>
|
|
+#include <OSD_OpenFile.hxx>
|
|
|
|
#include <sys/stat.h>
|
|
#include <errno.h>
|
|
@@ -84,10 +85,11 @@ Standard_Boolean StepSelect_WorkLibrary::WriteFile
|
|
DeclareAndCast(StepData_Protocol,stepro,ctx.Protocol());
|
|
if (stepmodel.IsNull() || stepro.IsNull()) return Standard_False;
|
|
|
|
- ofstream fout;
|
|
- OSD_OpenStream(fout,ctx.FileName(),ios::out|ios::trunc);
|
|
+ OPEN_OSTREAM( fout, ctx.FileName() );
|
|
+ // XXX - ofstream fout;
|
|
+ // XXX - OSD_OpenStream(fout,ctx.FileName(),ios::out|ios::trunc);
|
|
|
|
- if (!fout || !fout.rdbuf()->is_open()) {
|
|
+ if (!IS_OPEN(fout)) {
|
|
ctx.CCheck(0)->AddFail("Step File could not be created");
|
|
sout<<" Step File could not be created : " << ctx.FileName() << endl; return 0;
|
|
}
|
|
@@ -118,7 +120,7 @@ Standard_Boolean StepSelect_WorkLibrary::WriteFile
|
|
sout<<" Done"<<endl;
|
|
|
|
errno = 0;
|
|
- fout.close();
|
|
+ CLOSE_STREAM( fout );
|
|
isGood = fout.good() && isGood && !errno;
|
|
if(errno)
|
|
sout << strerror(errno) << endl;
|
|
diff --git a/src/VrmlAPI/VrmlAPI_Writer.cxx b/src/VrmlAPI/VrmlAPI_Writer.cxx
|
|
index a31c9d203..615934de2 100644
|
|
--- a/src/VrmlAPI/VrmlAPI_Writer.cxx
|
|
+++ b/src/VrmlAPI/VrmlAPI_Writer.cxx
|
|
@@ -216,8 +216,7 @@ void VrmlAPI_Writer::Write(const TopoDS_Shape& aShape,const Standard_CString aFi
|
|
{
|
|
OSD_Path thePath(aFile);
|
|
TCollection_AsciiString theFile;thePath.SystemName(theFile);
|
|
- ofstream outfile;
|
|
- OSD_OpenStream(outfile, theFile.ToCString(), ios::out);
|
|
+ OPEN_OSTREAM( outfile, theFile.ToCString() );
|
|
Handle(VrmlConverter_IsoAspect) ia = new VrmlConverter_IsoAspect; // UIso
|
|
Handle(VrmlConverter_IsoAspect) ia1 = new VrmlConverter_IsoAspect; //VIso
|
|
ia->SetMaterial(myUisoMaterial);
|
|
@@ -315,6 +314,7 @@ void VrmlAPI_Writer::Write(const TopoDS_Shape& aShape,const Standard_CString aFi
|
|
Group2.Print(outfile);
|
|
}
|
|
S2.Print(outfile);
|
|
- S1.Print(outfile);
|
|
+ S1.Print(outfile);
|
|
+ CLOSE_STREAM( outfile );
|
|
}
|
|
|
|
--
|
|
2.11.0
|
|
|