code cleanup
[rocksndiamonds.git] / src / libgame / setup.c
index dfd9ac612eb4127d6a0c4496bc1f9ee552f5c42e..f1223d0dd238b0098f845f54b57f574d09b903c4 100644 (file)
@@ -1290,7 +1290,7 @@ TreeInfo *getValidLevelSeries(TreeInfo *node, TreeInfo *default_node)
     return getFirstValidTreeInfoEntry(default_node);
 }
 
-TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
+static TreeInfo *getValidTreeInfoEntryExt(TreeInfo *node, boolean get_next_node)
 {
   if (node == NULL)
     return NULL;
@@ -1299,15 +1299,26 @@ TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
     return getFirstValidTreeInfoEntry(node->node_group);
 
   if (node->parent_link)       // skip first node (back link) of node group
-  {
-    if (node->next)            // get next regular node
-      return getFirstValidTreeInfoEntry(node->next);
-    else                       // leave empty node group and go on
-      return getFirstValidTreeInfoEntry(node->node_parent->next);
-  }
+    get_next_node = TRUE;
 
-  // this is a regular tree node
-  return node;
+  if (!get_next_node)          // get current regular tree node
+    return node;
+
+  // get next regular tree node, or step up until one is found
+  while (node->next == NULL && node->node_parent != NULL)
+    node = node->node_parent;
+
+  return getFirstValidTreeInfoEntry(node->next);
+}
+
+TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
+{
+  return getValidTreeInfoEntryExt(node, FALSE);
+}
+
+TreeInfo *getNextValidTreeInfoEntry(TreeInfo *node)
+{
+  return getValidTreeInfoEntryExt(node, TRUE);
 }
 
 TreeInfo *getTreeInfoFirstGroupEntry(TreeInfo *node)