diff mcabber/mcabber/commands.c @ 1988:dd65a18dc480

Add cmd_set_safe() / cmd_is_safe() (Myhailo Danylenko) Patch merged from isbear's mcabber-experimental repository.
author Mikael Berthe <mikael@lilotux.net>
date Sun, 27 Mar 2011 18:57:42 +0200
parents ad77110343d6
children 5dc408aacb14
line wrap: on
line diff
--- a/mcabber/mcabber/commands.c	Sun Mar 27 18:34:13 2011 +0200
+++ b/mcabber/mcabber/commands.c	Sun Mar 27 18:57:42 2011 +0200
@@ -99,6 +99,7 @@
 
 // Global variable for the commands list
 static GSList *Commands;
+static GSList *safe_commands;
 
 #ifdef MODULES_ENABLE
 #include "modules.h"
@@ -137,6 +138,42 @@
   return n_cmd;
 }
 
+//  cmd_set_safe(name, safe)
+// Sets if command can be used in startup configuration file.
+gboolean cmd_set_safe(const gchar *name, gboolean safe)
+{
+  GSList *sel;
+  if (!name)
+    return FALSE;
+  for (sel = safe_commands; sel; sel = sel->next)
+    if (!strcmp((const char *)sel->data, name)) {
+      if (safe)
+        return FALSE;
+      else {
+        g_free(sel->data);
+        safe_commands = g_slist_delete_link(safe_commands, sel);
+      }
+    }
+  if (safe)
+    safe_commands = g_slist_append(safe_commands, g_strdup(name));
+  else
+    return FALSE;
+  return TRUE;
+}
+
+//  cmd_is_safe(name)
+// Returns if command is safe or not
+gboolean cmd_is_safe(const gchar *name)
+{
+  GSList *sel;
+  if (!name)
+    return FALSE;
+  for (sel = safe_commands; sel; sel = sel->next)
+    if (!strcmp((const char *)sel->data, name))
+      return TRUE;
+  return FALSE;
+}
+
 //  cmd_init()
 // Commands table initialization
 // !!!
@@ -197,6 +234,16 @@
           COMPL_JID, COMPL_STATUS, &do_status_to, NULL);
   cmd_add("version", "Show mcabber version", 0, 0, &do_version, NULL);
 
+  cmd_set_safe("set", TRUE);
+  cmd_set_safe("bind", TRUE);
+  cmd_set_safe("alias", TRUE);
+  cmd_set_safe("pgp", TRUE);
+  cmd_set_safe("source", TRUE);
+  cmd_set_safe("status", TRUE);
+  cmd_set_safe("color", TRUE);
+  cmd_set_safe("otrpolicy", TRUE);
+  cmd_set_safe("module", TRUE);
+
   // Status category
   compl_add_category_word(COMPL_STATUS, "online");
   compl_add_category_word(COMPL_STATUS, "avail");