/* */ #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