[PATCH] Replace cvar link list uses with tree ops

Most uses replaced already, the main one left was the one in net_dgrm.c; the
foreach macros do the heavy lifting.

diff -urN a/NQ/net_dgrm.c head/NQ/net_dgrm.c
--- a/NQ/net_dgrm.c	2004-08-11 22:35:12.000000000 +0930
+++ head/NQ/net_dgrm.c	2006-02-21 20:30:22.000000000 +1030
@@ -945,20 +945,9 @@
 
 	// find the search start location
 	prevCvarName = MSG_ReadString();
-	if (*prevCvarName) {
-	    var = Cvar_FindVar(prevCvarName);
-	    if (!var)
-		return NULL;
-	    var = var->next;
-	} else
-	    var = cvar_vars;
-
-	// search for the next server cvar
-	while (var) {
-	    if (var->server)
-		break;
-	    var = var->next;
-	}
+	var = Cvar_NextServerVar(prevCvarName);
+	if (!var)
+	    return NULL;
 
 	// send the response
 
diff -urN a/common/cvar.c head/common/cvar.c
--- a/common/cvar.c	2006-02-19 17:21:44.000000000 +1030
+++ head/common/cvar.c	2006-02-21 20:50:14.000000000 +1030
@@ -43,7 +43,6 @@
 #endif
 #endif
 
-cvar_t *cvar_vars;
 static char *cvar_null_string = "";
 
 #define cvar_entry(ptr) container_of(ptr, struct cvar_s, stree)
@@ -67,6 +66,32 @@
     return ret;
 }
 
+#ifdef NQ_HACK
+/*
+ * For NQ/net_dgrm.c, command == CCREQ_RULE_INFO case
+ */
+cvar_t *
+Cvar_NextServerVar(const char *var_name)
+{
+    cvar_t *ret = NULL;
+    cvar_t *var;
+    struct stree_node *n;
+
+    if (var_name[0] == '\0')
+	var_name = NULL;
+
+    STree_ForEach_After(&cvar_tree, n, var_name) {
+	var = cvar_entry(n);
+	if (var->server) {
+	    ret = var;
+	    STree_ForEach_break(&cvar_tree);
+	}
+    }
+
+    return ret;
+}
+#endif
+
 /*
 ============
 Cvar_VariableValue
@@ -217,9 +242,6 @@
 		   variable->name);
 	return;
     }
-    /* link the variable in */
-    variable->next = cvar_vars;
-    cvar_vars = variable;
 
     variable->stree.string = variable->name;
     STree_Insert(&cvar_tree, &variable->stree);
@@ -287,8 +309,11 @@
 Cvar_WriteVariables(FILE *f)
 {
     cvar_t *var;
+    struct stree_node *n;
 
-    for (var = cvar_vars; var; var = var->next)
+    STree_ForEach(&cvar_tree, n) {
+	var = cvar_entry(n);
 	if (var->archive)
 	    fprintf(f, "%s \"%s\"\n", var->name, var->string);
+    }
 }
diff -urN a/include/cvar.h head/include/cvar.h
--- a/include/cvar.h	2006-02-19 15:59:09.000000000 +1030
+++ head/include/cvar.h	2006-02-21 20:50:07.000000000 +1030
@@ -87,8 +87,6 @@
 #endif
 
     float value;
-    struct cvar_s *next; // Old way to chain them together...
-
     cvar_callback callback;
     unsigned flags;
 
@@ -136,6 +134,8 @@
 /* */
 cvar_t *Cvar_FindVar(const char *var_name);
 
-extern cvar_t *cvar_vars;
+# ifdef NQ_HACK
+cvar_t *Cvar_NextServerVar(const char *var_name);
+#endif
 
 #endif /* CVAR_H */
