changeset 14030:1adb3647af8f

ptsname test: Avoid failure on Solaris. * tests/test-ptsname.c (main): For Solaris, use the recommended way to open a pseudo-terminal; don't use BSD-style ptys. * doc/posix-functions/ptsname.texi: Document the limitation on Solaris.
author Bruno Haible <bruno@clisp.org>
date Sat, 25 Dec 2010 19:18:27 +0100
parents 01400c528402
children c0f279020352
files ChangeLog doc/posix-functions/ptsname.texi tests/test-ptsname.c
diffstat 3 files changed, 36 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-12-25  Bruno Haible  <bruno@clisp.org>
+
+	ptsname test: Avoid failure on Solaris.
+	* tests/test-ptsname.c (main): For Solaris, use the recommended way to
+	open a pseudo-terminal; don't use BSD-style ptys.
+	* doc/posix-functions/ptsname.texi: Document the limitation on Solaris.
+
 2010-12-25  Bruno Haible  <bruno@clisp.org>
 
 	ptsname: Avoid ERANGE failure on some systems.
--- a/doc/posix-functions/ptsname.texi
+++ b/doc/posix-functions/ptsname.texi
@@ -15,4 +15,7 @@
 
 Portability problems not fixed by Gnulib:
 @itemize
+@item
+On Solaris 11 2010-11, this function fails on all BSD-style @file{/dev/pty*}
+device files.
 @end itemize
--- a/tests/test-ptsname.c
+++ b/tests/test-ptsname.c
@@ -77,6 +77,30 @@
     close (fd);
   }
 
+#if defined __sun
+  /* Solaris has BSD-style /dev/pty[p-r][0-9a-f] files, but the function
+     ptsname() does not work on them.  */
+  {
+    int fd;
+    char *result;
+
+    /* Open the controlling tty of the current process.  */
+    fd = open ("/dev/ptmx", O_RDWR | O_NOCTTY);
+    if (fd < 0)
+      {
+        fprintf (stderr, "Skipping test: cannot open pseudo-terminal\n");
+        return 77;
+      }
+
+    result = ptsname (fd);
+    ASSERT (result != NULL);
+    ASSERT (memcmp (result, "/dev/pts/", 9) == 0);
+
+    close (fd);
+  }
+
+#else
+
   /* Try various master names of MacOS X: /dev/pty[p-w][0-9a-f]  */
   {
     int char1;
@@ -135,5 +159,7 @@
           }
   }
 
+#endif
+
   return 0;
 }