Fix madmutt for stupid terms with only 64 colors.
[apps/madmutt.git] / imap / imap.c
index 77830f9..8fd96f8 100644 (file)
@@ -241,7 +241,7 @@ static int imap_get_delim (IMAP_DATA * idata)
     if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
       break;
 
-    s = imap_next_word (idata->cmd.buf);
+    s = imap_next_word (idata->cmd.buf.data);
     if (ascii_strncasecmp ("LIST", s, 4) == 0) {
       s = imap_next_word (s);
       s = imap_next_word (s);
@@ -276,7 +276,7 @@ static int imap_check_acl (IMAP_DATA * idata)
 static int imap_check_capabilities (IMAP_DATA * idata)
 {
   if (imap_exec (idata, "CAPABILITY", 0) != 0) {
-    imap_error ("imap_check_capabilities", idata->cmd.buf);
+    imap_error ("imap_check_capabilities", idata->cmd.buf.data);
     return -1;
   }
 
@@ -299,7 +299,6 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags)
   CONNECTION *conn;
   IMAP_DATA *idata;
   ACCOUNT *creds;
-  int new = 0;
 
   if (!(conn = mutt_conn_find (NULL, account)))
     return NULL;
@@ -329,33 +328,31 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags)
 
   if (!idata) {
     /* The current connection is a new connection */
-    if (!(idata = imap_new_idata ())) {
-      mutt_socket_free (conn);
-      return NULL;
-    }
-
-    conn->data = idata;
+    idata = imap_new_idata();
+    conn->data  = idata;
     idata->conn = conn;
-    new = 1;
   }
 
   if (idata->state == IMAP_DISCONNECTED)
     imap_open_connection (idata);
   if (idata->state == IMAP_CONNECTED) {
-    if (!imap_authenticate (idata)) {
+    if (!imap_authenticate(idata)) {
       idata->state = IMAP_AUTHENTICATED;
     } else {
-      mutt_account_unsetpass (&idata->conn->account);
+      mutt_socket_close(idata->conn);
+      idata->state = IMAP_DISCONNECTED;
+      idata->conn->account.has_pass = 0;
     }
 
     p_delete(&idata->capstr);
   }
-  if (new && idata->state == IMAP_AUTHENTICATED) {
+  if (idata->isnew && idata->state == IMAP_AUTHENTICATED) {
     imap_get_delim (idata);
     if (option (OPTIMAPCHECKSUBSCRIBED)) {
       mutt_message _("Checking mailbox subscriptions");
       imap_exec (idata, "LSUB \"\" \"*\"", 0);
     }
+    idata->isnew = 0;
   }
 
   return idata;
@@ -376,7 +373,7 @@ int imap_open_connection (IMAP_DATA * idata)
     return -1;
   }
 
-  if (ascii_strncasecmp ("* OK", idata->cmd.buf, 4) == 0) {
+  if (ascii_strncasecmp ("* OK", idata->cmd.buf.data, 4) == 0) {
     /* TODO: Parse new tagged CAPABILITY data (* OK [CAPABILITY...]) */
     if (imap_check_capabilities (idata))
       goto bail;
@@ -412,7 +409,7 @@ int imap_open_connection (IMAP_DATA * idata)
       goto err_close_conn;
     }
   }
-  else if (ascii_strncasecmp ("* PREAUTH", idata->cmd.buf, 9) == 0) {
+  else if (ascii_strncasecmp ("* PREAUTH", idata->cmd.buf.data, 9) == 0) {
     idata->state = IMAP_AUTHENTICATED;
     if (imap_check_capabilities (idata) != 0)
       goto bail;
@@ -535,7 +532,7 @@ static int imap_open_mailbox (CONTEXT * ctx)
     if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
       break;
 
-    pc = idata->cmd.buf + 2;
+    pc = idata->cmd.buf.data + 2;
 
     /* Obtain list of available flags here, may be overridden by a
      * PERMANENTFLAGS tag in the OK response */
@@ -577,7 +574,7 @@ static int imap_open_mailbox (CONTEXT * ctx)
   if (rc == IMAP_CMD_NO) {
     char *s;
 
-    s = imap_next_word (idata->cmd.buf);        /* skip seq */
+    s = imap_next_word (idata->cmd.buf.data);        /* skip seq */
     s = imap_next_word (s);     /* Skip response */
     mutt_error ("%s", s);
     mutt_sleep (2);
@@ -589,7 +586,7 @@ static int imap_open_mailbox (CONTEXT * ctx)
 
   /* check for READ-ONLY notification */
   if (!ascii_strncasecmp
-      (imap_get_qualifier (idata->cmd.buf), "[READ-ONLY]", 11)
+      (imap_get_qualifier (idata->cmd.buf.data), "[READ-ONLY]", 11)
       && !mutt_bit_isset (idata->capabilities, ACL)) {
     ctx->readonly = 1;
   }
@@ -686,25 +683,8 @@ void imap_logout (IMAP_DATA * idata)
   idata->status = IMAP_BYE;
   imap_cmd_start (idata, "LOGOUT");
   while (imap_cmd_step (idata) == IMAP_CMD_CONTINUE);
-  p_delete(&idata->cmd.buf);
-  p_delete(&idata);
-}
-
-/*
-int imap_close_connection (CONTEXT *ctx)
-{
-  if (CTX_DATA->status != IMAP_BYE)
-  {
-    mutt_message _("Closing connection to IMAP server...");
-    imap_logout (CTX_DATA);
-    mutt_clear_error ();
-  }
-  mutt_socket_close (CTX_DATA->conn);
-  CTX_DATA->state = IMAP_DISCONNECTED;
-  CTX_DATA->conn->data = NULL;
-  return 0;
+  imap_free_idata(&idata);
 }
-*/
 
 /* imap_set_flag: append str to flags if we currently have permission
  *   according to aclbit */
@@ -858,7 +838,7 @@ int imap_sync_message (IMAP_DATA *idata, HEADER *hdr, BUFFER *cmd,
       err_continue && (*err_continue != M_YES))
   {
     *err_continue = imap_continue ("imap_sync_message: STORE failed",
-                                  idata->cmd.buf);
+                                  idata->cmd.buf.data);
     if (*err_continue != M_YES)
       return -1;
   }
@@ -958,7 +938,7 @@ int imap_sync_mailbox (CONTEXT * ctx, int expunge, int *index_hint)
     /* Set expunge bit so we don't get spurious reopened messages */
     idata->reopen |= IMAP_EXPUNGE_EXPECTED;
     if (imap_exec (idata, "EXPUNGE", 0) != 0) {
-      imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->cmd.buf);
+      imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->cmd.buf.data);
       rc = imap_reconnect (ctx);
       goto out;
     }
@@ -1122,7 +1102,7 @@ int imap_mailbox_check (char *path, int new)
     if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
       break;
 
-    s = imap_next_word (idata->cmd.buf);
+    s = imap_next_word (idata->cmd.buf.data);
     if (ascii_strncasecmp ("STATUS", s, 6) == 0) {
       s = imap_next_word (s);
       /* The mailbox name may or may not be quoted here. We could try to 
@@ -1296,7 +1276,7 @@ int imap_parse_list_response (IMAP_DATA * idata, char **name, int *noselect,
   if (rc != IMAP_CMD_CONTINUE)
     return -1;
 
-  s = imap_next_word (idata->cmd.buf);
+  s = imap_next_word (idata->cmd.buf.data);
   if ((ascii_strncasecmp ("LIST", s, 4) == 0) ||
       (ascii_strncasecmp ("LSUB", s, 4) == 0)) {
     *noselect = 0;
@@ -1337,11 +1317,11 @@ int imap_parse_list_response (IMAP_DATA * idata, char **name, int *noselect,
     }
     s = imap_next_word (s);     /* name */
     if (s && *s == '{') {       /* Literal */
-      if (imap_get_literal_count (idata->cmd.buf, &bytes) < 0)
+      if (imap_get_literal_count (idata->cmd.buf.data, &bytes) < 0)
         return -1;
       if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE)
         return -1;
-      *name = idata->cmd.buf;
+      *name = idata->cmd.buf.data;
     }
     else
       *name = s;
@@ -1356,8 +1336,6 @@ int imap_subscribe (char *path, int subscribe)
   IMAP_DATA *idata;
   char buf[LONG_STRING];
   char mbox[LONG_STRING];
-  char errstr[STRING];
-  BUFFER err, token;
   IMAP_MBOX mx;
 
   if (mx_get_magic (path) != M_IMAP || imap_parse_path (path, &mx) < 0) {
@@ -1373,13 +1351,7 @@ int imap_subscribe (char *path, int subscribe)
   imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
 
   if (option (OPTIMAPCHECKSUBSCRIBED)) {
-    p_clear(&token, 1);
-    err.data = errstr;
-    err.dsize = sizeof (errstr);
-    snprintf (mbox, sizeof (mbox), "%smailboxes \"%s\"",
-              subscribe ? "" : "un", path);
-    mutt_parse_rc_line (mbox, &token, &err);
-    p_delete(&token.data);
+    buffy_do_mailboxes(path, subscribe);
   }
 
   if (subscribe)
@@ -1533,7 +1505,7 @@ int imap_complete (char *dest, size_t dlen, char *path) {
       completions++;
     }
   }
-  while (m_strncmp(idata->cmd.seq, idata->cmd.buf, SEQLEN));
+  while (m_strncmp(idata->cmd.seq, idata->cmd.buf.data, SEQLEN));
 
   if (completions) {
     /* reformat output */
@@ -1590,7 +1562,7 @@ static int imap_open_new_message (MESSAGE * msg,
 {
     char tmp[_POSIX_PATH_MAX];
 
-    msg->fp = m_tempfile(tmp, sizeof(tmp), NONULL(MCore.tmpdir), NULL);
+    msg->fp = m_tempfile(tmp, sizeof(tmp), NONULL(mod_core.tmpdir), NULL);
     if (!msg->fp) {
         mutt_perror(tmp);
         return -1;