diff options
author | kib <kib@FreeBSD.org> | 2012-07-27 10:41:10 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-07-27 10:41:10 +0000 |
commit | 5a2e16924f3798ee7f3bf930c0d43f38f18a69dd (patch) | |
tree | 7d4c1d9ef6c0d67f2f64a6f4f950e9d2f2ce0703 /sys/kern/kern_descrip.c | |
parent | c4ee11cf19707c4e62ab93629122ba42207a91df (diff) | |
download | FreeBSD-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.c | 8 |
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); } |