diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-09-10 19:39:52 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-09-10 19:39:52 -0400 |
commit | 7449de6e8fd71a83ce142269d9c289d7258976e6 (patch) | |
tree | 2ced683b26d8e272d9171a63caa37573796c805c | |
parent | 233d2e8530fbb9ee5046e1ebcd3dbdfead772c9e (diff) |
fix/improve/test hotspot file parsing
-rw-r--r-- | libs/gtkmm2ext/cursors.cc | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/libs/gtkmm2ext/cursors.cc b/libs/gtkmm2ext/cursors.cc index a99a457032..9948fc667f 100644 --- a/libs/gtkmm2ext/cursors.cc +++ b/libs/gtkmm2ext/cursors.cc @@ -20,8 +20,13 @@ #include <sstream> #include <fstream> +#include "pbd/error.h" +#include "pbd/compose.h" + #include "gtkmm2ext/cursors.h" +#include "i18n.h" + using namespace Gtkmm2ext; CursorInfo::Infos CursorInfo::infos; @@ -46,24 +51,39 @@ CursorInfo::load_cursor_info (const std::string& path) std::string name; int x; int y; + bool parse_ok; + int line_number = 1; do { - s << infofile; + parse_ok = false; + infofile >> name; if (!infofile) { + /* failing here is OK ... EOF */ + parse_ok = true; break; } - s >> name; - s >> x; - s >> y; - if (!s) { + infofile >> x; + if (!infofile) { break; } - - CursorInfo* ci = new CursorInfo (name, x, y); - infos[name] = ci; + infofile >> y; + if (!infofile) { + break; + } + + parse_ok = true; + line_number++; + + infos[name] = new CursorInfo (name, x, y); } while (true); + if (!parse_ok) { + PBD::error << string_compose (_("cursor hotspots info file %1 has an error on line %2"), path, line_number) << endmsg; + infos.clear (); + return -1; + } + return 0; } |