[PATCH 16/46] dup2: Use dup3 if arch does not have the dup2 syscall

Mark Salter msalter at redhat.com
Fri Nov 16 19:02:30 UTC 2012


On Thu, 2012-11-15 at 17:13 -0500, Rich Felker wrote:
> On Tue, Nov 13, 2012 at 11:31:25AM +0000, Markos Chandras wrote:
> > From: Markos Chandras <markos.chandras at imgtec.com>
> > 
> > Signed-off-by: Markos Chandras <markos.chandras at imgtec.com>
> > ---
> >  libc/sysdeps/linux/common/dup2.c |    8 +++++++-
> >  1 files changed, 7 insertions(+), 1 deletions(-)
> > 
> > diff --git a/libc/sysdeps/linux/common/dup2.c b/libc/sysdeps/linux/common/dup2.c
> > index 006f06b..e58105d 100644
> > --- a/libc/sysdeps/linux/common/dup2.c
> > +++ b/libc/sysdeps/linux/common/dup2.c
> > @@ -10,6 +10,12 @@
> >  #include <sys/syscall.h>
> >  #include <unistd.h>
> >  
> > -
> > +#if defined(__NR_dup3) && ! defined(__NR_dup2)
> > +int dup2(int old, int newfd)
> > +{
> > +	return dup3(old, newfd, 0);
> > +}
> > +#else
> >  _syscall2(int, dup2, int, oldfd, int, newfd)
> > +#endif
> >  libc_hidden_def(dup2)
> 
> This is not valid. dup3 explicitly fails if old==newfd, but dup2 is
> required to work in this case. However you can't just return success
> in that case, because old might not be valid. You need to perform
> fcntl or something to determine if the fd is valid, and return an
> error if it's not.

Markos, this was previously discussed here:

http://lists.uclibc.org/pipermail/uclibc/2012-April/046737.html




More information about the uClibc mailing list