/* */ #include "XmlParser.h" #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_delete_r fdDeleter(fd, close); XmlParser ps(psm); char buf[4096]; ssize_t nread; bool retval = true; while((nread = read(fd, buf, sizeof(buf))) > 0) { if(ps.parseUpdate(buf, nread) < 0) { retval = false; break; } } if(nread == 0 && retval) { if(ps.parseFinal(nullptr, 0) < 0) { retval = false; } } return retval; } } // namespace xml } // namespace aria2