]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - contrib/cygtermd/pty.c
cygtermd: be more specific in define of _XOPEN_SOURCE.
[PuTTY.git] / contrib / cygtermd / pty.c
index e30f9e0eb81347456e6d90ac1b9ecb34a9881d9b..6080ecfb3acd3ab06f60099e44c173950395ca87 100644 (file)
@@ -2,7 +2,7 @@
  * pty.c - pseudo-terminal handling
  */
 
-#define _XOPEN_SOURCE
+#define _XOPEN_SOURCE 500
 #include <features.h>
 
 #include <stdio.h>
@@ -122,9 +122,23 @@ int run_program_in_pty(const struct shell_data *shdata,
             close(fd);
         }
 #endif
+        /*
+         * Make the new pty our controlling terminal. On some OSes
+         * this is done with TIOCSCTTY; Cygwin doesn't have that, so
+         * instead it's done by simply opening the pty without
+         * O_NOCTTY. This code is primarily intended for Cygwin, but
+         * it's useful to have it work in other contexts for testing
+         * purposes, so I leave the TIOCSCTTY here anyway.
+         */
+        if ((fd = open(ptyname, O_RDWR)) >= 0) {
 #ifdef TIOCSCTTY
-        ioctl(0, TIOCSCTTY, &i);
+            ioctl(fd, TIOCSCTTY, &i);
 #endif
+            close(fd);
+        } else {
+            perror("slave pty: open");
+            exit(127);
+        }
        tcsetpgrp(0, getpgrp());
 
        for (i = 0; i < shdata->nenvvars; i++)