version 1.20, 2001/02/10 00:45:26 |
version 1.21, 2001/02/12 20:53:33 |
|
|
char **path1, char **path2) |
char **path1, char **path2) |
{ |
{ |
const char *cmd, *cp = *cpp; |
const char *cmd, *cp = *cpp; |
|
char *cp2; |
int base = 0; |
int base = 0; |
|
long l; |
int i, cmdnum; |
int i, cmdnum; |
|
|
/* Skip leading whitespace */ |
/* Skip leading whitespace */ |
|
|
/* Uses the rest of the line */ |
/* Uses the rest of the line */ |
break; |
break; |
case I_LUMASK: |
case I_LUMASK: |
|
base = 8; |
case I_CHMOD: |
case I_CHMOD: |
base = 8; |
base = 8; |
case I_CHOWN: |
case I_CHOWN: |
case I_CHGRP: |
case I_CHGRP: |
/* Get numeric arg (mandatory) */ |
/* Get numeric arg (mandatory) */ |
if (*cp < '0' && *cp > '9') { |
l = strtol(cp, &cp2, base); |
|
if (cp2 == cp || ((l == LONG_MIN || l == LONG_MAX) && |
|
errno == ERANGE) || l < 0) { |
error("You must supply a numeric argument " |
error("You must supply a numeric argument " |
"to the %s command.", cmd); |
"to the %s command.", cmd); |
return(-1); |
return(-1); |
} |
} |
*n_arg = strtoul(cp, (char**)&cp, base); |
cp = cp2; |
if (!*cp || !strchr(WHITESPACE, *cp)) { |
*n_arg = l; |
|
if (cmdnum == I_LUMASK && strchr(WHITESPACE, *cp)) |
|
break; |
|
if (cmdnum == I_LUMASK || !strchr(WHITESPACE, *cp)) { |
error("You must supply a numeric argument " |
error("You must supply a numeric argument " |
"to the %s command.", cmd); |
"to the %s command.", cmd); |
return(-1); |
return(-1); |
|
|
break; |
break; |
case I_LUMASK: |
case I_LUMASK: |
umask(n_arg); |
umask(n_arg); |
|
printf("Local umask: %03lo\n", n_arg); |
break; |
break; |
case I_CHMOD: |
case I_CHMOD: |
path1 = make_absolute(path1, *pwd); |
path1 = make_absolute(path1, *pwd); |