diff options
Diffstat (limited to 'src/tree.c')
-rw-r--r-- | src/tree.c | 44 |
1 files changed, 14 insertions, 30 deletions
@@ -148,34 +148,28 @@ mq_tree_seek(MqTree *node, gint offset) } static gboolean -foreach(MqTree *node, gboolean (*cb)(MqTree *node, va_list ap), va_list ap) +foreach(MqTree *node, gboolean (*cb)(MqTree *node, gpointer user_data), + gpointer user_data) { - va_list aq; gboolean ret; ret = MQ_TREE_CONTINUE; for (; node; node = node->next) { /* XXX: Warning: Does not skip root node */ - va_copy(ap, aq); - ret = cb(node, aq); - va_end(aq); + ret = cb(node, user_data); if (ret == MQ_TREE_STOP) { break; } if (node->first_child) { - va_copy(ap, aq); - ret = foreach(node->first_child, cb, aq); - va_end(aq); + ret = foreach(node->first_child, cb, user_data); if (ret == MQ_TREE_STOP) { break; } } if (node->parent && node->parent->next) { - va_copy(ap, aq); - ret = foreach(node->parent->next, cb, aq); - va_end(aq); + ret = foreach(node->parent->next, cb, user_data); if (ret == MQ_TREE_STOP) { break; } @@ -186,27 +180,21 @@ foreach(MqTree *node, gboolean (*cb)(MqTree *node, va_list ap), va_list ap) } void -mq_tree_foreach(MqTree *node, gboolean (*cb)(MqTree *node, va_list ap), ...) +mq_tree_foreach(MqTree *node, gboolean (*cb)(MqTree *node, gpointer user_data), + gpointer user_data) { - va_list ap; - - va_start(ap, cb); - foreach(node->root->first_child, cb, ap); - va_end(ap); + foreach(node->root->first_child, cb, user_data); } static gboolean -foreach_child(MqTree *node, gboolean (*cb)(MqTree *node, va_list ap), - va_list ap) +foreach_child(MqTree *node, gboolean (*cb)(MqTree *node, gpointer user_data), + gpointer user_data) { - va_list aq; gboolean ret; ret = MQ_TREE_CONTINUE; for (node = node->first_child; node; node = node->next) { - va_copy(ap, aq); - ret = cb(node, aq); - va_end(aq); + ret = cb(node, user_data); if (ret == MQ_TREE_STOP) { break; } @@ -216,12 +204,8 @@ foreach_child(MqTree *node, gboolean (*cb)(MqTree *node, va_list ap), } void -mq_tree_foreach_child(MqTree *node, gboolean (*cb)(MqTree *node, va_list ap), - ...) +mq_tree_foreach_child(MqTree *node, + gboolean (*cb)(MqTree *node, gpointer user_data), gpointer user_data) { - va_list ap; - - va_start(ap, cb); - foreach_child(node->root->first_child, cb, ap); - va_end(ap); + foreach_child(node->root->first_child, cb, user_data); } |