/* */ #include "XmlParser.h" #include #include "a2io.h" #include "util.h" namespace aria2 { namespace xml { bool parseFile(const std::string& filename, ParserStateMachine* psm) { int fd; if(filename == DEV_STDIN) { fd = STDIN_FILENO; } else { while((fd = a2open(utf8ToWChar(filename).c_str(), O_BINARY | O_RDONLY, OPEN_MODE)) == -1 && errno != EINTR); if(fd == -1) { return false; } } auto fdclose = defer(fd, close); XmlParser ps(psm); std::array buf; ssize_t nread; bool retval = true; while((nread = read(fd, buf.data(), buf.size())) > 0) { if(ps.parseUpdate(buf.data(), nread) < 0) { retval = false; break; } } if(nread == 0 && retval) { if(ps.parseFinal(nullptr, 0) < 0) { retval = false; } } return retval; } } // namespace xml } // namespace aria2