X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=imap%2Fcommand.c;h=e915320b4be5cb8b2bb7ee4ae4c9753509d439fc;hp=c33776bc6167eeaa60f25e04c21ab8a7bf64d0a4;hb=16be8d10413bbcf822577afd4019d65aba7459e0;hpb=c9f72ab0cd65f517a2047feb942ad85025c1b7e8 diff --git a/imap/command.c b/imap/command.c index c33776b..e915320 100644 --- a/imap/command.c +++ b/imap/command.c @@ -85,58 +85,32 @@ int imap_cmd_start (IMAP_DATA * idata, const char *cmd) int imap_cmd_step (IMAP_DATA * idata) { IMAP_COMMAND *cmd = &idata->cmd; - unsigned int len = 0; - int c; if (idata->status == IMAP_FATAL) { cmd_handle_fatal (idata); return IMAP_CMD_BAD; } - /* read into buffer, expanding buffer as necessary until we have a full - * line */ - do { - if (len == cmd->blen) { - p_realloc(&cmd->buf, cmd->blen + IMAP_CMD_BUFSIZE); - cmd->blen = cmd->blen + IMAP_CMD_BUFSIZE; - } - - if (len) - len--; - - c = mutt_socket_readln (cmd->buf + len, cmd->blen - len, idata->conn); - if (c <= 0) { - /* cmd_handle_fatal (idata); */ - return IMAP_CMD_BAD; - } - - len += c; - } - /* if we've read all the way to the end of the buffer, we haven't read a - * full line (mutt_socket_readln strips the \r, so we always have at least - * one character free when we've read a full line) */ - while (len == cmd->blen); - - /* don't let one large string make cmd->buf hog memory forever */ - if ((cmd->blen > IMAP_CMD_BUFSIZE) && (len <= IMAP_CMD_BUFSIZE)) { - p_realloc(&cmd->buf, IMAP_CMD_BUFSIZE); - cmd->blen = IMAP_CMD_BUFSIZE; + buffer_reset(&cmd->buf); + if (mutt_socket_readln2(&cmd->buf, idata->conn) < 0) { + /* cmd_handle_fatal (idata); */ + return IMAP_CMD_BAD; } - idata->lastread = time (NULL); + idata->lastread = time(NULL); /* handle untagged messages. The caller still gets its shot afterwards. */ - if (!m_strncmp(cmd->buf, "* ", 2) && cmd_handle_untagged (idata)) + if (!m_strncmp(cmd->buf.data, "* ", 2) && cmd_handle_untagged (idata)) return IMAP_CMD_BAD; /* server demands a continuation response from us */ - if (cmd->buf[0] == '+') + if (cmd->buf.data[0] == '+') return IMAP_CMD_RESPOND; /* tagged completion code */ - if (!m_strncmp(cmd->buf, cmd->seq, SEQLEN)) { + if (!m_strncmp(cmd->buf.data, cmd->seq, SEQLEN)) { imap_cmd_finish (idata); - return imap_code (cmd->buf) ? IMAP_CMD_OK : IMAP_CMD_NO; + return imap_code(cmd->buf.data) ? IMAP_CMD_OK : IMAP_CMD_NO; } return IMAP_CMD_CONTINUE; @@ -279,7 +253,7 @@ static int cmd_handle_untagged (IMAP_DATA * idata) char *pn; int count; - s = imap_next_word (idata->cmd.buf); + s = imap_next_word (idata->cmd.buf.data); if ((idata->state == IMAP_SELECTED) && isdigit ((unsigned char) *s)) { pn = s;