about summary refs log tree commit diff stats
path: root/src/command
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-01-25 01:39:12 +0000
committerJames Booth <boothj5@gmail.com>2014-01-25 01:39:12 +0000
commit4bd06a5d8748b0096845cecd2ad24da7a194aff0 (patch)
treef2d24d2a31e2625d9785371e64a40259fe829f21 /src/command
parent17f40b76ee829c806bbd995aed73c3c7531beb26 (diff)
downloadprofani-tty-4bd06a5d8748b0096845cecd2ad24da7a194aff0.tar.gz
Don't allow /alias to overwrite standard command
Diffstat (limited to 'src/command')
-rw-r--r--src/command/command.c10
-rw-r--r--src/command/command.h2
-rw-r--r--src/command/commands.c23
3 files changed, 25 insertions, 10 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 68c2c6dc..2393a734 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -1120,6 +1120,16 @@ cmd_uninit(void)
     autocomplete_free(aliases_ac);
 }
 
+gboolean
+cmd_exists(char *cmd)
+{
+    if (commands_ac == NULL) {
+        return FALSE;
+    } else {
+        return autocomplete_contains(commands_ac, cmd);
+    }
+}
+
 void
 cmd_autocomplete_add(char *value)
 {
diff --git a/src/command/command.h b/src/command/command.h
index 046fda64..9e67d928 100644
--- a/src/command/command.h
+++ b/src/command/command.h
@@ -41,6 +41,8 @@ gboolean cmd_execute(const char * const command, const char * const inp);
 gboolean cmd_execute_alias(const char * const inp, gboolean *ran);
 gboolean cmd_execute_default(const char * const inp);
 
+gboolean cmd_exists(char *cmd);
+
 GSList * cmd_get_basic_help(void);
 GSList * cmd_get_settings_help(void);
 GSList * cmd_get_presence_help(void);
diff --git a/src/command/commands.c b/src/command/commands.c
index 76f85210..b282f525 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1830,21 +1830,24 @@ cmd_alias(gchar **args, struct cmd_help_t help)
             cons_show("Usage: %s", help.usage);
             return TRUE;
         } else {
+            GString *ac_value = g_string_new("/");
+            g_string_append(ac_value, alias);
+
             char *value = args[2];
             if (value == NULL) {
                 cons_show("Usage: %s", help.usage);
+                g_string_free(ac_value, TRUE);
+                return TRUE;
+            } else if (cmd_exists(ac_value->str)) {
+                cons_show("Command or alias '%s' already exists.");
+                g_string_free(ac_value, TRUE);
                 return TRUE;
             } else {
-                if (prefs_add_alias(alias, value) == TRUE) {
-                    GString *ac_value = g_string_new("/");
-                    g_string_append(ac_value, alias);
-                    cmd_autocomplete_add(ac_value->str);
-                    cmd_alias_add(alias);
-                    g_string_free(ac_value, TRUE);
-                    cons_show("Command alias added /%s -> %s", alias, value);
-                } else {
-                    cons_show("Command alias /%s already exists.", alias);
-                }
+                prefs_add_alias(alias, value);
+                cmd_autocomplete_add(ac_value->str);
+                cmd_alias_add(alias);
+                cons_show("Command alias added /%s -> %s", alias, value);
+                g_string_free(ac_value, TRUE);
                 return TRUE;
             }
         }