Implement the new 1003.1-2001 pathconf() keys, including the Advisory
Information option. Other filesystem implementations should do something similar. With advice from: mckusick, phk
This commit is contained in:
parent
c7047e5204
commit
1d1971ac38
@ -2171,26 +2171,28 @@ ufs_pathconf(ap)
|
||||
int *a_retval;
|
||||
} */ *ap;
|
||||
{
|
||||
int error;
|
||||
|
||||
error = 0;
|
||||
switch (ap->a_name) {
|
||||
case _PC_LINK_MAX:
|
||||
*ap->a_retval = LINK_MAX;
|
||||
return (0);
|
||||
break;
|
||||
case _PC_NAME_MAX:
|
||||
*ap->a_retval = NAME_MAX;
|
||||
return (0);
|
||||
break;
|
||||
case _PC_PATH_MAX:
|
||||
*ap->a_retval = PATH_MAX;
|
||||
return (0);
|
||||
break;
|
||||
case _PC_PIPE_BUF:
|
||||
*ap->a_retval = PIPE_BUF;
|
||||
return (0);
|
||||
break;
|
||||
case _PC_CHOWN_RESTRICTED:
|
||||
*ap->a_retval = 1;
|
||||
return (0);
|
||||
break;
|
||||
case _PC_NO_TRUNC:
|
||||
*ap->a_retval = 1;
|
||||
return (0);
|
||||
break;
|
||||
case _PC_ACL_EXTENDED:
|
||||
#ifdef UFS_ACL
|
||||
if (ap->a_vp->v_mount->mnt_flag & MNT_ACLS)
|
||||
@ -2200,7 +2202,7 @@ ufs_pathconf(ap)
|
||||
#else
|
||||
*ap->a_retval = 0;
|
||||
#endif
|
||||
return (0);
|
||||
break;
|
||||
case _PC_ACL_PATH_MAX:
|
||||
#ifdef UFS_ACL
|
||||
if (ap->a_vp->v_mount->mnt_flag & MNT_ACLS)
|
||||
@ -2210,7 +2212,7 @@ ufs_pathconf(ap)
|
||||
#else
|
||||
*ap->a_retval = 3;
|
||||
#endif
|
||||
return (0);
|
||||
break;
|
||||
case _PC_MAC_PRESENT:
|
||||
#ifdef MAC
|
||||
if (ap->a_vp->v_mount->mnt_flag & MNT_MULTILABEL)
|
||||
@ -2220,11 +2222,45 @@ ufs_pathconf(ap)
|
||||
#else
|
||||
*ap->a_retval = 0;
|
||||
#endif
|
||||
return (0);
|
||||
break;
|
||||
case _PC_ASYNC_IO:
|
||||
/* _PC_ASYNC_IO should have been handled by upper layers. */
|
||||
KASSERT(0, ("_PC_ASYNC_IO should not get here"));
|
||||
error = EINVAL;
|
||||
break;
|
||||
case _PC_PRIO_IO:
|
||||
*ap->a_retval = 0;
|
||||
break;
|
||||
case _PC_SYNC_IO:
|
||||
*ap->a_retval = 0;
|
||||
break;
|
||||
case _PC_ALLOC_SIZE_MIN:
|
||||
*ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_bsize;
|
||||
break;
|
||||
case _PC_FILESIZEBITS:
|
||||
*ap->a_retval = 64;
|
||||
break;
|
||||
case _PC_REC_INCR_XFER_SIZE:
|
||||
*ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_iosize;
|
||||
break;
|
||||
case _PC_REC_MAX_XFER_SIZE:
|
||||
*ap->a_retval = -1; /* means ``unlimited'' */
|
||||
break;
|
||||
case _PC_REC_MIN_XFER_SIZE:
|
||||
*ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_iosize;
|
||||
break;
|
||||
case _PC_REC_XFER_ALIGN:
|
||||
*ap->a_retval = PAGE_SIZE;
|
||||
break;
|
||||
case _PC_SYMLINK_MAX:
|
||||
*ap->a_retval = MAXPATHLEN;
|
||||
break;
|
||||
|
||||
default:
|
||||
return (EINVAL);
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
/* NOTREACHED */
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user