bug-gnulib
[Top][All Lists]
Advanced

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

Re: port 'openpty' to all Unix platforms


From: Bruno Haible
Subject: Re: port 'openpty' to all Unix platforms
Date: Mon, 22 Mar 2010 00:15:05 +0100
User-agent: KMail/1.9.9

And here's an update of the tests.


2010-03-21  Bruno Haible  <address@hidden>

        Tests for openpty: Make stricter.
        * tests/test-openpty.c (main): Add test of canonical processing and
        erase.
        * modules/openpty-tests (test_openpty_LDADD): Verify that PTY_LIB is
        defined.

*** tests/test-openpty.c.orig   Mon Mar 22 00:12:49 2010
--- tests/test-openpty.c        Sun Mar 21 23:47:05 2010
***************
*** 14,20 ****
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
  
! /* Written by Simon Josefsson <address@hidden>, 2009.  */
  
  #include <config.h>
  
--- 14,21 ----
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
  
! /* Written by Simon Josefsson <address@hidden>, 2009
!    and Bruno Haible <address@hidden>, 2010.  */
  
  #include <config.h>
  
***************
*** 25,44 ****
                                  struct winsize const *));
  
  #include <stdio.h>
  
  int
  main ()
  {
!   int res;
!   int amaster;
!   int aslave;
  
!   res = openpty (&amaster, &aslave, NULL, NULL, NULL);
!   if (res != 0)
      {
!       printf ("openpty returned %d\n", res);
!       return 1;
      }
  
    return 0;
  }
--- 26,105 ----
                                  struct winsize const *));
  
  #include <stdio.h>
+ #include <string.h>
+ #include <termios.h>
+ #include <unistd.h>
  
  int
  main ()
  {
!   {
!     int master;
!     int slave;
  
!     /* Open a pseudo-terminal, as a master-slave pair.  */
      {
!       int res = openpty (&master, &slave, NULL, NULL, NULL);
!       if (res != 0)
!         {
!           fprintf (stderr, "openpty returned %d\n", res);
!           return 1;
!         }
      }
  
+     /* Set the terminal characteristics.
+        On Linux or MacOS X, they can be set on either the master or the slave;
+        the effect is the same.  But on Solaris, they have to be set on the
+        master; tcgetattr on the slave fails.  */
+     {
+       int tcfd = slave; /* You can try  tcfd = master;  here.  */
+       struct termios attributes;
+ 
+       if (tcgetattr (tcfd, &attributes) < 0)
+         {
+           fprintf (stderr, "tcgetattr failed\n");
+           return 1;
+         }
+       /* Enable canonical processing, including erase.  */
+       attributes.c_lflag |= ECHO | ICANON | ECHOE;
+       attributes.c_cc[VERASE] = '\177';
+       if (tcsetattr (tcfd, TCSANOW, &attributes) < 0)
+         {
+           fprintf (stderr, "tcsetattr failed\n");
+           return 1;
+         }
+     }
+ 
+     /* Write into the master side.  */
+     {
+       static const char input[] = "Hello worst\177\177ld!\n";
+ 
+       if (write (master, input, strlen (input)) < (int) strlen (input))
+         {
+           fprintf (stderr, "write failed\n");
+           return 1;
+         }
+     }
+ 
+     /* Read from the slave side.  */
+     {
+       char buf[100];
+       int res = read (slave, buf, sizeof (buf));
+       static const char expected[] = "Hello world!\n";
+ 
+       if (res < 0)
+         {
+           fprintf (stderr, "read failed\n");
+           return 1;
+         }
+       if (!(res == strlen (expected)
+             && memcmp (buf, expected, strlen (expected)) == 0))
+         {
+           fprintf (stderr, "read result unexpected\n");
+           return 1;
+         }
+     }
+   }
+ 
    return 0;
  }
*** modules/openpty-tests.orig  Mon Mar 22 00:12:49 2010
--- modules/openpty-tests       Sun Mar 21 23:47:05 2010
***************
*** 5,8 ****
  Makefile.am:
  TESTS += test-openpty
  check_PROGRAMS += test-openpty
! test_openpty_LDADD = $(LDADD) $(PTY_LIB)
--- 5,8 ----
  Makefile.am:
  TESTS += test-openpty
  check_PROGRAMS += test-openpty
! test_openpty_LDADD = $(LDADD) @PTY_LIB@




reply via email to

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