diff --git a/src/command.c b/src/command.c index 2cb3d821c..e1a43522d 100644 --- a/src/command.c +++ b/src/command.c @@ -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.