Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Aug 2012 16:42:27 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r239861 - in stable/8/sys: kern sys
Message-ID:  <201208291642.q7TGgRaK079685@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Wed Aug 29 16:42:26 2012
New Revision: 239861
URL: http://svn.freebsd.org/changeset/base/239861

Log:
  MFC r238834:
  Add F_DUP2FD_CLOEXEC.
  
  PR:	standards/169962

Modified:
  stable/8/sys/kern/kern_descrip.c
  stable/8/sys/sys/fcntl.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/kern/   (props changed)
  stable/8/sys/sys/   (props changed)

Modified: stable/8/sys/kern/kern_descrip.c
==============================================================================
--- stable/8/sys/kern/kern_descrip.c	Wed Aug 29 16:37:48 2012	(r239860)
+++ stable/8/sys/kern/kern_descrip.c	Wed Aug 29 16:42:26 2012	(r239861)
@@ -453,6 +453,12 @@ kern_fcntl(struct thread *td, int fd, in
 		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 = fdtofp(fd, fdp)) == NULL) {
@@ -789,6 +795,8 @@ do_dup(struct thread *td, int flags, int
 	}
 	if (flags & DUP_FIXED && old == new) {
 		*retval = new;
+		if (flags & DUP_CLOEXEC)
+			fdp->fd_ofileflags[new] |= UF_EXCLOSE;
 		FILEDESC_XUNLOCK(fdp);
 		return (0);
 	}

Modified: stable/8/sys/sys/fcntl.h
==============================================================================
--- stable/8/sys/sys/fcntl.h	Wed Aug 29 16:37:48 2012	(r239860)
+++ stable/8/sys/sys/fcntl.h	Wed Aug 29 16:42:26 2012	(r239861)
@@ -228,6 +228,9 @@ typedef	__pid_t		pid_t;
 #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
 #define	F_DUPFD_CLOEXEC	17		/* Like F_DUPFD, but FD_CLOEXEC is set */
 #endif
+#if __BSD_VISIBLE
+#define	F_DUP2FD_CLOEXEC 18		/* Like F_DUP2FD, but FD_CLOEXEC is set */
+#endif
 
 /* file descriptor flags (F_GETFD, F_SETFD) */
 #define	FD_CLOEXEC	1		/* close-on-exec flag */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208291642.q7TGgRaK079685>