fix
This commit is contained in:
parent
44f7c3a669
commit
ae4f4e73ed
@ -20,7 +20,59 @@ mode_t mu_parse_mode(const char *s) {
|
|||||||
if (!*p && mode < 07777U)
|
if (!*p && mode < 07777U)
|
||||||
return mode;
|
return mode;
|
||||||
|
|
||||||
return -1;
|
mode = 0;
|
||||||
|
|
||||||
|
/* 0 - + */
|
||||||
|
int type = 0;
|
||||||
|
mode_t mask = 0;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < strlen(s); i++) {
|
||||||
|
switch (s[i]) {
|
||||||
|
case 'r':
|
||||||
|
mode |= A(RD_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'w':
|
||||||
|
mode |= A(WR_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
mode |= A(EX_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '+':
|
||||||
|
type = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '-':
|
||||||
|
type = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'g':
|
||||||
|
mask |= G(FULL_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
mask |= U(FULL_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
mask |= O(FULL_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'a':
|
||||||
|
mask |= A(FULL_PERM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
return ~mask & mode;
|
||||||
|
|
||||||
|
return mask & mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user