# HG changeset patch # User Bruno Haible # Date 1340361407 -7200 # Node ID aac870b341ad450891ee33427dfe5174ad7fbcd9 # Parent d86f5b7cd392fe577d4f4d823129c0389fd0e726 grantpt: Relax requirement regarding invalid file descriptors. * lib/grantpt.c: Don't include . (grantpt): Don't verify the validity of the file descriptor. * modules/grantpt (Depends-on): Remove fcntl-h. * tests/test-grantpt.c (main): Allow grantpt to succeed for invalid file descriptors. * doc/posix-functions/grantpt.texi: Document more platforms on which grantpt succeeds for invalid file descriptors. Reported by Rich Felker . diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2012-06-22 Bruno Haible + + grantpt: Relax requirement regarding invalid file descriptors. + * lib/grantpt.c: Don't include . + (grantpt): Don't verify the validity of the file descriptor. + * modules/grantpt (Depends-on): Remove fcntl-h. + * tests/test-grantpt.c (main): Allow grantpt to succeed for invalid + file descriptors. + * doc/posix-functions/grantpt.texi: Document more platforms on which + grantpt succeeds for invalid file descriptors. + Reported by Rich Felker . + 2012-06-22 Bruno Haible fbufmode test: Don't test unportable behaviour. diff --git a/doc/posix-functions/grantpt.texi b/doc/posix-functions/grantpt.texi --- a/doc/posix-functions/grantpt.texi +++ b/doc/posix-functions/grantpt.texi @@ -20,5 +20,5 @@ IRIX 5.3. @item This function reports success for invalid file descriptors on some platforms: -Cygwin 1.7.9. +OpenBSD, Cygwin 1.7.9, musl libc. @end itemize diff --git a/lib/grantpt.c b/lib/grantpt.c --- a/lib/grantpt.c +++ b/lib/grantpt.c @@ -21,7 +21,6 @@ #include #include -#include #include #include #include @@ -50,8 +49,6 @@ #if defined __OpenBSD__ /* On OpenBSD, master and slave of a pseudo-terminal are allocated together, through an ioctl on /dev/ptm. There is no need for grantpt(). */ - if (fcntl (fd, F_GETFD) < 0) - return -1; return 0; #else /* This function is most often called from a process without 'root' diff --git a/modules/grantpt b/modules/grantpt --- a/modules/grantpt +++ b/modules/grantpt @@ -9,7 +9,6 @@ Depends-on: stdlib extensions -fcntl-h [test $HAVE_GRANTPT = 0] pt_chown [test $HAVE_GRANTPT = 0] waitpid [test $HAVE_GRANTPT = 0] configmake [test $HAVE_GRANTPT = 0] diff --git a/tests/test-grantpt.c b/tests/test-grantpt.c --- a/tests/test-grantpt.c +++ b/tests/test-grantpt.c @@ -28,22 +28,36 @@ int main (void) { - /* Test behaviour for invalid file descriptors. */ + /* Test behaviour for invalid file descriptors. + These calls don't fail on OpenBSD (with gnulib's replacement) and on + musl libc. */ { + int ret; + errno = 0; - ASSERT (grantpt (-1) == -1); - ASSERT (errno == EBADF - || errno == EINVAL /* seen on FreeBSD 6.4 */ - || errno == 0 /* seen on Solaris 8 */ - ); + ret = grantpt (-1); + if (ret != 0) + { + ASSERT (ret == -1); + ASSERT (errno == EBADF + || errno == EINVAL /* seen on FreeBSD 6.4 */ + || errno == 0 /* seen on Solaris 8 */ + ); + } } { + int ret; + errno = 0; - ASSERT (grantpt (99) == -1); - ASSERT (errno == EBADF - || errno == EINVAL /* seen on FreeBSD 6.4 */ - || errno == 0 /* seen on Solaris 8 */ - ); + ret = grantpt (99); + if (ret != 0) + { + ASSERT (ret == -1); + ASSERT (errno == EBADF + || errno == EINVAL /* seen on FreeBSD 6.4 */ + || errno == 0 /* seen on Solaris 8 */ + ); + } } return 0;