Example #1
0
int
mu_iterator_dup (mu_iterator_t *piterator, mu_iterator_t orig)
{
  mu_iterator_t iterator;
  int status;
  
  if (piterator == NULL)
    return MU_ERR_OUT_PTR_NULL;
  if (orig == NULL)
    return EINVAL;

  status = mu_iterator_create (&iterator, orig->owner);
  if (status)
    return status;

  status = orig->dup (&iterator->owner, orig->owner);
  if (status)
    {
      free (iterator);
      return status;
    }
  iterator->is_advanced = orig->is_advanced;   
  iterator->dup = orig->dup;
  iterator->destroy = orig->destroy;
  iterator->first = orig->first;
  iterator->next = orig->next;
  iterator->getitem = orig->getitem;
  iterator->delitem = orig->delitem;
  iterator->finished_p = orig->finished_p;
  iterator->itrctl = orig->itrctl;
  
  *piterator = iterator;
  return 0;
}
Example #2
0
int
mu_mailbox_get_iterator (mu_mailbox_t mbx, mu_iterator_t *piterator)
{
  mu_iterator_t iterator;
  int status;
  struct mailbox_iterator *itr;

  if (!mbx)
    return EINVAL;

  itr = calloc (1, sizeof *itr);
  if (!itr)
    return ENOMEM;
  itr->mbx = mbx;
  itr->idx = 1;

  status = mu_iterator_create (&iterator, itr);
  if (status)
    {
      free (itr);
      return status;
    }

  mu_iterator_set_first (iterator, mbx_first);
  mu_iterator_set_next (iterator, mbx_next);
  mu_iterator_set_getitem (iterator, mbx_getitem);
  mu_iterator_set_finished_p (iterator, mbx_finished_p);
  mu_iterator_set_curitem_p (iterator, mbx_curitem_p);
  mu_iterator_set_destroy (iterator, mbx_destroy);
  mu_iterator_set_dup (iterator, mbx_data_dup);

  mu_iterator_attach (&mbx->iterator, iterator);

  *piterator = iterator;
  return 0;
}