+static unsigned int* getUserModeOptions(char mode) {
+ unsigned int *cmode;
+ for (cmode = valid_user_modes; cmode[1]; cmode += 2) {
+ if(cmode[1] == mode)
+ return cmode;
+ }
+ return NULL;
+}
+
+int isUserModeSet(struct UserNode *user, char modeChar) {
+ unsigned int *modeOpt = getUserModeOptions(modeChar);
+ return (user->usermode & modeOpt[0]);
+}
+
+void parseUserModes(struct UserNode* user, char *modeStr) {
+ int i, add = 1;
+ unsigned int *modeOpt;
+ for(i = 0; i < strlen(modeStr); i++) {
+ if(modeStr[i] == '+') {
+ add = 1;
+ continue;
+ }
+ if(modeStr[i] == '-') {
+ add = 0;
+ continue;
+ }
+ modeOpt = getUserModeOptions(modeStr[i]);
+ if(!modeOpt) continue; // unknown mode?
+ if(add) {
+ user->usermode |= modeOpt[0];
+ } else {
+ user->usermode &= ~modeOpt[0];
+ }
+ }
+}
+
+