On 26 April 2012 18:47, Rich Felker <[email protected]> wrote: > 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
Which, from the looks, was fixed in 6c5d0512a091480c9f981162227fdb1c9d70e555 so 2.6.27 and later do not need this in libc. _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
