Index: OpenSceneGraph/trunk/src/osgPlugins/ply/plyfile.cpp
===================================================================
--- OpenSceneGraph/trunk/src/osgPlugins/ply/plyfile.cpp (revision 10014)
+++ OpenSceneGraph/trunk/src/osgPlugins/ply/plyfile.cpp (revision 10040)
@@ -40,8 +40,12 @@
 
 #include "ply.h"
+#include"typedefs.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
+
+
 
 #ifdef WIN32
@@ -316,4 +320,6 @@
 
   plyfile = ply_write (fp, nelems, elem_names, file_type);
+
+  // If the plyfile could not load return NULL
   if (plyfile == NULL)
     return (NULL);
@@ -354,6 +360,7 @@
   elem = find_element (plyfile, elem_name);
   if (elem == NULL) {
-    fprintf(stderr,"ply_describe_element: can't find element '%s'\n",elem_name);
-    exit (-1);
+    char error[100];
+    sprintf (error, "ply_describe_element: can't find element '%s'\n",elem_name);
+    throw ply::MeshException( error );
   }
 
@@ -501,6 +508,7 @@
   elem = find_element (plyfile, elem_name);
   if (elem == NULL) {
-    fprintf(stderr,"ply_element_count: can't find element '%s'\n",elem_name);
-    exit (-1);
+    char error[100];
+    sprintf (error, "ply_element_count: can't find element '%s'\n",elem_name);
+    throw ply::MeshException( error );
   }
 
@@ -537,7 +545,8 @@
       break;
     default:
-      fprintf (stderr, "ply_header_complete: bad file type = %d\n",
+      char error[100];
+      sprintf (error, "ply_header_complete: bad file type = %d\n",
                plyfile->file_type);
-      exit (-1);
+      throw ply::MeshException( error );
   }
 
@@ -596,6 +605,7 @@
   elem = find_element (plyfile, elem_name);
   if (elem == NULL) {
-    fprintf(stderr, "ply_elements_setup: can't find element '%s'\n", elem_name);
-    exit (-1);
+    char error[100];
+    sprintf (error, "ply_elements_setup: can't find element '%s'\n", elem_name);
+    throw ply::MeshException( error );
   }
 
@@ -941,4 +951,10 @@
   plyfile = ply_read (fp, nelems, elem_names);
 
+  if(!plyfile)
+  {
+    std::cout<<"Ply File Error : Could not read file"<<std::endl;
+    return NULL;
+  }
+
   /* determine the file type and version */
 
@@ -1331,7 +1347,7 @@
   elem = find_element (plyfile, elem_name);
   if (elem == NULL) {
-    fprintf (stderr,
-             "ply_get_other_element: can't find element '%s'\n", elem_name);
-    exit (-1);
+    char error[100];
+    sprintf (error, "ply_get_other_element: can't find element '%s'\n", elem_name);
+    throw ply::MeshException( error );
   }
 
@@ -1651,6 +1667,7 @@
   words = get_words (plyfile->fp, &nwords, &orig_line);
   if (words == NULL) {
-    fprintf (stderr, "ply_get_element: unexpected end of file\n");
-    exit (-1);
+    char error[100];
+    sprintf (error, "ply_get_element: unexpected end of file\n");
+    throw ply::MeshException( error );
   }
 
@@ -1848,6 +1865,7 @@
 
   if (code <= PLY_START_TYPE || code >= PLY_END_TYPE) {
-    fprintf (stderr, "write_scalar_type: bad data code = %d\n", code);
-    exit (-1);
+    char error[100];
+    sprintf (error, "write_scalar_type: bad data code = %d\n", code);
+    throw ply::MeshException( error );
   }
 
@@ -2119,6 +2137,7 @@
       break;
     default:
-      fprintf (stderr, "write_binary_item: bad type = %d\n", type);
-      exit (-1);
+      char error[100];
+      sprintf (error, "write_binary_item: bad type = %d\n", type);
+      throw ply::MeshException( error );
   }
 }
@@ -2163,6 +2182,7 @@
       break;
     default:
-      fprintf (stderr, "write_ascii_item: bad type = %d\n", type);
-      exit (-1);
+      char error[100];
+      sprintf (error, "write_ascii_item: bad type = %d\n", type);
+      throw ply::MeshException( error );
   }
 }
@@ -2235,6 +2255,7 @@
       break;
     default:
-      fprintf (stderr, "get_stored_item: bad type = %d\n", type);
-      exit (-1);
+      char error[100];
+      sprintf (error, "get_stored_item: bad type = %d\n", type);
+      throw ply::MeshException( error );
   }
 }
@@ -2267,8 +2288,14 @@
 
   ptr = (void *) c;
+  size_t result = 0;
 
   switch (type) {
     case PLY_CHAR:
-      fread (ptr, 1, 1, plyfile->fp);
+      result = fread (ptr, 1, 1, plyfile->fp);
+      if(result < 1)
+      {
+          throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+      }
       *int_val = *((char *) ptr);
       *uint_val = *int_val;
@@ -2277,5 +2304,10 @@
       case PLY_UCHAR:
       case PLY_UINT8:
-          fread (ptr, 1, 1, plyfile->fp);
+          result = fread (ptr, 1, 1, plyfile->fp);
+          if(result < 1)
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           *uint_val = *((unsigned char *) ptr);
           *int_val = *uint_val;
@@ -2283,5 +2315,10 @@
           break;
       case PLY_SHORT:
-          fread (ptr, 2, 1, plyfile->fp);
+          result = fread (ptr, 2, 1, plyfile->fp);
+          if(result < 1 )
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           if( plyfile->file_type == PLY_BINARY_BE )
           {
@@ -2297,5 +2334,10 @@
           break;
       case PLY_USHORT:
-          fread (ptr, 2, 1, plyfile->fp);
+          result = fread (ptr, 2, 1, plyfile->fp);
+          if(result < 1)
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           if( plyfile->file_type == PLY_BINARY_BE )
           {
@@ -2312,5 +2354,10 @@
       case PLY_INT:
       case PLY_INT32:
-          fread (ptr, 4, 1, plyfile->fp);
+          result = fread (ptr, 4, 1, plyfile->fp);
+          if(result < 1)
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           if( plyfile->file_type == PLY_BINARY_BE )
           {
@@ -2326,5 +2373,10 @@
           break;
       case PLY_UINT:
-          fread (ptr, 4, 1, plyfile->fp);
+          result = fread (ptr, 4, 1, plyfile->fp);
+          if(result < 1)
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           if( plyfile->file_type == PLY_BINARY_BE )
           {
@@ -2341,5 +2393,10 @@
       case PLY_FLOAT:
       case PLY_FLOAT32:
-          fread (ptr, 4, 1, plyfile->fp);
+          result = fread (ptr, 4, 1, plyfile->fp);
+          if(result < 1)
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           if( plyfile->file_type == PLY_BINARY_BE )
           {
@@ -2355,5 +2412,10 @@
           break;
       case PLY_DOUBLE:
-          fread (ptr, 8, 1, plyfile->fp);
+          result = fread (ptr, 8, 1, plyfile->fp);
+          if(!result < 1)
+          {
+              throw ply::MeshException( "Error in reading PLY file."
+                                 "fread not succeeded." );
+          }
           if( plyfile->file_type == PLY_BINARY_BE )
           {
@@ -2369,6 +2431,7 @@
       break;
     default:
-      fprintf (stderr, "get_binary_item: bad type = %d\n", type);
-      exit (-1);
+      char error[100];
+      sprintf (error, "get_binary_item: bad type = %d\n", type);
+      throw ply::MeshException( error );
   }
 }
@@ -2425,6 +2488,7 @@
 
     default:
-      fprintf (stderr, "get_ascii_item: bad type = %d\n", type);
-      exit (-1);
+      char error[100];
+      sprintf (error, "get_ascii_item: bad type = %d\n", type);
+      throw ply::MeshException( error );
   }
 }
@@ -2497,6 +2561,7 @@
       break;
     default:
-      fprintf (stderr, "store_item: bad type = %d\n", type);
-      exit (-1);
+      char error[100];
+      sprintf (error, "store_item: bad type = %d\n", type);
+      throw ply::MeshException( error );
   }
 }
