Simplify mode_t check treatment (suggested by trasz).
By semantical view, trasz's code is better than prior one. Submitted by: trasz Reviewed by: Masanori OZAWA <ozawa@ongs.co.jp>
This commit is contained in:
parent
1e5da15a63
commit
16385727ce
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=185284
@ -66,43 +66,6 @@ static vfs_extattrctl_t unionfs_extattrctl;
|
||||
|
||||
static struct vfsops unionfs_vfsops;
|
||||
|
||||
/*
|
||||
* Exchange from userland file mode to vmode.
|
||||
*/
|
||||
static u_short
|
||||
mode2vmode(mode_t mode)
|
||||
{
|
||||
u_short ret;
|
||||
|
||||
ret = 0;
|
||||
|
||||
/* other */
|
||||
if (mode & S_IXOTH)
|
||||
ret |= VEXEC >> 6;
|
||||
if (mode & S_IWOTH)
|
||||
ret |= VWRITE >> 6;
|
||||
if (mode & S_IROTH)
|
||||
ret |= VREAD >> 6;
|
||||
|
||||
/* group */
|
||||
if (mode & S_IXGRP)
|
||||
ret |= VEXEC >> 3;
|
||||
if (mode & S_IWGRP)
|
||||
ret |= VWRITE >> 3;
|
||||
if (mode & S_IRGRP)
|
||||
ret |= VREAD >> 3;
|
||||
|
||||
/* owner */
|
||||
if (mode & S_IXUSR)
|
||||
ret |= VEXEC;
|
||||
if (mode & S_IWUSR)
|
||||
ret |= VWRITE;
|
||||
if (mode & S_IRUSR)
|
||||
ret |= VREAD;
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Mount unionfs layer.
|
||||
*/
|
||||
@ -174,7 +137,7 @@ unionfs_domount(struct mount *mp, struct thread *td)
|
||||
vfs_mount_error(mp, "Invalid udir");
|
||||
return (EINVAL);
|
||||
}
|
||||
udir = mode2vmode(udir);
|
||||
udir &= S_IRWXU | S_IRWXG | S_IRWXO;
|
||||
}
|
||||
if (vfs_getopt(mp->mnt_optnew, "ufile", (void **)&tmp, NULL) == 0) {
|
||||
if (tmp != NULL)
|
||||
@ -183,7 +146,7 @@ unionfs_domount(struct mount *mp, struct thread *td)
|
||||
vfs_mount_error(mp, "Invalid ufile");
|
||||
return (EINVAL);
|
||||
}
|
||||
ufile = mode2vmode(ufile);
|
||||
ufile &= S_IRWXU | S_IRWXG | S_IRWXO;
|
||||
}
|
||||
/* check umask, uid and gid */
|
||||
if (udir == 0 && ufile != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user