Fixed bug with -chmod go=r
This commit is contained in:
parent
af7b92b699
commit
9dc3dbb1ab
@ -1521,7 +1521,7 @@ time_t Decode_timestring(char *code, time_t *date, int flag)
|
|||||||
seconds= 0;
|
seconds= 0;
|
||||||
sscanf(code+1,"%lf",&value);
|
sscanf(code+1,"%lf",&value);
|
||||||
} else {
|
} else {
|
||||||
seconds= time(0);
|
seconds= time(NULL);
|
||||||
sscanf(code,"%lf",&value);
|
sscanf(code,"%lf",&value);
|
||||||
}
|
}
|
||||||
scale_chr= code[strlen(code)-1];
|
scale_chr= code[strlen(code)-1];
|
||||||
@ -3979,7 +3979,7 @@ int Xorriso_option_chmodi(struct XorrisO *xorriso, char *mode,
|
|||||||
{
|
{
|
||||||
int i, end_idx, ret, who_val= 0, was_failure= 0;
|
int i, end_idx, ret, who_val= 0, was_failure= 0;
|
||||||
unsigned int num;
|
unsigned int num;
|
||||||
mode_t mode_and= ~0, mode_or= 0, mode_val;
|
mode_t mode_and= ~0, mode_or= 0, mode_val, mask;
|
||||||
char sfe[4*SfileadrL], *mpt, *opt, *vpt;
|
char sfe[4*SfileadrL], *mpt, *opt, *vpt;
|
||||||
|
|
||||||
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 0);
|
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 0);
|
||||||
@ -3988,7 +3988,8 @@ int Xorriso_option_chmodi(struct XorrisO *xorriso, char *mode,
|
|||||||
mode_and= 0;
|
mode_and= 0;
|
||||||
sscanf(mode,"%o",&num);
|
sscanf(mode,"%o",&num);
|
||||||
mode_or= num;
|
mode_or= num;
|
||||||
} else if(strchr(mode,'+')!=NULL || strchr(mode,'-')!=NULL) {
|
} else if(strchr(mode,'+')!=NULL || strchr(mode,'-')!=NULL
|
||||||
|
|| strchr(mode,'=')!=NULL) {
|
||||||
/* [ugoa][+-][rwxst] */;
|
/* [ugoa][+-][rwxst] */;
|
||||||
for(mpt= mode; mpt!=NULL; mpt= strchr(mpt, ',')) {
|
for(mpt= mode; mpt!=NULL; mpt= strchr(mpt, ',')) {
|
||||||
if(*mpt==',')
|
if(*mpt==',')
|
||||||
@ -4038,6 +4039,7 @@ int Xorriso_option_chmodi(struct XorrisO *xorriso, char *mode,
|
|||||||
if(who_val&2)
|
if(who_val&2)
|
||||||
mode_val|= S_ISGID;
|
mode_val|= S_ISGID;
|
||||||
} else if(*vpt=='t') {
|
} else if(*vpt=='t') {
|
||||||
|
if(who_val&1)
|
||||||
mode_val|= S_ISVTX;
|
mode_val|= S_ISVTX;
|
||||||
} else
|
} else
|
||||||
goto unrecognizable;
|
goto unrecognizable;
|
||||||
@ -4045,8 +4047,15 @@ int Xorriso_option_chmodi(struct XorrisO *xorriso, char *mode,
|
|||||||
if(*opt=='+') {
|
if(*opt=='+') {
|
||||||
mode_or|= mode_val;
|
mode_or|= mode_val;
|
||||||
} else if(*opt=='=') {
|
} else if(*opt=='=') {
|
||||||
mode_and= 0;
|
mask= 0;
|
||||||
mode_or= mode_val;
|
if(who_val&1)
|
||||||
|
mask|= S_IRWXO|S_ISVTX;
|
||||||
|
if(who_val&2)
|
||||||
|
mask|= S_IRWXG|S_ISGID;
|
||||||
|
if(who_val&4)
|
||||||
|
mask|= S_IRWXU|S_ISUID;
|
||||||
|
mode_and&= ~(mask);
|
||||||
|
mode_or= (mode_or & ~mask) | mode_val;
|
||||||
} else if(*opt=='-') {
|
} else if(*opt=='-') {
|
||||||
mode_or&= ~mode_val;
|
mode_or&= ~mode_val;
|
||||||
mode_and&= ~mode_val;
|
mode_and&= ~mode_val;
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2007.11.08.145016"
|
#define Xorriso_timestamP "2007.11.08.160302"
|
||||||
|
Loading…
Reference in New Issue
Block a user