diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-03-26 22:18:41 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-03-26 22:18:41 +0200 |
commit | 9f7eb0a63d0c8e406636c9ad9f0d12aeb5ca077c (patch) | |
tree | 541d1dcbfe9661abd030b3d5c229cdaaa748afac | |
parent | 60c5545ba8a5c9f4038b5587c96c19b80f538831 (diff) | |
download | mailutils-9f7eb0a63d0c8e406636c9ad9f0d12aeb5ca077c.tar.gz mailutils-9f7eb0a63d0c8e406636c9ad9f0d12aeb5ca077c.tar.bz2 |
Use mu_folder_scan in imap4d
* imap4d/list.c (list_fun): Don't check if the returned
record matches refinfo->pfx->record. This is done by
mu_folder_scan.
(list_ref): Use mu_folder_scan.
-rw-r--r-- | imap4d/list.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/imap4d/list.c b/imap4d/list.c index 5b4dbd110..b2752f70f 100644 --- a/imap4d/list.c +++ b/imap4d/list.c @@ -33,17 +33,12 @@ list_fun (mu_folder_t folder, struct mu_list_response *resp, void *data) { char *name; struct refinfo *refinfo = data; size_t size; char *p; - if ((resp->type & MU_FOLDER_ATTRIBUTE_FILE) - && refinfo->pfx->record - && refinfo->pfx->record != resp->format) - return 0; - name = resp->name + refinfo->dirlen; /* There can be only one INBOX */ if (refinfo->reflen == 0 && mu_c_strcasecmp (name, "INBOX") == 0) return 0; @@ -123,12 +118,13 @@ list_ref (char const *ref, char const *wcard, char const *cwd, { int rc; struct refinfo refinfo; mu_folder_t folder; char const *dir; mu_url_t url; + struct mu_folder_scanner scn = MU_FOLDER_SCANNER_INITIALIZER; if (!wcard[0]) { /* An empty ("" string) mailbox name argument is a special request to return the hierarchy delimiter and the root name of the name given in the reference. @@ -189,15 +185,24 @@ list_ref (char const *ref, char const *wcard, char const *cwd, failure; it is not relevant whether the user's real INBOX resides on this or some other server. */ if (!*ref && mu_imap_wildmatch_ci (wcard, "INBOX", MU_HIERARCHY_DELIMITER) == 0) io_untagged_response (RESP_NONE, "LIST (\\NoInferiors) NIL INBOX"); + + scn.pattern = (void*) wcard; + scn.enumfun = list_fun; + scn.enumdata = &refinfo; + if (refinfo.pfx->record) + { + mu_list_create (&scn.records); + mu_list_append (scn.records, refinfo.pfx->record); + } - mu_folder_enumerate (folder, NULL, (void*) wcard, 0, 0, NULL, - list_fun, &refinfo); + mu_folder_scan (folder, &scn); + mu_list_destroy (&scn.records); mu_folder_destroy (&folder); free (refinfo.buf); return RESP_OK; } /* |