]> granicus.if.org Git - mutt/commitdiff
Normalize path component of IMAP URLs in imap_expand_path (see #2897).
authorBrendan Cully <brendan@kublai.com>
Sun, 19 Oct 2008 23:14:06 +0000 (16:14 -0700)
committerBrendan Cully <brendan@kublai.com>
Sun, 19 Oct 2008 23:14:06 +0000 (16:14 -0700)
ChangeLog
imap/util.c

index f0d9470dff08c9a900ac67985b53dd6be6e3e8ef..50897932c2947d4838cb6d016d3efccf394ce2ff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-10-19 12:41 -0700  Brendan Cully  <brendan@kublai.com>  (1dd2d83b5c34)
+
+       * mutt_socket.c: Fix buglet in logging from previous commit
+
+       * mutt_socket.c: Handle short writes in mutt_socket_write_d. See
+       #3000. Apparently even blocking I/O with signals masked can
+       sometimes return early. Based on a patch by Patrick Welche.
+
 2008-10-19 15:14 +0200  Emanuele Giaquinta  <e.giaquinta@glauco.it>  (2f04a811db3f)
 
        * pattern.c, sendlib.c: Remove unused functions.
index 011df2b79695db755dba4ddbd2be92cfd187e5e9..6312b8611e25143c3091b1a2ccf69e35aa61583b 100644 (file)
@@ -56,13 +56,15 @@ int imap_expand_path (char* path, size_t len)
 {
   IMAP_MBOX mx;
   ciss_url_t url;
+  char fixedpath[LONG_STRING];
   int rc;
 
   if (imap_parse_path (path, &mx) < 0)
     return -1;
 
   mutt_account_tourl (&mx.account, &url);
-  url.path = mx.mbox;
+  imap_fix_path(NULL, mx.mbox, fixedpath, sizeof (fixedpath));
+  url.path = fixedpath;
 
   rc = url_ciss_tostring (&url, path, len, U_DECODE_PASSWD);
   FREE (&mx.mbox);
@@ -391,25 +393,34 @@ void imap_free_idata (IMAP_DATA** idata)
 char *imap_fix_path (IMAP_DATA *idata, char *mailbox, char *path, 
     size_t plen)
 {
-  int x = 0;
+  int i = 0;
+  char delim;
+  
+  if (idata)
+    delim = idata->delim;
+  else if (ImapDelimChars && ImapDelimChars[0])
+    delim = ImapDelimChars[0];
+  else
+    delim = '/';
 
-  while (mailbox && *mailbox && (x < (plen - 1)))
+  while (mailbox && *mailbox && i < plen - 1)
   {
-    if ((*mailbox == '/') || (*mailbox == idata->delim))
+    if (strchr(ImapDelimChars, *mailbox) || *mailbox == delim)
     {
-      while ((*mailbox == '/') || (*mailbox == idata->delim)) mailbox++;
-      path[x] = idata->delim;
+      while (strchr(ImapDelimChars, *mailbox) || *mailbox == delim)
+        mailbox++;
+      path[i] = delim;
     }
     else
     {
-      path[x] = *mailbox;
+      path[i] = *mailbox;
       mailbox++;
     }
-    x++;
+    i++;
   }
-  if (x && path[--x] != idata->delim)
-    x++;
-  path[x] = '\0';
+  if (i && path[--i] != delim)
+    i++;
+  path[i] = '\0';
 
   if (!path[0])
     strfcpy (path, "INBOX", plen);