return var;
}
-static cvar_hash_t *Cvar_FindVarLink(cvar_state_t *cvars, const char *var_name, cvar_hash_t **parent, cvar_hash_t ***link, cvar_t **prev_alpha, int neededflags)
+static cvar_t *Cvar_FindVarLink(cvar_state_t *cvars, const char *var_name, cvar_t **parent, cvar_t ***link, cvar_t **prev_alpha, int neededflags)
{
int hashindex;
cvar_hash_t *hash;
hashindex = CRC_Block((const unsigned char *)var_name, strlen(var_name)) % CVAR_HASHSIZE;
if(parent) *parent = NULL;
if(prev_alpha) *prev_alpha = NULL;
- if(link) *link = &cvars->hashtable[hashindex];
+ if(link) *link = &cvars->hashtable[hashindex]->cvar;
for (hash = cvars->hashtable[hashindex];hash;hash = hash->next)
{
if (!strcmp (var_name, hash->cvar->name) && (hash->cvar->flags & neededflags))
for (int i = 0; i < hash->cvar->aliasindex; i++)
if (!strcmp (var_name, hash->cvar->aliases[i]) && (hash->cvar->flags & neededflags))
goto match;
- if(parent) *parent = hash;
+ if(parent) *parent = hash->cvar;
}
return NULL;
match:
if(!prev_alpha || hash->cvar == cvars->vars)
- return hash;
+ return hash->cvar;
*prev_alpha = cvars->vars;
// if prev_alpha happens to become NULL then there has been some inconsistency elsewhere
// already - should I still insert '*prev_alpha &&' in the loop?
while((*prev_alpha)->next != hash->cvar)
*prev_alpha = (*prev_alpha)->next;
- return hash;
+ return hash->cvar;
}
/*
{
qboolean changed;
size_t valuelen;
- char new_value[MAX_INPUTLINE];
changed = strcmp(var->string, value) != 0;
// LadyHavoc: don't reallocate when there is no change
if (!changed)
return;
- memcpy(new_value,value,MAX_INPUTLINE);
-
- // Call the function stored in the cvar for bounds checking, cleanup, etc
- if (var->callback)
- var->callback(new_value);
-
// LadyHavoc: don't reallocate when the buffer is the same size
- valuelen = strlen(new_value);
+ valuelen = strlen(value);
if (!var->string || strlen(var->string) != valuelen)
{
Z_Free ((char *)var->string); // free the old value string
var->string = (char *)Z_Malloc (valuelen + 1);
}
- memcpy ((char *)var->string, new_value, valuelen + 1);
+ memcpy ((char *)var->string, value, valuelen + 1);
var->value = atof (var->string);
var->integer = (int) var->value;
if ((var->flags & CVAR_NOTIFY) && changed && sv.active && !sv_disablenotify.integer)
CL_SetInfo(var->name, var->string, true, false, false, false);
Cvar_UpdateAutoCvar(var);
+
+ // Call the function stored in the cvar for bounds checking, cleanup, etc
+ if (var->callback)
+ var->callback(var);
}
void Cvar_SetQuick (cvar_t *var, const char *value)
void Cvar_Set_NoCallback(cvar_t *var, const char *value)
{
- void (*callback_save)(char *) = var->callback;
+ void (*callback_save)(cvar_t *) = var->callback;
var->callback = NULL;
Cvar_SetQuick_Internal(var, value);
var->callback = callback_save;
Cvar_Set(cvars, var_name, val);
}
-void Cvar_RegisterCallback(cvar_t *variable, void (*callback)(char *))
+void Cvar_RegisterCallback(cvar_t *variable, void (*callback)(cvar_t *))
{
variable->callback = callback;
}
cvar_state_t *cvars = cmd->cvars;
int neededflags = ~0;
int i;
- cvar_hash_t *hash, *parent, **link;
+ cvar_t *parent, **link;
cvar_t *cvar, *prev;
if(Cmd_Argc(cmd) < 2)
}
for(i = 1; i < Cmd_Argc(cmd); ++i)
{
- hash = Cvar_FindVarLink(cvars, Cmd_Argv(cmd, i), &parent, &link, &prev, neededflags);
- cvar = hash->cvar;
+ cvar = Cvar_FindVarLink(cvars, Cmd_Argv(cmd, i), &parent, &link, &prev, neededflags);
if(!cvar)
{
}
if(parent)
- parent->next = hash->next;
+ parent->next = cvar->next;
else if(link)
- *link = hash->next;
+ *link = cvar->next;
if(cvar->description != cvar_dummy_description)
Z_Free((char *)cvar->description);