summaryrefslogtreecommitdiffstats
path: root/src/tree.c
diff options
context:
space:
mode:
authorPatrick McDermott <pj@pehjota.net>2017-10-23 07:10:55 (EDT)
committer Patrick McDermott <pj@pehjota.net>2017-10-23 07:12:00 (EDT)
commit9a0439a3b813613cb3e5b476c49426eba365c2a6 (patch)
tree865f17abfc665e4e6c0009f6fe499658005374f1 /src/tree.c
parentf5bb04660a51569e924df0bde82ce71821edd30d (diff)
downloadmarquee-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.c44
1 files changed, 14 insertions, 30 deletions
diff --git a/src/tree.c b/src/tree.c
index 4d989b2..9b2c22b 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -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);
}