char *tcp_getline (TCPSTREAM *stream) { unsigned long n,contd; char *ret = tcp_getline_work (stream,&n,&contd); if (ret && contd) { /* got a line needing continuation? */ STRINGLIST *stl = mail_newstringlist (); STRINGLIST *stc = stl; do { /* collect additional lines */ stc->text.data = (unsigned char *) ret; stc->text.size = n; stc = stc->next = mail_newstringlist (); ret = tcp_getline_work (stream,&n,&contd); } while (ret && contd); if (ret) { /* stash final part of line on list */ stc->text.data = (unsigned char *) ret; stc->text.size = n; /* determine how large a buffer we need */ for (n = 0, stc = stl; stc; stc = stc->next) n += stc->text.size; ret = fs_get (n + 1); /* copy parts into buffer */ for (n = 0, stc = stl; stc; n += stc->text.size, stc = stc->next) memcpy (ret + n,stc->text.data,stc->text.size); ret[n] = '\0'; } mail_free_stringlist (&stl);/* either way, done with list */ } return ret; }
int prune_criteria_number (unsigned long *number,char **r) { char *t; STRINGLIST *s = NIL; /* parse the date and return fn if OK */ int ret = (mail_criteria_string (&s,r) && (*number = strtoul ((char *) s->text.data,&t,10)) && !*t) ? T : NIL; if (s) mail_free_stringlist (&s); return ret; }
static Variant HHVM_FUNCTION(imap_alerts) { if (IMAPG(alertstack) == NIL) { return false; } Array ret(Array::Create()); for (STRINGLIST *cur = IMAPG(alertstack); cur != NIL; cur = cur->next) { ret.append(String((const char *)cur->text.data, CopyString)); } mail_free_stringlist(&IMAPG(alertstack)); IMAPG(alertstack) = NIL; return ret; }
void requestShutdown() override { if (m_errorstack != NIL) { /* output any remaining errors at their original error level */ for (ERRORLIST *ecur = m_errorstack; ecur != NIL; ecur = ecur->next) { Logger::Warning("%s (errflg=%ld)", ecur->text.data, ecur->errflg); } mail_free_errorlist(&m_errorstack); m_errorstack = NIL; } if (m_alertstack != NIL) { /* output any remaining alerts at E_NOTICE level */ for (STRINGLIST *acur = m_alertstack; acur != NIL; acur = acur->next) { Logger::Warning("%s", acur->text.data); } mail_free_stringlist(&m_alertstack); m_alertstack = NIL; } }
Variant f_imap_list(const Resource& imap_stream, const String& ref, const String& pattern) { ImapStream *obj = imap_stream.getTyped<ImapStream>(); /* set flag for normal, old mailbox list */ IMAPG(folderlist_style) = FLIST_ARRAY; IMAPG(folders) = IMAPG(folders_tail) = NIL; mail_list(obj->m_stream, (char*)ref.data(), (char*)pattern.data()); if (IMAPG(folders) == NIL) { return false; } Array ret(Array::Create()); for (STRINGLIST *cur = IMAPG(folders); cur != NIL; cur = cur->next) { ret.append(String((const char *)cur->text.data, CopyString)); } mail_free_stringlist(&IMAPG(folders)); IMAPG(folders) = IMAPG(folders_tail) = NIL; return ret; }
void mailcap_free(void) { mail_free_stringlist(&MailcapData.raw); mc_free_entry(&MailcapData.head); }