summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_descrip.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-07-27 10:41:10 +0000
committerkib <kib@FreeBSD.org>2012-07-27 10:41:10 +0000
commit5a2e16924f3798ee7f3bf930c0d43f38f18a69dd (patch)
tree7d4c1d9ef6c0d67f2f64a6f4f950e9d2f2ce0703 /sys/kern/kern_descrip.c
parentc4ee11cf19707c4e62ab93629122ba42207a91df (diff)
downloadFreeBSD-src-5a2e16924f3798ee7f3bf930c0d43f38f18a69dd.zip
FreeBSD-src-5a2e16924f3798ee7f3bf930c0d43f38f18a69dd.tar.gz
Add F_DUP2FD_CLOEXEC. Apparently Solaris 11 already did this.
Submitted by: Jukka A. Ukkonen <jau iki fi> PR: standards/169962 MFC after: 1 week
Diffstat (limited to 'sys/kern/kern_descrip.c')
-rw-r--r--sys/kern/kern_descrip.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index 53af37b..9ed6369 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -491,6 +491,12 @@ kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg)
error = do_dup(td, DUP_FIXED, fd, tmp, td->td_retval);
break;
+ case F_DUP2FD_CLOEXEC:
+ tmp = arg;
+ error = do_dup(td, DUP_FIXED | DUP_CLOEXEC, fd, tmp,
+ td->td_retval);
+ break;
+
case F_GETFD:
FILEDESC_SLOCK(fdp);
if ((fp = fget_locked(fdp, fd)) == NULL) {
@@ -849,6 +855,8 @@ do_dup(struct thread *td, int flags, int old, int new,
}
if (flags & DUP_FIXED && old == new) {
*retval = new;
+ if (flags & DUP_CLOEXEC)
+ fdp->fd_ofileflags[new] |= UF_EXCLOSE;
FILEDESC_XUNLOCK(fdp);
return (0);
}
OpenPOWER on IntegriCloud