ptsname: Avoid test failure on OSF/1 5.1.
authorBruno Haible <bruno@clisp.org>
Wed, 22 Dec 2010 16:53:09 +0000 (17:53 +0100)
committerBruno Haible <bruno@clisp.org>
Wed, 22 Dec 2010 16:53:09 +0000 (17:53 +0100)
* modules/ptsname-tests (Depends-on): Add 'same-inode'.
* tests/test-ptsname.c: Include <sys/stat.h>, same-inode.h.
(same_slave): New function.
(main): Use it to compare ptsname's result with the expected file name.

ChangeLog
modules/ptsname-tests
tests/test-ptsname.c

index e0e4e3afd361f486dbcc6c0b40e2ff0ffd69181e..db2c7ad409b96f3b417e32ed77b18ce0916d21ae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-12-22  Bruno Haible  <bruno@clisp.org>
+
+       ptsname: Avoid test failure on OSF/1 5.1.
+       * modules/ptsname-tests (Depends-on): Add 'same-inode'.
+       * tests/test-ptsname.c: Include <sys/stat.h>, same-inode.h.
+       (same_slave): New function.
+       (main): Use it to compare ptsname's result with the expected file name.
+
 2010-12-22  Bruno Haible  <bruno@clisp.org>
 
        Port extended stdio modules to HP NonStop Kernel.
index 30136aa64b3f05646a3ca02a9f339f1d8e707ebf..344b8a7038aef2a01615e73081a32e91f1055897 100644 (file)
@@ -4,6 +4,7 @@ tests/signature.h
 tests/macros.h
 
 Depends-on:
+same-inode
 
 configure.ac:
 
index ce392833cc30354709e94bb92d5aff4da3609714..8c95100a298292aad316ad98753c90d48da90e6a 100644 (file)
@@ -25,9 +25,32 @@ SIGNATURE_CHECK (ptsname, char *, (int));
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include <sys/stat.h>
+
+#include "same-inode.h"
 
 #include "macros.h"
 
+/* Compare two slave names.
+   On some systems, there are hard links in the /dev/ directory.
+   For example, on OSF/1 5.1,
+     /dev/ttyp0 == /dev/pts/0
+     /dev/ttyp9 == /dev/pts/9
+     /dev/ttypa == /dev/pts/10
+     /dev/ttype == /dev/pts/14
+ */
+static int
+same_slave (const char *slave_name1, const char *slave_name2)
+{
+  struct stat statbuf1;
+  struct stat statbuf2;
+
+  return (strcmp (slave_name1, slave_name2) == 0
+          || (stat (slave_name1, &statbuf1) >= 0
+              && stat (slave_name2, &statbuf2) >= 0
+              && SAME_INODE (statbuf1, statbuf2)));
+}
+
 int
 main (void)
 {
@@ -75,7 +98,7 @@ main (void)
               result = ptsname (fd);
               ASSERT (result != NULL);
               sprintf (slave_name, "/dev/tty%c%c", char1, char2);
-              ASSERT (strcmp (result, slave_name) == 0);
+              ASSERT (same_slave (result, slave_name));
 
               close (fd);
             }
@@ -105,7 +128,7 @@ main (void)
                 result = ptsname (fd);
                 ASSERT (result != NULL);
                 sprintf (slave_name, "/dev/tty%c%c", char1, char2);
-                ASSERT (strcmp (result, slave_name) == 0);
+                ASSERT (same_slave (result, slave_name));
 
                 close (fd);
               }