changeset 13998:1ec8b76f7855

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.
author Bruno Haible <bruno@clisp.org>
date Wed, 22 Dec 2010 17:53:09 +0100
parents 6fa9f46e6153
children f4f90f0b7167
files ChangeLog modules/ptsname-tests tests/test-ptsname.c
diffstat 3 files changed, 34 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- a/modules/ptsname-tests
+++ b/modules/ptsname-tests
@@ -4,6 +4,7 @@
 tests/macros.h
 
 Depends-on:
+same-inode
 
 configure.ac:
 
--- a/tests/test-ptsname.c
+++ b/tests/test-ptsname.c
@@ -25,9 +25,32 @@
 #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 @@
               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 @@
                 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);
               }