From 3221fd8ee23f79b96dea8b965998deb775da1805 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Sat, 2 May 2020 08:51:24 +0200 Subject: [PATCH] jedParser: check if a \r char is present --- src/jedParser.cpp | 25 +++++++++++++++++++++++-- src/jedParser.hpp | 1 + 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/jedParser.cpp b/src/jedParser.cpp index 7e10599..421f2be 100644 --- a/src/jedParser.cpp +++ b/src/jedParser.cpp @@ -15,6 +15,10 @@ * along with this program. If not, see . */ +/* + * http://k1.spdns.de/Develop/Projects/GalAsm/info/galer/jedecfile.html + */ + #include #include #include @@ -44,6 +48,23 @@ JedParser::JedParser(string filename, bool verbose): { } +/*! + * \brief read a line with '\r''\n' or '\n' terminaison + * check if last char is '\r' + * \return the line without [\r]\n + */ +string JedParser::readline() +{ + string buffer; + std::getline(_fd, buffer, '\n'); + if (buffer.size() != 0) { + /* if '\r' is present -> drop */ + if (buffer[buffer.size() -1] == '\r') + buffer.pop_back(); + } + return buffer; +} + /* fill a vector with consecutive lines until '*' */ vector JedParser::readJEDLine() @@ -53,7 +74,7 @@ vector JedParser::readJEDLine() bool inLine = true; do { - std::getline(_fd, buffer, '\n'); + buffer = readline(); if (buffer.size() == 0) break; @@ -191,7 +212,7 @@ int JedParser::parse() _fd.seekg(0, _fd.beg); /* First line must STX (0x02) */ - std::getline(_fd, content, '\n'); + content = readline(); if (content[0] != 0x02) { printf("wrong file\n"); return EXIT_FAILURE; diff --git a/src/jedParser.hpp b/src/jedParser.hpp index 04482d5..422742b 100644 --- a/src/jedParser.hpp +++ b/src/jedParser.hpp @@ -50,6 +50,7 @@ class JedParser: public ConfigBitstreamParser { uint64_t featuresRow() {return _featuresRow;} private: + std::string readline(); std::vectorreadJEDLine(); void buildDataArray(const std::string &content, struct jed_data &jed); void parseEField(const std::vector content);