On Fri, Jan 20, 2012 at 06:25:42PM -0500, Eitan Adler wrote: > I figure this isn't wanted? You silently ignored part of the notes that were provided, and keep complete silence on the primary question about non-standard and fractional nature of the patch.
I see no reason to retype my previous response. > > On Thu, Jan 12, 2012 at 10:07 PM, Eitan Adler <[email protected]> wrote: > > Okay - here is version 2 (compile and run tested) > > > > Index: sys/kern/kern_descrip.c > > =================================================================== > > --- sys/kern/kern_descrip.c (revision 229830) > > +++ sys/kern/kern_descrip.c (working copy) > > @@ -110,6 +110,7 @@ > > /* Flags for do_dup() */ > > #define DUP_FIXED 0x1 /* Force fixed allocation */ > > #define DUP_FCNTL 0x2 /* fcntl()-style errors */ > > +#define DUP_CLOEXEC 0x4 /* Enable O_CLOEXEC on the new fd */ > > > > static int do_dup(struct thread *td, int flags, int old, int new, > > register_t *retval); > > @@ -307,7 +308,36 @@ > > return (0); > > } > > > > +struct dup3_args { > > + u_int from; > > + u_int to; > > + int flags; > > +}; > > + > > /* > > + * Duplicate a file descriptor and allow for O_CLOEXEC > > + */ > > + > > +int > > +sys_dup3(struct thread * td, struct dup3_args * uap) { > > + int dupflags; > > + > > + if (uap->from == uap->to) > > + return (EINVAL); > > + > > + if (uap->flags & ~O_CLOEXEC) > > + return (EINVAL); > > + > > + dupflags = DUP_FIXED; > > + if (uap->flags & O_CLOEXEC) > > + dupflags |= DUP_CLOEXEC; > > + > > + return (do_dup(td, dupflags, (int)uap->from, (int)uap->to, > > + td->td_retval)); > > + return (0); > > +} > > + > > +/* > > * Duplicate a file descriptor to a particular value. > > * > > * Note: keep in mind that a potential race condition exists when closing > > @@ -912,6 +942,9 @@ > > fdp->fd_lastfile = new; > > *retval = new; > > > > + if (flags & DUP_CLOEXEC) > > + fdp->fd_ofileflags[new] |= UF_EXCLOSE; > > + > > /* > > * If we dup'd over a valid file, we now own the reference to it > > * and must dispose of it using closef() semantics (as if a > > Index: sys/kern/syscalls.master > > =================================================================== > > --- sys/kern/syscalls.master (revision 229830) > > +++ sys/kern/syscalls.master (working copy) > > @@ -951,5 +951,6 @@ > > off_t offset, off_t len); } > > 531 AUE_NULL STD { int posix_fadvise(int fd, off_t offset, \ > > off_t len, int advice); } > > +532 AUE_NULL STD { int dup3(u_int from, u_int to, int > > flags); } > > ; Please copy any additions and changes to the following compatability > > tables: > > ; sys/compat/freebsd32/syscalls.master > > Index: sys/compat/freebsd32/syscalls.master > > =================================================================== > > --- sys/compat/freebsd32/syscalls.master (revision 229830) > > +++ sys/compat/freebsd32/syscalls.master (working copy) > > @@ -997,3 +997,4 @@ > > uint32_t offset1, uint32_t offset2,\ > > uint32_t len1, uint32_t len2, \ > > int advice); } > > +532 AUE_NULL STD { int dup3(u_int from, u_int to, int > > flags); } > > > > Index: lib/libc/sys/Symbol.map > > =================================================================== > > --- lib/libc/sys/Symbol.map (revision 229830) > > +++ lib/libc/sys/Symbol.map (working copy) > > @@ -383,6 +383,7 @@ > > > > FBSD_1.3 { > > posix_fadvise; > > + dup3; > > }; > > > > FBSDprivate_1.0 { > > > > > > -- > > Eitan Adler > > > > -- > Eitan Adler
pgpIGBa27Avyh.pgp
Description: PGP signature

