- if (parameters[1][i] == '+')
- {
- if (direction != 1)
- {
- if ((outpars[strlen(outpars)-1] == '+') || (outpars[strlen(outpars)-1] == '-'))
- {
- outpars[strlen(outpars)-1] = '+';
- }
- else
- {
- strcat(outpars,"+");
- }
- }
- direction = 1;
- }
- else
- if (parameters[1][i] == '-')
- {
- if (direction != 0)
- {
- if ((outpars[strlen(outpars)-1] == '+') || (outpars[strlen(outpars)-1] == '-'))
- {
- outpars[strlen(outpars)-1] = '-';
- }
- else
- {
- strcat(outpars,"-");
- }
- }
- direction = 0;
- }
- else
- {
- log(DEBUG,"begin mode processing entry");
- can_change = 1;
- if (can_change)
- {
- if (direction == 1)
- {
- log(DEBUG,"umode %c being added",parameters[1][i]);
- if ((!strchr(dmodes,parameters[1][i])) && (allowed_umode(parameters[1][i],user->modes,true)))
- {
- char umode = parameters[1][i];
- log(DEBUG,"umode %c is an allowed umode",umode);
- if ((process_module_umode(umode, user, dest, direction)) || (umode == 'i') || (umode == 's') || (umode == 'w') || (umode == 'o'))
- {
- dmodes[strlen(dmodes)+1]='\0';
- dmodes[strlen(dmodes)] = parameters[1][i];
- outpars[strlen(outpars)+1]='\0';
- outpars[strlen(outpars)] = parameters[1][i];
- }
- }
- }
- else
- {
- // can only remove a mode they already have
- log(DEBUG,"umode %c being removed",parameters[1][i]);
- if ((allowed_umode(parameters[1][i],user->modes,false)) && (strchr(dmodes,parameters[1][i])))
- {
- char umode = parameters[1][i];
- log(DEBUG,"umode %c is an allowed umode",umode);
- if ((process_module_umode(umode, user, dest, direction)) || (umode == 'i') || (umode == 's') || (umode == 'w') || (umode == 'o'))
- {
- int q = 0;
- char temp[MAXBUF];
- char moo[MAXBUF];
-
- outpars[strlen(outpars)+1]='\0';
- outpars[strlen(outpars)] = parameters[1][i];
-
- strcpy(temp,"");
- for (q = 0; q < strlen(dmodes); q++)
- {
- if (dmodes[q] != parameters[1][i])
- {
- moo[0] = dmodes[q];
- moo[1] = '\0';
- strcat(temp,moo);
- }
- }
- strlcpy(dmodes,temp,MAXBUF);
- }
- }
- }
- }
- }
- }
- if (strlen(outpars))
- {
- char b[MAXBUF];
- strlcpy(b,"",MAXBUF);
- int z = 0;
- int i = 0;
- while (i < strlen (outpars))
- {
- b[z++] = outpars[i++];
- b[z] = '\0';
- if (i<strlen(outpars)-1)
- {
- if (((outpars[i] == '-') || (outpars[i] == '+')) && ((outpars[i+1] == '-') || (outpars[i+1] == '+')))
- {
- // someones playing silly buggers and trying
- // to put a +- or -+ into the line...
- i++;
- }
- }
- if (i == strlen(outpars)-1)
- {
- if ((outpars[i] == '-') || (outpars[i] == '+'))
- {
- i++;
- }
- }
- }
-
- z = strlen(b)-1;
- if ((b[z] == '-') || (b[z] == '+'))
- b[z] == '\0';