Replace the alias if an alias already exists

Reduces wasting memory by having multiple aliases with the same name
This commit is contained in:
SteelT 2023-07-16 15:44:48 -04:00
parent c55b2f2943
commit a90151570f

View file

@ -692,11 +692,36 @@ static void print_alias(void)
}
}
static void add_alias(char *newname, char *newcmd)
{
cmdalias_t *a;
// Check for existing aliases first
for (a = com_alias; a; a = a->next)
{
if (!stricmp(newname, a->name))
{
Z_Free(a->value); // Free old cmd
a->value = newcmd;
return;
}
}
// No alias found, add it instead
a = ZZ_Alloc(sizeof *a);
a->next = com_alias;
com_alias = a;
a->name = newname;
a->value = newcmd;
}
/** Creates a command name that replaces another command.
*/
static void COM_Alias_f(void)
{
cmdalias_t *a;
char *name;
char *zcmd;
char cmd[1024];
size_t i, c;
@ -707,11 +732,7 @@ static void COM_Alias_f(void)
return;
}
a = ZZ_Alloc(sizeof *a);
a->next = com_alias;
com_alias = a;
a->name = Z_StrDup(COM_Argv(1));
name = Z_StrDup(COM_Argv(1));
// copy the rest of the command line
cmd[0] = 0; // start out with a null string
@ -723,8 +744,8 @@ static void COM_Alias_f(void)
strcat(cmd, " ");
}
strcat(cmd, "\n");
a->value = Z_StrDup(cmd);
zcmd = Z_StrDup(cmd);
add_alias(name, zcmd);
}
/** Prints a line of text to the console.