Andreas Krennmair:
[apps/madmutt.git] / imap / imap.c
index 9bc7e86..a9552ce 100644 (file)
 
 /* Support for IMAP4rev1, with the occasional nod to IMAP 4. */
 
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "mutt.h"
 #include "mutt_curses.h"
 #include "mx.h"
@@ -104,20 +108,37 @@ int imap_create_mailbox (IMAP_DATA* idata, char* mailbox)
   return 0;
 }
 
+int imap_rename_mailbox (IMAP_DATA* idata, IMAP_MBOX* mx, const char* newname)
+{
+  char oldmbox[LONG_STRING];
+  char newmbox[LONG_STRING];
+  char buf[LONG_STRING];
+
+  imap_munge_mbox_name (oldmbox, sizeof (oldmbox), mx->mbox);
+  imap_munge_mbox_name (newmbox, sizeof (newmbox), newname);
+
+  snprintf (buf, sizeof (buf), "RENAME %s %s", oldmbox, newmbox);
+
+  if (imap_exec (idata, buf, 0) != 0)
+    return -1;
+
+  return 0;
+}
+
 int imap_delete_mailbox (CONTEXT* ctx, IMAP_MBOX mx)
 {
   char buf[LONG_STRING], mbox[LONG_STRING];
   IMAP_DATA *idata;
 
   if (!ctx || !ctx->data) {
-       if (!(idata = imap_conn_find (&mx.account,
-               option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0)))
-       {
-               FREE (&mx.mbox);
-               return -1;
-       }
+    if (!(idata = imap_conn_find (&mx.account,
+          option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0)))
+    {
+      FREE (&mx.mbox);
+      return -1;
+    }
   } else {
-         idata = ctx->data;
+    idata = ctx->data;
   }
 
   imap_munge_mbox_name (mbox, sizeof (mbox), mx.mbox);
@@ -430,7 +451,7 @@ int imap_open_connection (IMAP_DATA* idata)
          {
            mutt_error (_("Could not negotiate TLS connection"));
            mutt_sleep (1);
-           goto bail;
+           goto err_close_conn;
          }
          else
          {
@@ -460,6 +481,7 @@ int imap_open_connection (IMAP_DATA* idata)
 
  err_close_conn:
   mutt_socket_close (idata->conn);
+  idata->state = IMAP_DISCONNECTED;
  bail:
   FREE (&idata->capstr);
   return -1;
@@ -793,12 +815,14 @@ void imap_logout (IMAP_DATA* idata)
   imap_cmd_start (idata, "LOGOUT");
   while (imap_cmd_step (idata) == IMAP_CMD_CONTINUE)
     ;
+  FREE(& idata->cmd.buf);
+  FREE(& idata);
 }
 
+/*
 int imap_close_connection (CONTEXT *ctx)
 {
   dprint (1, (debugfile, "imap_close_connection(): closing connection\n"));
-  /* if the server didn't shut down on us, close the connection gracefully */
   if (CTX_DATA->status != IMAP_BYE)
   {
     mutt_message _("Closing connection to IMAP server...");
@@ -810,6 +834,7 @@ int imap_close_connection (CONTEXT *ctx)
   CTX_DATA->conn->data = NULL;
   return 0;
 }
+*/
 
 /* imap_set_flag: append str to flags if we currently have permission
  *   according to aclbit */
@@ -818,7 +843,7 @@ static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag,
 {
   if (mutt_bit_isset (idata->rights, aclbit))
     if (flag)
-      strncat (flags, str, flsize);
+      safe_strcat (flags, flsize, str);
 }
 
 /* imap_make_msg_set: make an IMAP4rev1 UID message set out of a set of