void try_from_db(ReviewParser<std::istream>::sets &funny, ReviewParser<std::istream>::sets &normal, const std::string &prefix, const std::string &conf, const std::string &nope){ { if (! (ReviewParser<std::istream>::readFromFile(rb,pb,rrb, prefix + conf + "-db", funny) && ReviewParser<std::istream>::readFromFile(rb, pb, rrb, prefix + nope + "-db", normal)) ) { { funny.clearAll(); normal.clearAll(); rb.reset(); rrb.reset(); pb.reset(); ReviewParser<std::istream>::sets oldfunny; ReviewParser<std::istream>::sets oldnormal; initial_parse(oldfunny,oldnormal, prefix, conf, nope); assert(oldfunny.rs.size() > 0); db.getAllReviews(rb, pb, rrb, oldfunny.rs, funny, [](auto &r) -> auto& {return *r; }); std::cout << "got funny!" << std::endl; db.getAllReviews(rb, pb, rrb, oldnormal.rs, normal, [](auto &r) -> auto& {return *r; }); std::cout << "sizes: newr: " << funny.rs.size() << " oldr: " << oldfunny.rs.size() << " newp: " << funny.ps.size() << " oldp " << oldfunny.ps.size() << " newrr: " << funny.rrs.size() << " oldrr: " << oldfunny.rrs.size() << std::endl; for (auto &r : funny.rs){ std::cout << *r << std::endl; break; } ReviewParser<std::istream>::writeToFile(prefix + conf + "-db", funny); ReviewParser<std::istream>::writeToFile(prefix + nope + "-db", normal); } } } }
int mu_imapio_getline (struct _mu_imapio *io) { int rc; char *last_arg; int xlev = MU_XSCRIPT_NORMAL; if (io->_imap_reply_ready) { mu_wordsplit_free_words (&io->_imap_ws); io->_imap_reply_ready = 0; } for (;;) { rc = mu_stream_getline (io->_imap_stream, &io->_imap_buf_base, &io->_imap_buf_size, &io->_imap_buf_level); if (rc) break; if (io->_imap_buf_level == 0) break; io->_imap_buf_level = mu_rtrim_class (io->_imap_buf_base, MU_CTYPE_ENDLN); rc = initial_parse (io); if (rc == IMAPIO_ERR) { rc = MU_ERR_PARSE; break; } else if (rc == IMAPIO_RESP) { rc = 0; break; } rc = mu_wordsplit_len (io->_imap_buf_base + io->_imap_ws.ws_endp, io->_imap_buf_level - io->_imap_ws.ws_endp, &io->_imap_ws, io->_imap_ws_flags); if (rc) { rc = MU_ERR_PARSE; break; } if (io->_imap_ws.ws_wordc == 0) break; last_arg = io->_imap_ws.ws_wordv[io->_imap_ws.ws_wordc - 1]; if (last_arg[0] == '{' && last_arg[strlen (last_arg)-1] == '}') { int rc; unsigned long number; char *sp = NULL; if (!io->_imap_trace_payload) xlev = mu_imapio_set_xscript_level (io, MU_XSCRIPT_PAYLOAD); number = strtoul (last_arg + 1, &sp, 10); /* Client can ask for non-synchronised literal, if a '+' is appended to the octet count. */ if (*sp == '}') { if (io->_imap_server) mu_stream_printf (io->_imap_stream, "+ GO AHEAD\n"); } else if (*sp != '+') break; if (number + 1 > io->_imap_buf_size) { size_t newsize = number + 1; void *newp = realloc (io->_imap_buf_base, newsize); if (!newp) { rc = ENOMEM; break; } io->_imap_buf_base = newp; io->_imap_buf_size = newsize; } for (io->_imap_buf_level = 0; io->_imap_buf_level < number; ) { size_t sz; rc = mu_stream_read (io->_imap_stream, io->_imap_buf_base + io->_imap_buf_level, number - io->_imap_buf_level, &sz); if (rc || sz == 0) break; io->_imap_buf_level += sz; } mu_imapio_set_xscript_level (io, xlev); if (rc) break; io->_imap_buf_base[io->_imap_buf_level++] = 0; free (last_arg); io->_imap_ws.ws_wordv[--io->_imap_ws.ws_wordc] = NULL; if (mu_wordsplit_len (io->_imap_buf_base, io->_imap_buf_level, &io->_imap_ws, io->_imap_ws_flags|MU_WRDSF_NOSPLIT)) { rc = MU_ERR_PARSE; break; } } else break; } if (!io->_imap_trace_payload) mu_imapio_set_xscript_level (io, xlev); io->_imap_reply_ready = 1; return rc; }