// use hash lookup to minimize search time
hashindex = CRC_Block((const unsigned char *)var_name, strlen(var_name));
for (var = cvar_hashtable[hashindex];var;var = var->nextonhashchain)
- if (!strcasecmp (var_name, var->name))
+ if (!strcmp (var_name, var->name))
return var;
return NULL;
// Loop through the command list and print all matches
for (cvar = cvar_vars; cvar; cvar = cvar->next)
if (!strncasecmp(partial, cvar->name, len))
- Con_Printf ("%c3%s%s : \"%s\" (\"%s\") : %s\n", STRING_COLOR_TAG, cvar->name, STRING_COLOR_DEFAULT_STR, cvar->string, cvar->defstring, cvar->description);
+ Con_Printf ("^3%s^7 is \"%s\" [\"%s\"] %s\n", cvar->name, cvar->string, cvar->defstring, cvar->description);
}
qboolean changed;
size_t valuelen;
- changed = strcmp(var->string, value);
+ changed = strcmp(var->string, value) != 0;
// LordHavoc: don't reallocate when there is no change
if (!changed)
return;
CL_SetInfo("playermodel", var->string, true, false, false, false);
else if (!strcmp(var->name, "_cl_name"))
CL_SetInfo("name", var->string, true, false, false, false);
+ else if (!strcmp(var->name, "rcon_secure"))
+ {
+ // whenever rcon_secure is changed to 0, clear rcon_password for
+ // security reasons (prevents a send-rcon-password-as-plaintext
+ // attack based on NQ protocol session takeover and svc_stufftext)
+ if(var->integer <= 0)
+ Cvar_Set("rcon_password", "");
+ }
+ else if (!strcmp(var->name, "net_slist_favorites"))
+ NetConn_UpdateFavorites();
}
}
cvar_t *var;
// restore the default values of all cvars
for (var = cvar_vars ; var ; var = var->next)
- Cvar_SetQuick(var, var->defstring);
+ if((var->flags & CVAR_NORESETTODEFAULTS) == 0)
+ Cvar_SetQuick(var, var->defstring);
}
cvar_t *var;
// restore the default values of all cvars
for (var = cvar_vars ; var ; var = var->next)
- if (!(var->flags & CVAR_SAVE))
+ if ((var->flags & (CVAR_NORESETTODEFAULTS | CVAR_SAVE)) == 0)
Cvar_SetQuick(var, var->defstring);
}
cvar_t *var;
// restore the default values of all cvars
for (var = cvar_vars ; var ; var = var->next)
- if (var->flags & CVAR_SAVE)
+ if ((var->flags & (CVAR_NORESETTODEFAULTS | CVAR_SAVE)) == CVAR_SAVE)
Cvar_SetQuick(var, var->defstring);
}
const char *partial;
size_t len;
int count;
+ qboolean ispattern;
if (Cmd_Argc() > 1)
{
len = 0;
}
+ ispattern = partial && (strchr(partial, '*') || strchr(partial, '?'));
+
count = 0;
for (cvar = cvar_vars; cvar; cvar = cvar->next)
{
- if (partial && strncasecmp (partial,cvar->name,len))
+ if (len && (ispattern ? !matchpattern_with_separator(cvar->name, partial, false, "", false) : strncmp (partial,cvar->name,len)))
continue;
Con_Printf("%s is \"%s\" [\"%s\"] %s\n", cvar->name, cvar->string, cvar->defstring, cvar->description);
count++;
}
- if (partial)
- Con_Printf("%i cvar(s) beginning with \"%s\"\n", count, partial);
+ if (len)
+ {
+ if(ispattern)
+ Con_Printf("%i cvar%s matching \"%s\"\n", count, (count > 1) ? "s" : "", partial);
+ else
+ Con_Printf("%i cvar%s beginning with \"%s\"\n", count, (count > 1) ? "s" : "", partial);
+ }
else
Con_Printf("%i cvar(s)\n", count);
}
Cvar_Get(Cmd_Argv(1), Cmd_Argv(2), CVAR_SAVE, Cmd_Argc() > 3 ? Cmd_Argv(3) : NULL);
}
-
+#ifdef FILLALLCVARSWITHRUBBISH
+void Cvar_FillAll_f()
+{
+ char *buf, *p, *q;
+ int n, i;
+ cvar_t *var;
+ qboolean verify;
+ if(Cmd_Argc() != 2)
+ {
+ Con_Printf("Usage: %s length to plant rubbish\n", Cmd_Argv(0));
+ Con_Printf("Usage: %s -length to verify that the rubbish is still there\n", Cmd_Argv(0));
+ return;
+ }
+ n = atoi(Cmd_Argv(1));
+ verify = (n < 0);
+ if(verify)
+ n = -n;
+ buf = Z_Malloc(n + 1);
+ buf[n] = 0;
+ for(var = cvar_vars; var; var = var->next)
+ {
+ for(i = 0, p = buf, q = var->name; i < n; ++i)
+ {
+ *p++ = *q++;
+ if(!*q)
+ q = var->name;
+ }
+ if(verify && strcmp(var->string, buf))
+ {
+ Con_Printf("\n%s does not contain the right rubbish, either this is the first run or a possible overrun was detected, or something changed it intentionally; it DOES contain: %s\n", var->name, var->string);
+ }
+ Cvar_SetQuick(var, buf);
+ }
+ Z_Free(buf);
+}
+#endif /* FILLALLCVARSWITHRUBBISH */