diff -Naudr dovecot-1.0.alpha2/src/lib-storage/index/maildir/maildir-storage.c dovecot-1.0.alpha2-colons/src/lib-storage/index/maildir/maildir-storage.c --- dovecot-1.0.alpha2/src/lib-storage/index/maildir/maildir-storage.c Sun Aug 14 17:51:35 2005 +++ dovecot-1.0.alpha2-colons/src/lib-storage/index/maildir/maildir-storage.c Thu Sep 15 19:06:27 2005 @@ -41,6 +41,7 @@ struct index_storage *istorage; const char *root_dir, *inbox_dir, *index_dir, *control_dir; const char *home, *path, *p; + const char *q1, *q2; size_t len; pool_t pool; @@ -77,10 +78,17 @@ /* [:INBOX=] [:INDEX=] [:CONTROL=] */ if (debug) i_info("maildir: data=%s", data); - p = strchr(data, ':'); - if (p == NULL) + q1 = strchr(data, ':'); + q2 = strchr(data, '='); + if (q1 == NULL || q2 == NULL) root_dir = data; else { + do { + p = q1; + q1 = strchr(p, ':'); + q2 = strchr(p, '='); + } while (q1 && (!q2 || q1 < q2)); + root_dir = t_strdup_until(data, p); do { @@ -155,8 +163,21 @@ int debug = (flags & MAIL_STORAGE_FLAG_DEBUG) != 0; struct stat st; const char *path; + const char *p, *q1, *q2; - data = t_strcut(data, ':'); + p = NULL; + + q1 = strchr(data, ':'); + q2 = strchr(data, '='); + if (q1 && q2) { + do { + p = q1; + q1 = strchr(p, ':'); + q2 = strchr(p, '='); + } while (q1 && (!q2 || q1 < q2)); + } + if (p != NULL) + data = t_strdup_until(data, p); path = t_strconcat(data, "/cur", NULL); if (stat(path, &st) < 0) {