Fix stream status handling everywhere PLY reader is used

This commit is contained in:
Simon Giraudot 2018-12-18 15:28:02 +01:00
parent 858d10070b
commit 1cfcb1ba5b
3 changed files with 23 additions and 12 deletions

View File

@ -394,7 +394,10 @@ read_ply_point_set(
internal::PLY::Point_set_3_filler<Point, Vector> filler(point_set); internal::PLY::Point_set_3_filler<Point, Vector> filler(point_set);
if (!(reader.init (stream))) if (!(reader.init (stream)))
{
stream.setstate(std::ios::failbit);
return false; return false;
}
if (comments != NULL) if (comments != NULL)
*comments = reader.comments(); *comments = reader.comments();
@ -415,8 +418,7 @@ read_ply_point_set(
{ {
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (stream); property->get (stream);
if (stream.fail())
if (stream.eof())
return false; return false;
} }
@ -425,7 +427,7 @@ read_ply_point_set(
} }
} }
return !stream.bad(); return true;
} }
/*! /*!

View File

@ -765,7 +765,10 @@ bool read_ply_points_with_properties (std::istream& stream,
internal::PLY::PLY_reader reader; internal::PLY::PLY_reader reader;
if (!(reader.init (stream))) if (!(reader.init (stream)))
{
stream.setstate(std::ios::failbit);
return false; return false;
}
for (std::size_t i = 0; i < reader.number_of_elements(); ++ i) for (std::size_t i = 0; i < reader.number_of_elements(); ++ i)
{ {
@ -778,7 +781,7 @@ bool read_ply_points_with_properties (std::istream& stream,
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (stream); property->get (stream);
if (stream.eof()) if (stream.fail())
return false; return false;
} }

View File

@ -54,7 +54,7 @@ namespace CGAL{
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (in); property->get (in);
if (in.eof()) if (in.fail())
return false; return false;
} }
@ -84,7 +84,7 @@ namespace CGAL{
polygons.back()[i] = std::size_t(get<0>(new_face)[i]); polygons.back()[i] = std::size_t(get<0>(new_face)[i]);
} }
return !in.bad(); return true;
} }
} }
@ -106,7 +106,10 @@ namespace CGAL{
internal::PLY::PLY_reader reader; internal::PLY::PLY_reader reader;
if (!(reader.init (in))) if (!(reader.init (in)))
{
in.setstate(std::ios::failbit);
return false; return false;
}
for (std::size_t i = 0; i < reader.number_of_elements(); ++ i) for (std::size_t i = 0; i < reader.number_of_elements(); ++ i)
{ {
@ -121,7 +124,7 @@ namespace CGAL{
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (in); property->get (in);
if (in.eof()) if (in.fail())
return false; return false;
} }
@ -160,14 +163,14 @@ namespace CGAL{
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (in); property->get (in);
if (in.eof()) if (in.fail())
return false; return false;
} }
} }
} }
} }
return !in.bad(); return true;
} }
template <class Point_3, class Polygon_3, class Color_rgb> template <class Point_3, class Polygon_3, class Color_rgb>
@ -187,7 +190,10 @@ namespace CGAL{
internal::PLY::PLY_reader reader; internal::PLY::PLY_reader reader;
if (!(reader.init (in))) if (!(reader.init (in)))
{
in.setstate(std::ios::failbit);
return false; return false;
}
for (std::size_t i = 0; i < reader.number_of_elements(); ++ i) for (std::size_t i = 0; i < reader.number_of_elements(); ++ i)
{ {
@ -215,7 +221,7 @@ namespace CGAL{
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (in); property->get (in);
if (in.eof()) if (in.fail())
return false; return false;
} }
@ -266,14 +272,14 @@ namespace CGAL{
internal::PLY::PLY_read_number* property = element.property(k); internal::PLY::PLY_read_number* property = element.property(k);
property->get (in); property->get (in);
if (in.eof()) if (in.fail())
return false; return false;
} }
} }
} }
} }
return !in.bad(); return true;
} }