From 8007efb9788b221374597687fcfd5bf5a2b91e62 Mon Sep 17 00:00:00 2001 From: pk910 Date: Sat, 27 Aug 2011 18:36:20 +0200 Subject: [PATCH] fixed modcmd privs parsing and extended merge_argv --- IRCParser.c | 6 +++++- IRCParser.h | 1 + modcmd.c | 30 ++++++++++++++---------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/IRCParser.c b/IRCParser.c index bfcd44c..04ec144 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -391,12 +391,16 @@ void reply(struct ClientSocket *client, struct UserNode *user, const char *text, } char* merge_argv(char **argv, int start, int end) { + return merge_argv_char(argv, start, end, ' '); +} + +char* merge_argv_char(char **argv, int start, int end, char seperator) { int i; char *p = NULL; for(i = start; i < end; i++) { p = argv[i]; while(*p) p++; - *p = ' '; + *p = seperator; } if(p) *p = '\0'; return argv[start]; diff --git a/IRCParser.h b/IRCParser.h index d0ab8d6..ac2b376 100644 --- a/IRCParser.h +++ b/IRCParser.h @@ -21,5 +21,6 @@ void init_parser(); void free_parser(); void reply(struct ClientSocket *client, struct UserNode *user, const char *text, ...); char* merge_argv(char **argv, int start, int end); +char* merge_argv_char(char **argv, int start, int end, char seperator); #endif \ No newline at end of file diff --git a/modcmd.c b/modcmd.c index 7c1b0c5..dcf5cef 100644 --- a/modcmd.c +++ b/modcmd.c @@ -263,30 +263,28 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u int access_pos = 0; int access_count = 0; int minaccess = 0; - char *str_a, *str_b = cbind->func->channel_access; + char *str_a, *str_b = cbind->func->channel_access, *str_c; if(cbind->flags & CMDFLAG_OVERRIDE_CHANNEL_ACCESS) str_b = cbind->channel_access; if(str_b) { - while((str_a = strstr(str_b, ","))) { - *str_a = '\0'; - if(*str_b == '#') { + str_c = strdup(str_b); + str_b = str_c; + while((str_a = str_b)) { + str_b = strstr(str_a, ","); + if(str_b) { + *str_b = '\0'; str_b++; - access_pos += sprintf(access_list+access_pos, ", `%s`", str_b); + } + if(*str_a == '#') { + str_a++; + access_pos += sprintf(access_list+access_pos, ", `%s`", str_a); access_count++; } else { - if(atoi(str_b) > minaccess) - minaccess = atoi(str_b); + if(atoi(str_a) > minaccess) + minaccess = atoi(str_a); } - *str_a = ','; - str_b = str_a+1; } - if(*str_b == '#') { - str_b++; - access_pos += sprintf(access_list+access_pos, ", `%s`", str_b); - access_count++; - } else if(atoi(str_b) > minaccess) - minaccess = atoi(str_b); - + free(str_c); } else access_list[0] = '\0'; if(!(chan->flags & CHANFLAG_REQUESTED_CHANINFO) || (sent_chan && sent_chan == chan) || access_count || minaccess) { -- 2.20.1