[vtk-developers] EOF Errors from vtk3DSImporter

Kevin H. Hobbs hobbsk at ohio.edu
Thu Aug 8 14:09:28 EDT 2013


On 08/08/2013 10:33 AM, Kevin H. Hobbs wrote:
> 
> Maybe start_chunk could call new functions with names like peek_word and
> peek_dword that are just like read_word and read_dword but don't complain.
> 

The following makes all the errors go away:

diff --git a/IO/Import/vtk3DSImporter.cxx b/IO/Import/vtk3DSImporter.cxx
index 4bcba03..a58ba31 100644
--- a/IO/Import/vtk3DSImporter.cxx
+++ b/IO/Import/vtk3DSImporter.cxx
@@ -96,7 +96,9 @@ static void start_chunk (vtk3DSImporter *importer,
vtk3DSChunk *chunk);
 static void end_chunk (vtk3DSImporter *importer, vtk3DSChunk *chunk);
 static byte read_byte (vtk3DSImporter *importer);
 static word read_word (vtk3DSImporter *importer);
+static word peek_word (vtk3DSImporter *importer);
 static dword read_dword (vtk3DSImporter *importer);
+static dword peek_dword (vtk3DSImporter *importer);
 static float read_float (vtk3DSImporter *importer);
 static void read_point (vtk3DSImporter *importer, vtk3DSVector v);
 static char *read_string (vtk3DSImporter *importer);
@@ -1043,8 +1045,8 @@ static float parse_float_percentage(vtk3DSImporter
*importer)
 static void start_chunk (vtk3DSImporter *importer, vtk3DSChunk *chunk)
 {
   chunk->start  = ftell(importer->GetFileFD());
-  chunk->tag    = read_word(importer);
-  chunk->length = read_dword(importer);
+  chunk->tag    = peek_word(importer);
+  chunk->length = peek_dword(importer);
   if (chunk->length == 0)
     {
     chunk->length = 1;
@@ -1083,6 +1085,19 @@ static word read_word(vtk3DSImporter *importer)
   return data;
 }

+static word peek_word(vtk3DSImporter *importer)
+{
+  word data;
+
+  if (fread (&data, 2, 1, importer->GetFileFD()) != 1)
+    {
+    data = 0;
+    }
+  vtkByteSwap::Swap2LE ((short *) &data);
+  return data;
+}
+
+
 static dword read_dword(vtk3DSImporter *importer)
 {
   dword data;
@@ -1098,6 +1113,19 @@ static dword read_dword(vtk3DSImporter *importer)
   return data;
 }

+static dword peek_dword(vtk3DSImporter *importer)
+{
+  dword data;
+
+  if (fread (&data, 4, 1, importer->GetFileFD()) != 1)
+    {
+    data = 0;
+    }
+
+  vtkByteSwap::Swap4LE ((char *) &data);
+  return data;
+}
+

 static float read_float(vtk3DSImporter *importer)
 {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 255 bytes
Desc: OpenPGP digital signature
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20130808/19a71152/attachment.sig>


More information about the vtk-developers mailing list