summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2009-07-02 20:05:21 +0000
committertrasz <trasz@FreeBSD.org>2009-07-02 20:05:21 +0000
commit7ce4ab7ff8542c3c45b1203177f667e0ee30a088 (patch)
treeef8fbd9a4465b873edf83c3b7199c3892d965c01 /sys/ufs
parentf11b84cef6b1e82b2663f5944efa8e2802efe20e (diff)
downloadFreeBSD-src-7ce4ab7ff8542c3c45b1203177f667e0ee30a088.zip
FreeBSD-src-7ce4ab7ff8542c3c45b1203177f667e0ee30a088.tar.gz
Fix fpathconf(3) on fifos, in effect making ls(1) properly
display '+' on them. Taken from kern/125613, with cosmetic changes. PR: kern/125613 Submitted by: Jaakko Heinonen <jh at saunalahti dot fi> Approved by: re (kib)
Diffstat (limited to 'sys/ufs')
-rw-r--r--sys/ufs/ufs/ufs_vnops.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index 110262b..54902ad 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -112,6 +112,7 @@ static vop_symlink_t ufs_symlink;
static vop_whiteout_t ufs_whiteout;
static vop_close_t ufsfifo_close;
static vop_kqfilter_t ufsfifo_kqfilter;
+static vop_pathconf_t ufsfifo_pathconf;
/*
* A virgin directory (no blushing please).
@@ -2101,6 +2102,29 @@ ufsfifo_kqfilter(ap)
}
/*
+ * Return POSIX pathconf information applicable to fifos.
+ */
+static int
+ufsfifo_pathconf(ap)
+ struct vop_pathconf_args /* {
+ struct vnode *a_vp;
+ int a_name;
+ int *a_retval;
+ } */ *ap;
+{
+
+ switch (ap->a_name) {
+ case _PC_ACL_EXTENDED:
+ case _PC_ACL_PATH_MAX:
+ case _PC_MAC_PRESENT:
+ return (ufs_pathconf(ap));
+ default:
+ return (fifo_specops.vop_pathconf(ap));
+ }
+ /* NOTREACHED */
+}
+
+/*
* Return POSIX pathconf information applicable to ufs filesystems.
*/
static int
@@ -2520,6 +2544,7 @@ struct vop_vector ufs_fifoops = {
.vop_inactive = ufs_inactive,
.vop_kqfilter = ufsfifo_kqfilter,
.vop_markatime = ufs_markatime,
+ .vop_pathconf = ufsfifo_pathconf,
.vop_print = ufs_print,
.vop_read = VOP_PANIC,
.vop_reclaim = ufs_reclaim,
OpenPOWER on IntegriCloud