[PATCH] support kernels without __ARCH_WANT_SYSCALL_NO_FLAGS

Rich Felker dalias at aerifal.cx
Thu Apr 26 16:47:28 UTC 2012


On Thu, Apr 26, 2012 at 11:00:39AM -0400, Rich Felker wrote:
> On Thu, Apr 26, 2012 at 10:18:11AM -0400, Mark Salter wrote:
> > +#ifdef __NR_dup2
> >  _syscall2(int, dup2, int, oldfd, int, newfd)
> > +#elif defined __NR_dup3
> > +#include <fcntl.h>
> > +
> > +int
> > +dup2 (int fd, int fd2)
> > +{
> > +	/* For the degenerate case, check if the fd is valid (by trying to
> > +	   get the file status flags) and return it, or else return EBADF.  */
> > +	if (fd == fd2)
> > +		return __libc_fcntl(fd, F_GETFL, 0) < 0 ? -1 : fd;
> 
> Is there a reason this special case is necessary? Not questioning it,
> I just want to know.

OK, I'll answer my own question: it seems to be a workaround for a
kernel bug on 64-bit Linux:

http://old.nabble.com/-PATCH--dup2:-Fix-return-value-with-oldfd-%3D%3D-newfd-and-invalid-fd-td23488867.html

Rich


More information about the uClibc mailing list