diff options
| author | 2006-10-07 19:27:19 +0000 | |
|---|---|---|
| committer | 2006-10-07 19:27:19 +0000 | |
| commit | c756a8fff3df4934a7e3bd5f0dcf6a31c0f04871 (patch) | |
| tree | 9d7215f530444c59c39867788a3869a071b241b9 /src/mode.cpp | |
| parent | Update changelog (diff) | |
HAX!
git-svn-id: http://svn.inspircd.org/repository/branches/1_0_stable@5452 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/mode.cpp')
| -rw-r--r-- | src/mode.cpp | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/src/mode.cpp b/src/mode.cpp index 0f280cfce..66d5801e8 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -50,6 +50,38 @@ extern ServerConfig* Config; extern time_t TIME; + +inline int charlcat2(char* x,char y,int z) +{ + char* x__n = x; + int v = 0; + while(*x__n++) + v++; + if (v < z - 1) + { + *--x__n = y; + *++x__n = 0; + } + return v; +} + +bool charremove2(char* mp, char remove) +{ + char* mptr = mp; + bool shift_down = false; + while (*mptr) + { + if (*mptr == remove) + shift_down = true; + if (shift_down) + *mptr = *(mptr+1); + mptr++; + } + return shift_down; +} + + + userrec* ModeParser::SanityChecks(userrec *user,char *dest,chanrec *chan,int status) { userrec *d; @@ -1034,7 +1066,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int { for (ptr = 0; ptr < pc; ptr++) { - charlcat(outl,' ',MAXBUF); + charlcat2(outl,' ',MAXBUF); strlcat(outl,outpars[ptr],MAXBUF-1); } if (local) @@ -1227,7 +1259,7 @@ void cmd_mode::Handle (char **parameters, int pcnt, userrec *user) case '+': if ((direction != 1) && (next_ok)) { - charlcat(outpars,'+',MAXBUF); + charlcat2(outpars,'+',MAXBUF); next_ok = false; } direction = 1; @@ -1236,7 +1268,7 @@ void cmd_mode::Handle (char **parameters, int pcnt, userrec *user) case '-': if ((direction != 0) && (next_ok)) { - charlcat(outpars,'-',MAXBUF); + charlcat2(outpars,'-',MAXBUF); next_ok = false; } direction = 0; @@ -1263,8 +1295,8 @@ void cmd_mode::Handle (char **parameters, int pcnt, userrec *user) { if ((ServerInstance->ModeGrok->ProcessModuleUmode(*i, user, dest, direction)) || (*i == 'i') || (*i == 's') || (*i == 'w') || (*i == 'o')) { - charlcat(dmodes,*i,53); - charlcat(outpars,*i,MAXMODES); + charlcat2(dmodes,*i,53); + charlcat2(outpars,*i,MAXMODES); switch (*i) { case 'o': @@ -1291,8 +1323,8 @@ void cmd_mode::Handle (char **parameters, int pcnt, userrec *user) { if ((ServerInstance->ModeGrok->ProcessModuleUmode(*i, user, dest, direction)) || (*i == 'i') || (*i == 's') || (*i == 'w') || (*i == 'o')) { - charlcat(outpars,*i,MAXMODES); - charremove(dmodes,*i); + charlcat2(outpars,*i,MAXMODES); + charremove2(dmodes,*i); switch (*i) { case 'o': @@ -1473,7 +1505,7 @@ void ModeParser::ServerMode(char **parameters, int pcnt, userrec *user) if ((direction != 1) && (next_ok)) { next_ok = false; - charlcat(outpars,'+',MAXBUF); + charlcat2(outpars,'+',MAXBUF); } direction = 1; break; @@ -1482,7 +1514,7 @@ void ModeParser::ServerMode(char **parameters, int pcnt, userrec *user) if ((direction != 0) && (next_ok)) { next_ok = false; - charlcat(outpars,'-',MAXBUF); + charlcat2(outpars,'-',MAXBUF); } direction = 0; break; @@ -1500,8 +1532,8 @@ void ModeParser::ServerMode(char **parameters, int pcnt, userrec *user) log(DEBUG,"umode %c is an allowed umode",*i); if ((*i == 'i') || (*i == 's') || (*i == 'w') || (*i == 'o') || (ServerInstance->ModeGrok->ProcessModuleUmode(*i, user, dest, direction))) { - charlcat(dmodes,*i,MAXBUF); - charlcat(outpars,*i,53); + charlcat2(dmodes,*i,MAXBUF); + charlcat2(outpars,*i,53); switch (*i) { case 'i': @@ -1528,8 +1560,8 @@ void ModeParser::ServerMode(char **parameters, int pcnt, userrec *user) log(DEBUG,"umode %c is an allowed umode",*i); if ((*i == 'i') || (*i == 's') || (*i == 'w') || (*i == 'o') || (ServerInstance->ModeGrok->ProcessModuleUmode(*i, user, dest, direction))) { - charlcat(outpars,*i,MAXBUF); - charremove(dmodes,*i); + charlcat2(outpars,*i,MAXBUF); + charremove2(dmodes,*i); switch (*i) { case 'i': |
