Program: gdcm
Module: $RCSfile: gdcmDocument.cxx,v $
Language: C++
- Date: $Date: 2007/06/15 13:16:55 $
- Version: $Revision: 1.360 $
+ Date: $Date: 2007/06/18 11:10:17 $
+ Version: $Revision: 1.361 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
SetFileName("");
changeFromUN=false;
+ UnexpectedEOF=false;
}
/**
/**
* \brief Reads a given length of bytes
- * (in order to avoid to many CPU time consuming fread-s)
+ * (in order to avoid to many CPU time-consuming fread-s)
* @param l length to read
*/
void Document::ReadBegBuffer(size_t l)
<< " at offset 0x(" << std::hex
<< newDocEntry->GetOffset() << ")");
- ParseSQ( newSeqEntry,
- newDocEntry->GetOffset(),
- l, delim_mode_intern);
+ bool res = ParseSQ( newSeqEntry,
+ newDocEntry->GetOffset(),
+ l, delim_mode_intern);
- gdcmDebugMacro( "Exit from ParseSQ, delim " << delim_mode_intern);
+ gdcmDebugMacro( "Exit from ParseSQ, delim " << delim_mode_intern << " -->return : " << res);
}
if ( !set->AddEntry( newSeqEntry ) )
{
newDocEntry->Delete();
}
first = false;
+
+ if (UnexpectedEOF) // some terminator was missing
+ break;
} // end While
gdcmDebugMacro( "Exit from ParseDES, delim-mode " << delim_mode );
}
/**
* \brief Parses a Sequence ( SeqEntry after SeqEntry)
- * @return parsed length for this level
+ * @return false if expected fff0,e000 not found
*/
-void Document::ParseSQ( SeqEntry *seqEntry,
+bool Document::ParseSQ( SeqEntry *seqEntry,
long offset, long l_max, bool delim_mode)
{
int SQItemNumber = 0;
DocEntry *newDocEntry = ReadNextDocEntry();
if ( !newDocEntry )
- {
+ {
+ // The most frequent is when a SQ terminator is missing (?!?)
gdcmWarningMacro("in ParseSQ : should never get here!");
- break;
+ UnexpectedEOF = true;
+ return false;
+ //break;
}
if ( delim_mode )
{
break;
}
}
+ return true;
}
/**
}
}
}
-
+
// if UN found, let's check the dictionary, and trust it!
// (maybe a private dictionary exists?)
else if (vr == "UN")
}
}
+
DocEntry *newEntry;
//if ( Global::GetVR()->IsVROfSequence(realVR) )
if (realVR == "SQ")
Program: gdcm
Module: $RCSfile: gdcmDocument.h,v $
Language: C++
- Date: $Date: 2007/06/15 13:16:56 $
- Version: $Revision: 1.144 $
+ Date: $Date: 2007/06/18 11:10:17 $
+ Version: $Revision: 1.145 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
// Read
void ParseDES(DocEntrySet *set, long offset, long l_max, bool delim_mode);
- void ParseSQ (SeqEntry *seq, long offset, long l_max, bool delim_mode);
+ bool ParseSQ (SeqEntry *seq, long offset, long l_max, bool delim_mode);
void LoadDocEntry (DocEntry *e, bool forceLoad = false);
void FindDocEntryLength (DocEntry *e) throw ( FormatError );
/// \brief to indicate if last supposed to be UN DataElement is not
/// (according to a private Dicom dictionary)
bool changeFromUN;
+ /// \brief whether an unexpected EOF was encountered
+ bool UnexpectedEOF;
};
} // end namespace gdcm