grantpt: Relax requirement regarding invalid file descriptors.
authorBruno Haible <bruno@clisp.org>
Fri, 22 Jun 2012 10:36:47 +0000 (12:36 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 22 Jun 2012 10:36:47 +0000 (12:36 +0200)
* lib/grantpt.c: Don't include <fcntl.h>.
(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 <dalias@aerifal.cx>.

ChangeLog
doc/posix-functions/grantpt.texi
lib/grantpt.c
modules/grantpt
tests/test-grantpt.c

index 7d53a42..225cbfe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2012-06-22  Bruno Haible  <bruno@clisp.org>
 
+       grantpt: Relax requirement regarding invalid file descriptors.
+       * lib/grantpt.c: Don't include <fcntl.h>.
+       (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 <dalias@aerifal.cx>.
+
+2012-06-22  Bruno Haible  <bruno@clisp.org>
+
        fbufmode test: Don't test unportable behaviour.
        * tests/test-fbufmode.c (test_mode): New function, extracted from main.
        (main): Invoke it three times.
index eaba7f0..b431853 100644 (file)
@@ -20,5 +20,5 @@ This function is not declared on some platforms:
 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
index ce80ad4..7979908 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <assert.h>
 #include <errno.h>
-#include <fcntl.h>
 #include <string.h>
 #include <sys/wait.h>
 #include <unistd.h>
@@ -50,8 +49,6 @@ grantpt (int fd)
 #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'
index 77c7bc3..2d63d2f 100644 (file)
@@ -9,7 +9,6 @@ m4/grantpt.m4
 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]
index f8ec72a..5deedf0 100644 (file)
@@ -28,22 +28,36 @@ SIGNATURE_CHECK (grantpt, int, (int));
 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;