diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-12-15 10:28:13 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-12-15 11:02:30 +0200 |
commit | 3b42a3a50217575fee4d222204f53e786eb35965 (patch) | |
tree | a78d5b67ecb665a4a14de71b406f60725339da8c | |
parent | 259efd3458b4282915f7bc7333c8c0a5e8c0c757 (diff) | |
download | mailutils-3b42a3a50217575fee4d222204f53e786eb35965.tar.gz mailutils-3b42a3a50217575fee4d222204f53e786eb35965.tar.bz2 |
Swap precedences of MH and Maildir to help in format autodetection
* include/mailutils/registrar.h: Swap MU_MAILDIR_PRIO and
MU_MH_PRIO
(mu_record_is_local)
(mu_registrar_apply_filter): New protos.
* libmailutils/base/registrar.c (mu_registrar_set_default_scheme): Use
mu_registrar_set_default_record.
(mu_record_is_local): New function.
(mu_record_get_url): Use it.
(mu_registrar_apply_filter): New function.
-rw-r--r-- | include/mailutils/registrar.h | 7 | ||||
-rw-r--r-- | libmailutils/base/registrar.c | 36 |
2 files changed, 38 insertions, 5 deletions
diff --git a/include/mailutils/registrar.h b/include/mailutils/registrar.h index 0fb5e515c..eeecaa5e8 100644 --- a/include/mailutils/registrar.h +++ b/include/mailutils/registrar.h @@ -75,7 +75,10 @@ int mu_registrar_lookup_url (mu_url_t url, int flags, mu_record_t *precord, int *pflags); int mu_registrar_record (mu_record_t); int mu_unregistrar_record (mu_record_t); +int mu_registrar_apply_filter (int (*flt) (mu_record_t, void *), void *data); +int mu_record_is_local (mu_record_t); + /* Scheme. */ int mu_record_is_scheme (mu_record_t, mu_url_t, int flags); @@ -113,8 +116,8 @@ extern mu_record_t mu_maildir_record; #define MU_IMAP_PRIO 100 #define MU_POP_PRIO 200 #define MU_MBOX_PRIO 300 -#define MU_MH_PRIO 400 -#define MU_MAILDIR_PRIO 500 +#define MU_MAILDIR_PRIO 400 +#define MU_MH_PRIO 500 #define MU_NNTP_PRIO 600 #define MU_PATH_PRIO 1000 diff --git a/libmailutils/base/registrar.c b/libmailutils/base/registrar.c index fe856ecf1..ba9c34e77 100644 --- a/libmailutils/base/registrar.c +++ b/libmailutils/base/registrar.c @@ -70,12 +70,12 @@ mu_registrar_set_default_scheme (const char *scheme) status = mu_registrar_lookup_scheme (scheme, &rec); if (status == 0) - mu_default_record = rec; + mu_registrar_set_default_record (rec); return status; } const char * -mu_registrar_get_default_scheme () +mu_registrar_get_default_scheme (void) { return mu_default_record ? mu_default_record->scheme : NULL; } @@ -279,6 +279,12 @@ mu_record_is_scheme (mu_record_t record, mu_url_t url, int flags) } int +mu_record_is_local (mu_record_t record) +{ + return record->flags & MU_RECORD_LOCAL; +} + +int mu_record_get_url (mu_record_t record, int (*(*_purl)) (mu_url_t)) { if (record == NULL) @@ -393,6 +399,30 @@ mu_registrar_test_local_url (mu_url_t url, int *pres) rc = mu_registrar_lookup_url (url, MU_FOLDER_ATTRIBUTE_ALL, &rec, NULL); if (rc) return rc; - *pres = rec->flags & MU_RECORD_LOCAL; + *pres = mu_record_is_local (rec); + return 0; +} + +/* Apply flt to each record in the registry and remove those, for which it + returns non-zero. */ +int +mu_registrar_apply_filter (int (*flt) (mu_record_t, void *), void *data) +{ + mu_iterator_t iterator; + + int status = mu_registrar_get_iterator (&iterator); + if (status != 0) + return status; + mu_monitor_wrlock (®istrar_monitor); + for (mu_iterator_first (iterator); !mu_iterator_is_done (iterator); + mu_iterator_next (iterator)) + { + mu_record_t record; + mu_iterator_current (iterator, (void **)&record); + if (flt (record, data)) + mu_list_remove (registrar_list, record); + } + mu_iterator_destroy (&iterator); + mu_monitor_unlock (®istrar_monitor); return 0; } |