diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-02-20 20:19:45 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-02-20 20:22:54 +0200 |
commit | 1413567bfd73bfb39404201a4fc19a4d23dae3ec (patch) | |
tree | 8983ea8e696cb5fc6dae2519fb28a8a338fa8b76 /mh | |
parent | a192c1115ffc99fe631826cd6f17ce00f4d22820 (diff) | |
download | mailutils-1413567bfd73bfb39404201a4fc19a4d23dae3ec.tar.gz mailutils-1413567bfd73bfb39404201a4fc19a4d23dae3ec.tar.bz2 |
Mu_list_replace and mu_list_remove actually reclaim the memory associated with the item.
* include/mailutils/iterator.h (mu_itrctl_delete_nd)
(mu_itrctl_replace_nd): New mu_itrctl_req constants.
* include/mailutils/list.h (mu_list_remove_nd)
(mu_list_replace_nd): New prototypes.
(mu_list_destroy_item_t): New typedef.
(mu_list_set_destroy_item): Return mu_list_destroy_item_t.
* mailbox/list.c (DESTROY_ITEM): New macro.
(mu_list_destroy): Use DESTROY_ITEM.
(mu_list_remove, mu_list_replace): Actually destroy the
item being removed.
(mu_list_remove_nd, mu_list_replace_nd): New functions.
(mu_list_set_destroy_item): Return previous value of
destroy_item.
(list_itrctl): Handle mu_itrctl_delete_nd and mu_itrctl_replace_nd.
* mailbox/observer.c (mu_observable_create): Register destroy_item
function.
(mu_observable_destroy): Remove explicit loop. Rely on destroy_item
instead.
(mu_observable_detach): Use mu_iterator_ctl to actually
remove the event.
* mh/mh_alias.y (_insert_list): Remove.
(alias_expand_list): Use mu_iterator_ctl to insert
replacement list and remove the current item.
* mh/sortm.c (addop): Register destroy_item function.
(remop): Remove call to free.
* movemail/movemail.c (main): <uidl loop>: Use mu_itrctl_delete
to remove items.
* libmu_sieve/util.c: Minor change.
* mail/util.c (util_slist_compare): New static function.
(util_slist_add): Register destroy_item and comparison
functions for the new list.
(util_slist_remove,util_slist_destroy): Rewrite.
* imap4d/authenticate.c (auth_add): Use mu_list_free_item as
destroy_item function.
* imap4d/util.c (util_register_event): Likewise.
* include/mailutils/cpp/list.h (List)<set_destroy_item>: Change
return value.
* libmu_cpp/list.cc (List::set_destroy_item): Reflect changes to
mu_list_set_destroy_item.
* libmu_argp/common.c: Include stdlib.h
Diffstat (limited to 'mh')
-rw-r--r-- | mh/mh_alias.y | 26 | ||||
-rw-r--r-- | mh/sortm.c | 11 |
2 files changed, 11 insertions, 26 deletions
diff --git a/mh/mh_alias.y b/mh/mh_alias.y index c6e742b8e..ca27e8b29 100644 --- a/mh/mh_alias.y +++ b/mh/mh_alias.y @@ -262,26 +262,6 @@ aliascmp (const char *pattern, const char *name) return strcmp (pattern, name); } - -int -_insert_list (mu_list_t list, void *prev, mu_list_t new_list) -{ - mu_iterator_t itr; - - if (mu_list_get_iterator (new_list, &itr)) - return 1; - for (mu_iterator_first (itr); !mu_iterator_is_done (itr); mu_iterator_next (itr)) - { - void *item; - - mu_iterator_current (itr, &item); - mu_list_insert (list, prev, item, 0); - prev = item; - } - mu_iterator_destroy (&itr); - return 0; -} - static int mh_alias_get_internal (const char *name, mu_iterator_t start, mu_list_t *return_list, int *inclusive); @@ -300,9 +280,11 @@ alias_expand_list (mu_list_t name_list, mu_iterator_t orig_itr, int *inclusive) mu_iterator_current (itr, (void **)&name); if (mh_alias_get_internal (name, orig_itr, &exlist, inclusive) == 0) { - _insert_list (name_list, name, exlist); - mu_list_remove (name_list, name); + /* Insert exlist after name */ + mu_iterator_ctl (itr, mu_itrctl_insert_list, exlist); mu_list_destroy (&exlist); + /* Remove name */ + mu_iterator_ctl (itr, mu_itrctl_delete, NULL); } } mu_iterator_destroy (&itr); diff --git a/mh/sortm.c b/mh/sortm.c index 06482f924..68b95c38d 100644 --- a/mh/sortm.c +++ b/mh/sortm.c @@ -215,10 +215,14 @@ addop (char *field, compfun comp) { struct comp_op *op = xmalloc (sizeof (*op)); - if (!oplist && mu_list_create (&oplist)) + if (!oplist) { - mu_error (_("can't create operation list")); - exit (1); + if (mu_list_create (&oplist)) + { + mu_error (_("can't create operation list")); + exit (1); + } + mu_list_set_destroy_item (oplist, mu_list_free_item); } op->field = field; op->comp = comp; @@ -248,7 +252,6 @@ remop (compfun comp) d.op = NULL; mu_list_do (oplist, rem_action, &d); mu_list_remove (oplist, d.op); - free (d.op); } struct comp_data { |