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 e0e4e3a..db2c7ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 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.
        * lib/stdio-impl.h (_IOERR, _IOREAD, _IOWRT, _IORW) [__TANDEM]: New
        macros.
index 30136aa..344b8a7 100644 (file)
@@ -4,6 +4,7 @@ tests/signature.h
 tests/macros.h
 
 Depends-on:
+same-inode
 
 configure.ac:
 
index ce39283..8c95100 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);
               }