diff options
author | Patrick McDermott <pj@pehjota.net> | 2017-10-23 07:10:55 (EDT) |
---|---|---|
committer | Patrick McDermott <pj@pehjota.net> | 2017-10-23 07:12:00 (EDT) |
commit | 9a0439a3b813613cb3e5b476c49426eba365c2a6 (patch) | |
tree | 865f17abfc665e4e6c0009f6fe499658005374f1 /src/tree.c | |
parent | f5bb04660a51569e924df0bde82ce71821edd30d (diff) | |
download | marquee-9a0439a3b813613cb3e5b476c49426eba365c2a6.zip marquee-9a0439a3b813613cb3e5b476c49426eba365c2a6.tar.gz marquee-9a0439a3b813613cb3e5b476c49426eba365c2a6.tar.bz2 |
mq_tree_foreach*(): Accept only one user data argument
And update MqNotebook.
The va_copy()s didn't seem to work. va_arg() in MqNotebook's
find_node_compare() returned garbage, preventing the node from being
found and causing the assertion in find_node() (as called by
mq_notebook_insert_sibling() and mq_notebook_insert_child()) to fail.
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); } |