Home | History | Annotate | Download | only in Posix
      1 // RUN: %clangxx -O0 -g %s -lutil -o %t && %run %t | FileCheck %s
      2 // REQUIRES: stable-runtime
      3 #include <assert.h>
      4 #include <stdio.h>
      5 #include <unistd.h>
      6 #include <string.h>
      7 #if __linux__
      8 #include <pty.h>
      9 #else
     10 #include <util.h>
     11 #endif
     12 
     13 int
     14 main (int argc, char** argv)
     15 {
     16     int master;
     17     int pid = forkpty(&master, NULL, NULL, NULL);
     18 
     19     if(pid == -1) {
     20       fprintf(stderr, "forkpty failed\n");
     21       return 1;
     22     } else if (pid > 0) {
     23       char buf[1024];
     24       int res = read(master, buf, sizeof(buf));
     25       write(1, buf, res);
     26       write(master, "password\n", 9);
     27       while ((res = read(master, buf, sizeof(buf))) > 0) write(1, buf, res);
     28     } else {
     29       char *s = getpass("prompt");
     30       assert(strcmp(s, "password") == 0);
     31       write(1, "done\n", 5);
     32     }
     33     return 0;
     34 }
     35 
     36 // CHECK: prompt
     37 // CHECK: done
     38