imap: Moved mailbox check from the imap_do() function
authorSteve Holme <steve_holme@hotmail.com>
Tue, 5 Mar 2013 19:52:11 +0000 (19:52 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Tue, 5 Mar 2013 19:52:11 +0000 (19:52 +0000)
In preparation for the addition of the LIST command, moved the mailbox
check from imap_do() to imap_select() and imap_append().

lib/imap.c

index 503ed6d..29784e9 100644 (file)
@@ -692,6 +692,12 @@ static CURLcode imap_select(struct connectdata *conn)
   Curl_safefree(imapc->mailbox);
   Curl_safefree(imapc->mailbox_uidvalidity);
 
+  /* Check we have a mailbox */
+  if(!imap->mailbox) {
+    failf(conn->data, "Cannot SELECT without a mailbox.");
+    return CURLE_URL_MALFORMAT;
+  }
+
   /* Make sure the mailbox is in the correct atom format */
   mailbox = imap_atom(imap->mailbox);
   if(!mailbox)
@@ -730,6 +736,12 @@ static CURLcode imap_append(struct connectdata *conn)
   struct IMAP *imap = conn->data->state.proto.imap;
   char *mailbox;
 
+  /* Check we have a mailbox */
+  if(!imap->mailbox) {
+    failf(conn->data, "Cannot APPEND without a mailbox.");
+    return CURLE_URL_MALFORMAT;
+  }
+
   /* Check we know the size of the upload */
   if(conn->data->set.infilesize < 0) {
     failf(conn->data, "Cannot APPEND with unknown input file size\n");
@@ -1869,7 +1881,6 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected,
 static CURLcode imap_do(struct connectdata *conn, bool *done)
 {
   CURLcode result = CURLE_OK;
-  struct IMAP *imap;
 
   *done = FALSE; /* default to false */
 
@@ -1882,8 +1893,6 @@ static CURLcode imap_do(struct connectdata *conn, bool *done)
   if(result)
     return result;
 
-  imap = conn->data->state.proto.imap;
-
   /* Parse the URL path */
   result = imap_parse_url_path(conn);
   if(result)
@@ -1894,12 +1903,6 @@ static CURLcode imap_do(struct connectdata *conn, bool *done)
   if(result)
     return result;
 
-  /* Check we have a mailbox for FETCH and APPEND commands */
-  if(!imap->custom && !imap->mailbox) {
-    failf(conn->data, "FETCH and APPEND require a mailbox.");
-    return CURLE_URL_MALFORMAT;
-  }
-
   result = imap_regular_transfer(conn, done);
 
   return result;