]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PAL13000: Crash with 'import CALCULATOR_TEST_STUDY_WITHOUTIHM'
authorjfa <jfa@opencascade.com>
Tue, 8 Aug 2006 11:12:07 +0000 (11:12 +0000)
committerjfa <jfa@opencascade.com>
Tue, 8 Aug 2006 11:12:07 +0000 (11:12 +0000)
src/SALOMEDS/SALOMEDS_Study_i.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx

index b36531420076f9da2bcf559004abcb31fcb631d3..581682b6bce9bf66bedb537c13385d831c9d6422 100644 (file)
@@ -322,13 +322,21 @@ SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetObjectNames(const char* theContext
   SALOMEDS::Locker lock; 
 
   SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext()) throw SALOMEDS::Study::StudyInvalidContext();   
-  Handle(TColStd_HSequenceOfAsciiString) aSeq = _impl->GetObjectNames(TCollection_AsciiString((char*)theContext));
+
+  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
+    throw SALOMEDS::Study::StudyInvalidContext();
+
+  Handle(TColStd_HSequenceOfAsciiString) aSeq =
+    _impl->GetObjectNames(TCollection_AsciiString((char*)theContext));
+  if (_impl->GetErrorCode() == "InvalidContext")
+    throw SALOMEDS::Study::StudyInvalidContext();
+
   int aLength = aSeq->Length();
   aResult->length(aLength);
-  for(int anIndex = 1; anIndex <= aLength; anIndex++) {
+  for (int anIndex = 1; anIndex <= aLength; anIndex++) {
     aResult[anIndex-1] = CORBA::string_dup(TCollection_AsciiString(aSeq->Value(anIndex)).ToCString());
   }
+
   return aResult._retn();
 }
 
@@ -342,13 +350,21 @@ SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetDirectoryNames(const char* theCont
   SALOMEDS::Locker lock; 
 
   SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext()) throw SALOMEDS::Study::StudyInvalidContext();   
-  Handle(TColStd_HSequenceOfAsciiString) aSeq = _impl->GetDirectoryNames(TCollection_AsciiString((char*)theContext));
+
+  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
+    throw SALOMEDS::Study::StudyInvalidContext();
+
+  Handle(TColStd_HSequenceOfAsciiString) aSeq =
+    _impl->GetDirectoryNames(TCollection_AsciiString((char*)theContext));
+  if (_impl->GetErrorCode() == "InvalidContext")
+    throw SALOMEDS::Study::StudyInvalidContext();
+
   int aLength = aSeq->Length();
   aResult->length(aLength);
-  for(int anIndex = 1; anIndex <= aLength; anIndex++) {
+  for (int anIndex = 1; anIndex <= aLength; anIndex++) {
     aResult[anIndex-1] = CORBA::string_dup(TCollection_AsciiString(aSeq->Value(anIndex)).ToCString());
   }
+
   return aResult._retn();
 }
 
@@ -362,13 +378,21 @@ SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetFileNames(const char* theContext)
   SALOMEDS::Locker lock; 
 
   SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext()) throw SALOMEDS::Study::StudyInvalidContext();   
-  Handle(TColStd_HSequenceOfAsciiString) aSeq = _impl->GetFileNames(TCollection_AsciiString((char*)theContext));
+
+  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
+    throw SALOMEDS::Study::StudyInvalidContext();
+
+  Handle(TColStd_HSequenceOfAsciiString) aSeq =
+    _impl->GetFileNames(TCollection_AsciiString((char*)theContext));
+  if (_impl->GetErrorCode() == "InvalidContext")
+    throw SALOMEDS::Study::StudyInvalidContext();
+
   int aLength = aSeq->Length();
   aResult->length(aLength);
-  for(int anIndex = 1; anIndex <= aLength; anIndex++) {
+  for (int anIndex = 1; anIndex <= aLength; anIndex++) {
     aResult[anIndex-1] = CORBA::string_dup(TCollection_AsciiString(aSeq->Value(anIndex)).ToCString());
   }
+
   return aResult._retn();
 }
 
@@ -382,13 +406,19 @@ SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetComponentNames(const char* theCont
   SALOMEDS::Locker lock; 
 
   SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext()) throw SALOMEDS::Study::StudyInvalidContext();   
-  Handle(TColStd_HSequenceOfAsciiString) aSeq = _impl->GetComponentNames(TCollection_AsciiString((char*)theContext));
+
+  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
+    throw SALOMEDS::Study::StudyInvalidContext();
+
+  Handle(TColStd_HSequenceOfAsciiString) aSeq =
+    _impl->GetComponentNames(TCollection_AsciiString((char*)theContext));
+
   int aLength = aSeq->Length();
   aResult->length(aLength);
   for(int anIndex = 1; anIndex <= aLength; anIndex++) {
     aResult[anIndex-1] = CORBA::string_dup(TCollection_AsciiString(aSeq->Value(anIndex)).ToCString());
   }
+
   return aResult._retn();
 }
 
index 78e9ee86977723bf1be850999c251d182a623343..22935f06b92d00e824d3a100f986db2dfbf7c08e 100644 (file)
@@ -577,10 +577,6 @@ Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetObjectNames(const
   Handle(TColStd_HSequenceOfAsciiString) aResultSeq = new TColStd_HSequenceOfAsciiString;
   TDF_Label aLabel;
   if (theContext.IsEmpty()) {
-    if(_current.IsNull()) {
-      _errorCode = "InvalidContext";
-      return aResultSeq;
-    }
     aLabel = _current;
   } else {
     TDF_Label aTmp = _current;
@@ -588,8 +584,13 @@ Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetObjectNames(const
     aLabel = _current;
     _current = aTmp;
   }
-  TDF_ChildIterator anIter(aLabel, Standard_False); // iterate all subchildren at all sublevels
-  for(; anIter.More(); anIter.Next()) {
+  if (aLabel.IsNull()) {
+    _errorCode = "InvalidContext";
+    return aResultSeq;
+  }
+
+  TDF_ChildIterator anIter (aLabel, Standard_False); // iterate all subchildren at all sublevels
+  for (; anIter.More(); anIter.Next()) {
     TDF_Label aLabel = anIter.Value();
     Handle(SALOMEDSImpl_AttributeName) aName;
     if (aLabel.FindAttribute(SALOMEDSImpl_AttributeName::GetID(), aName)) aResultSeq->Append(aName->Value());
@@ -610,10 +611,6 @@ Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetDirectoryNames(con
   Handle(TColStd_HSequenceOfAsciiString) aResultSeq = new TColStd_HSequenceOfAsciiString;
   TDF_Label aLabel;
   if (theContext.IsEmpty()) {
-    if(_current.IsNull()) {
-      _errorCode = "InvalidContext";
-      return aResultSeq;
-    }
     aLabel = _current;
   } else {
     TDF_Label aTmp = _current;
@@ -621,8 +618,13 @@ Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetDirectoryNames(con
     aLabel = _current;
     _current = aTmp;
   }
-  TDF_ChildIterator anIter(aLabel, Standard_False); // iterate first-level children at all sublevels
-  for(; anIter.More(); anIter.Next()) {
+  if (aLabel.IsNull()) {
+    _errorCode = "InvalidContext";
+    return aResultSeq;
+  }
+
+  TDF_ChildIterator anIter (aLabel, Standard_False); // iterate first-level children at all sublevels
+  for (; anIter.More(); anIter.Next()) {
     TDF_Label aLabel = anIter.Value();
     Handle(SALOMEDSImpl_AttributeLocalID) anID;
     if (aLabel.FindAttribute(SALOMEDSImpl_AttributeLocalID::GetID(), anID)) {
@@ -650,10 +652,6 @@ Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetFileNames(const TC
   Handle(TColStd_HSequenceOfAsciiString) aResultSeq = new TColStd_HSequenceOfAsciiString;
   TDF_Label aLabel;
   if (theContext.IsEmpty()) {
-    if(_current.IsNull()) {
-      _errorCode = "InvalidContext";
-      return aResultSeq;
-    }
     aLabel = _current;
   } else {
     TDF_Label aTmp = _current;
@@ -661,16 +659,21 @@ Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetFileNames(const TC
     aLabel = _current;
     _current = aTmp;
   }
-  TDF_ChildIterator anIter(aLabel, Standard_False); // iterate all subchildren at all sublevels
-  for(; anIter.More(); anIter.Next()) {
+  if (aLabel.IsNull()) {
+    _errorCode = "InvalidContext";
+    return aResultSeq;
+  }
+
+  TDF_ChildIterator anIter (aLabel, Standard_False); // iterate all subchildren at all sublevels
+  for (; anIter.More(); anIter.Next()) {
     TDF_Label aLabel = anIter.Value();
     Handle(SALOMEDSImpl_AttributeLocalID) anID;
     if (aLabel.FindAttribute(SALOMEDSImpl_AttributeLocalID::GetID(), anID)) {
       if (anID->Value() == FILELOCALID) {
        Handle(SALOMEDSImpl_AttributePersistentRef) aName;
-       if(aLabel.FindAttribute(SALOMEDSImpl_AttributePersistentRef::GetID(), aName)) {
+       if (aLabel.FindAttribute(SALOMEDSImpl_AttributePersistentRef::GetID(), aName)) {
          TCollection_ExtendedString aFileName = aName->Value();
-         if(aFileName.Length() > 0)
+         if (aFileName.Length() > 0)
            aResultSeq->Append(aFileName.Split(strlen(FILEID)));
        }
       }