URI: 
       t9term: fix getpts on linux - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit c988c8adf1d997d87ab792f68be0932fed74e9cd
   DIR parent 670f730113743ef6ba4e093c56b812b6e4801314
  HTML Author: Anthony Martin <ality@pbrane.org>
       Date:   Mon, 28 Jun 2010 14:32:29 -0700
       
       9term: fix getpts on linux
       
       Openpty uses grantpt internally and its behavior is
       unspecified when a handler is set to catch SIGCHLD.
       
       Fixes issue 37. http://code.swtch.com/plan9port/issues/37
       
       R=rsc
       CC=codebot
       http://codereview.appspot.com/1209049
       
       Diffstat:
         M CONTRIBUTORS                        |       1 +
         M src/cmd/9term/Linux.c               |       5 +++++
       
       2 files changed, 6 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/CONTRIBUTORS b/CONTRIBUTORS
       t@@ -5,6 +5,7 @@
        
        Albert Lee <trisk@acm.jhu.edu>
        André Günther <Andre.G@gmx.de>
       +Anthony Martin <ality@pbrane.org>
        Anthony Sorace <a@9srv.net>
        Arvindh Rajesh Tamilmani <art@a-30.net>
        Benjamin Huntsman <BHuntsman@mail2.cu-portland.edu>
   DIR diff --git a/src/cmd/9term/Linux.c b/src/cmd/9term/Linux.c
       t@@ -1,13 +1,18 @@
        #define getpts not_using_this_getpts
        #include "bsdpty.c"
        #undef getpts
       +#include <signal.h>
        
        int
        getpts(int fd[], char *slave)
        {
       +        void (*f)(int);
       +
       +        f = signal(SIGCHLD, SIG_DFL);
                if(openpty(&fd[1], &fd[0], NULL, NULL, NULL) >= 0){
                        fchmod(fd[1], 0620);
                        strcpy(slave, ttyname(fd[0]));
       +                signal(SIGCHLD, f);
                        return 0;
                }
                sysfatal("no ptys");