pmccabe2html: escaping of special characters
[gnulib.git] / tests / test-ptsname_r.c
index a97b179..b194303 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of ptsname_r(3).
-   Copyright (C) 2010-2011 Free Software Foundation, Inc.
+   Copyright (C) 2010-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -53,20 +53,30 @@ same_slave (const char *slave_name1, const char *slave_name2)
               && SAME_INODE (statbuf1, statbuf2)));
 }
 
-static int
+static char *
+null_ptr (void)
+{
+  return NULL;
+}
+
+static void
 test_errors (int fd, const char *slave)
 {
   char buffer[256];
   size_t len;
-  int result;
+  size_t buflen_max;
   size_t buflen;
+  int result;
 
   len = strlen (slave);
-  for (buflen = 0; buflen <= sizeof buffer; buflen++)
+  buflen_max = len + 5;
+  if (buflen_max > sizeof buffer)
+    buflen_max = sizeof buffer;
+  for (buflen = 0; buflen <= buflen_max; buflen++)
     {
-      errno = 0;
       memset (buffer, 'X', sizeof buffer);
-      result = ptsname_r (fd, buffer, len);
+      errno = 0;
+      result = ptsname_r (fd, buffer, buflen);
       if (buflen > len)
         {
           ASSERT (result == 0);
@@ -82,7 +92,7 @@ test_errors (int fd, const char *slave)
     }
 
   errno = 0;
-  result = ptsname_r (fd, NULL, 0);
+  result = ptsname_r (fd, null_ptr (), 0);
   ASSERT (result != 0);
   ASSERT (result == errno);
   ASSERT (errno == EINVAL);
@@ -94,8 +104,9 @@ main (void)
 #if HAVE_DECL_ALARM
   /* Declare failure if test takes too long, by using default abort
      caused by SIGALRM.  */
+  int alarm_value = 5;
   signal (SIGALRM, SIG_DFL);
-  alarm (5);
+  alarm (alarm_value);
 #endif
 
   {
@@ -141,7 +152,7 @@ main (void)
     char buffer[256];
     int result;
 
-    /* Open the controlling tty of the current process.  */
+    /* Open a pty master.  */
     fd = open ("/dev/ptmx", O_RDWR | O_NOCTTY);
     if (fd < 0)
       {
@@ -158,9 +169,35 @@ main (void)
     close (fd);
   }
 
+#elif defined _AIX
+  /* AIX has BSD-style /dev/ptyp[0-9a-f] files, but the modern way to open
+     a pty is to go through /dev/ptc.  */
+  {
+    int fd;
+    char buffer[256];
+    int result;
+
+    /* Open a pty master.  */
+    fd = open ("/dev/ptc", O_RDWR | O_NOCTTY);
+    if (fd < 0)
+      {
+        fprintf (stderr, "Skipping test: cannot open pseudo-terminal\n");
+        return 77;
+      }
+
+    result = ptsname_r (fd, buffer, sizeof buffer);
+    ASSERT (result == 0);
+    ASSERT (memcmp (buffer, "/dev/pts/", 9) == 0);
+
+    test_errors (fd, buffer);
+
+    /* This call hangs on AIX.  */
+    close (fd);
+  }
+
 #else
 
-  /* Try various master names of MacOS X: /dev/pty[p-w][0-9a-f]  */
+  /* Try various master names of Mac OS X: /dev/pty[p-w][0-9a-f]  */
   {
     int char1;
     int char2;
@@ -186,6 +223,7 @@ main (void)
 
               test_errors (fd, buffer);
 
+              /* This call hangs on AIX.  */
               close (fd);
             }
         }