bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ptsname on OSF/1 5.1


From: Bruno Haible
Subject: ptsname on OSF/1 5.1
Date: Wed, 22 Dec 2010 17:56:45 +0100
User-agent: KMail/1.9.9

On OSF/1 5.1, the ptsname test fails:

test-ptsname.c:78: assertion failed
sh: 366922 Abort - core dumped
FAIL: test-ptsname

The reason is that for e.g. a master of "/dev/ptype" the ptsname function
returns the slave "/dev/pts/14" but our code expects "/dev/ttype". The
two file names are not the same, but are hard links of each other. This
fixes the test:


2010-12-22  Bruno Haible  <address@hidden>

        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.

--- modules/ptsname-tests.orig  Wed Dec 22 17:51:05 2010
+++ modules/ptsname-tests       Wed Dec 22 17:17:19 2010
@@ -4,6 +4,7 @@
 tests/macros.h
 
 Depends-on:
+same-inode
 
 configure.ac:
 
--- tests/test-ptsname.c.orig   Wed Dec 22 17:51:05 2010
+++ tests/test-ptsname.c        Wed Dec 22 17:24:45 2010
@@ -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);
               }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]