fixed last commits
authorpk910 <philipp@zoelle1.de>
Sun, 28 Aug 2011 15:22:17 +0000 (17:22 +0200)
committerpk910 <philipp@zoelle1.de>
Wed, 31 Aug 2011 22:35:26 +0000 (00:35 +0200)
BanNode.c
BanNode.h
ChanNode.c
cmd_neonserv_set.c

index 45ba19988ebc6f5cb7390f0eea91863bdeeedebc..9be81b3c2ec8c62147d59cf886d57394b5f5acb3 100644 (file)
--- a/BanNode.c
+++ b/BanNode.c
@@ -8,6 +8,7 @@ struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
     ban->mask = strdup(mask);
     ban->next = chan->bans;
     chan->bans = ban;
+    return ban;
 }
 
 void removeChannelBanMask(struct ChanNode *chan, char *mask) {
@@ -15,14 +16,14 @@ void removeChannelBanMask(struct ChanNode *chan, char *mask) {
     for(cban = chan->bans; cban; cban = cban->next) {
         if(!strcmp(cban->mask, mask)) {
             if(last)
-                last->next = ban->next;
+                last->next = cban->next;
             else
-                chan->bans = ban->next;
-            free(ban->mask);
-            free(ban);
+                chan->bans = cban->next;
+            free(cban->mask);
+            free(cban);
             break;
         } else 
-            last = ban;
+            last = cban;
     }
 }
 
@@ -39,7 +40,7 @@ void removeChannelBan(struct BanNode *ban) {
             free(ban);
             break;
         } else 
-            last = ban;
+            last = cban;
     }
 }
 
@@ -50,5 +51,5 @@ void removeChannelBans(struct ChanNode *chan) {
         free(ban->mask);
         free(ban);
     }
-    channel->bans = NULL;
+    chan->bans = NULL;
 }
index 56937e712105ed6aebbcabeda64380a21de2fa5f..5b3d406a614f5cc4ed87264ff3abc7d1b994cc0d 100644 (file)
--- a/BanNode.h
+++ b/BanNode.h
@@ -12,7 +12,7 @@ struct BanNode {
 };
 
 struct BanNode* addChannelBan(struct ChanNode *chan, char *mask);
-void removeChannelBanMask(char *mask);
+void removeChannelBanMask(struct ChanNode *chan, char *mask);
 void removeChannelBan(struct BanNode *ban);
 void removeChannelBans(struct ChanNode *chan);
 
index 7313bf347d1515c612d247a9a23b662d3d2dbae9..4568e63faf51d22a1873c976c80f50ee764c40de 100644 (file)
@@ -1,6 +1,7 @@
 #include "ChanNode.h"
 #include "ChanUser.h"
 #include "UserNode.h"
+#include "BanNode.h"
 #include "modcmd.h"
 
 static struct ChanNode **chanList;
@@ -216,6 +217,8 @@ void freeChanNode(struct ChanNode* chan) {
     }
     free(chan->mode_str_args);
     free(chan->mode_int_args);
+    if(chan->bans)
+        removeChannelBans(chan);
     free(chan);
 }
 
index cd54d206d51b7e7e8798a4da7b49ddee6d780984..353287a2e64b88ac57a52260c5da6099d578b2c0 100644 (file)
@@ -1,9 +1,9 @@
 
-typedef int neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+typedef char* neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
 
 #define NS_VALID_FUNCTION 0x01
 #define NS_VALID_STRING   0x02
@@ -14,7 +14,7 @@ static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNod
 #define NS_VALID_BOOLEAN  0x40
 
 #define NS_HAS_OPT  0x100 /* options (SET_OPTION_{NAME}_{VALUE}) */
-#define NS_HAS_HALP 0x200 /* help    (SET_HELP_{NAME}) - only shown if help is requested */
+#define NS_HAS_HELP 0x200 /* help    (SET_HELP_{NAME}) - only shown if help is requested */
 
 static const struct {
     const char *setting;
@@ -22,7 +22,7 @@ static const struct {
     unsigned int valid;
     void *parameter;
 } channel_settings[] = {
-    {"TRIGGER",         "channel_trigger",      NS_VALID_FUNCTION,                  neonserv_cmd_set_trigger},
+    {"TRIGGER",         NULL,                   NS_VALID_FUNCTION,                  neonserv_cmd_set_trigger},
     {"DEFAULTTOPIC",    "channel_defaulttopic", NS_VALID_STRING,                    NULL},
     {"TOPICMASK",       "channel_topicmask",    NS_VALID_STRING,                    NULL},
     {"GREETING",        "channel_greeting",     NS_VALID_STRING,                    NULL},
@@ -46,7 +46,7 @@ static const struct {
     {"SETTERS",         "channel_setters",      NS_VALID_ACCESS | NS_VALID_NO501,   NULL},
     {"ADDUSER",         "channel_canadd",       NS_VALID_ACCESS,                    NULL},
     {"DELUSER",         "channel_candel",       NS_VALID_ACCESS,                    NULL},
-    {"CLVL",            "channel_canclvl",      NS_VALID_ACCESS,                    NULL2},
+    {"CLVL",            "channel_canclvl",      NS_VALID_ACCESS,                    NULL},
     {"RESYNC",          "channel_canresync",    NS_VALID_ACCESS,                    NULL},
     {"SUSPEND",         "channel_cansuspend",   NS_VALID_ACCESS,                    NULL},
     {"NOTICEUSERS",     "channel_notice",       NS_VALID_ACCESS,                    NULL},
@@ -61,34 +61,45 @@ static const struct {
 };
 
 static CMD_BIND(neonserv_cmd_set) {
-    int i;
+    int i, j;
     if(argc && strcmp(argv[0], "help")) {
         
     } else {
         check_mysql();
-        char query[512], *value, *tmp, nameBuf[64];
+        char query[1024], *value, *org_value, *tmp, nameBuf[64];
         int querypos = 0;
-        MYSQL_RES *res;
+        MYSQL_RES *res, *defaults_res;
         MYSQL_ROW row, defaults;
         struct Table *table;
         char *content[2];
         i = 0;
-        while(channel_settings[i]->setting) {
-            querypos += sprintf(query + querypos, ", `%s`", channel_settings[i]->chanfield);
+        while(channel_settings[i].setting) {
+            if(channel_settings[i].chanfield)
+                querypos += sprintf(query + querypos, ", `%s`", channel_settings[i].chanfield);
             i++;
         }
         table = table_init(2, i, 0);
         table_set_bold(table, 0, 1);
-        printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_id` = 'defaults'", query);
-        defaults = mysql_fetch_row(mysql_use());
-        printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%s'", query, chan->channel_id);
+        printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_name` = 'defaults'", query);
+        defaults_res = mysql_use();
+        defaults = mysql_fetch_row(defaults_res);
+        printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%d'", query, chan->channel_id);
         res = mysql_use();
         row = mysql_fetch_row(res);
         i = 0;
-        reply(textclient, user, "NS_SET_HEADER", chan->name);
-        while(channel_settings[i]->setting) {
-            value = (row[1+i] ? row[1+i] : defaults[1+i]);
-            if(channel_settings[i]->valid & NS_VALID_BOOLEAN) {
+        j = 0;
+        reply(getTextBot(), user, "NS_SET_HEADER", chan->name);
+        while(channel_settings[i].setting) {
+            if(channel_settings[i].chanfield) {
+                j++;
+                org_value = (row[j] ? row[j] : defaults[j]);
+            } else if(channel_settings[i].valid & NS_VALID_FUNCTION) {
+                neonserv_cmd_set_function *func = channel_settings[i].parameter;
+                org_value = func(client, user, chan, 0, NULL);
+            } else
+                org_value = "0";
+            value = org_value;
+            if(channel_settings[i].valid & NS_VALID_BOOLEAN) {
                 if(!strcmp(value, "0"))
                     value = get_language_string(user, "NS_SET_OFF");
                 else
@@ -96,45 +107,46 @@ static CMD_BIND(neonserv_cmd_set) {
             }
             strcpy(query, value);
             querypos = strlen(query);
-            if(channel_settings[i]->valid & NS_HAS_OPT) {
-                sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i]->setting, (row[1+i] ? row[1+i] : defaults[1+i]));
+            if(channel_settings[i].valid & NS_HAS_OPT) {
+                sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i].setting, org_value);
                 tmp = get_language_string(user, nameBuf);
                 if(tmp) {
                     querypos += sprintf(query+querypos, " - %s", tmp);
                 }
             }
-            if(argc && channel_settings[i]->valid & NS_HAS_HELP) {
-                sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i]->setting);
+            if(argc && channel_settings[i].valid & NS_HAS_HELP) {
+                sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i].setting);
                 tmp = get_language_string(user, nameBuf);
                 if(tmp) {
                     querypos += sprintf(query+querypos, " - %s", tmp);
                 }
             }
-            content[0] = channel_settings[i]->setting;
+            content[0] = (char*)channel_settings[i].setting;
             content[1] = query;
             table_add(table, content);
+            i++;
         }
         char **table_lines = table_end(table);
         for(i = 0; i < table->entrys; i++) {
             reply(getTextBot(), user, table_lines[i]);
         }
-        free_table(table);
+        table_free(table);
     }
 }
 
-static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return "+";
 }
 
-static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return NULL;
 }
 
-static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return NULL;
 }
 
-static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return NULL;
 }