about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/Modules/zpty.c3
-rw-r--r--Test/.distfiles1
-rw-r--r--Test/V08zpty.ztst20
4 files changed, 29 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 74e0ebeb5..63c9be0a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-08-25  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* Src/Modules/zpty.c, Test/V08zpty.ztst, Test/.distfiles: zpty
+	should attach terminal on slave.
+
 2013-08-17  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* 31637: Src/builtin.c: change of directory should not be retried
diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c
index 25ec7dfea..382119483 100644
--- a/Src/Modules/zpty.c
+++ b/Src/Modules/zpty.c
@@ -344,6 +344,8 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
 
 	if (get_pty(0, &slave))
 	    exit(1);
+	SHTTY = slave;
+	attachtty(mypid);
 #ifdef TIOCGWINSZ
 	/* Set the window size before associating with the terminal *
 	 * so that we don't get hit with a SIGWINCH.  I'm paranoid. */
@@ -398,6 +400,7 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
 	opts[INTERACTIVE] = 0;
 	execode(prog, 1, 0, "zpty");
 	stopmsg = 2;
+	mypid = 0; /* trick to ensure we _exit() */
 	zexit(lastval, 0);
     }
     master = movefd(master);
diff --git a/Test/.distfiles b/Test/.distfiles
index 689b69587..ab92153b0 100644
--- a/Test/.distfiles
+++ b/Test/.distfiles
@@ -40,6 +40,7 @@ V04features.ztst
 V05styles.ztst
 V06parameter.ztst
 V07pcre.ztst
+V08zpty.ztst
 Y01completion.ztst
 Y02compmatch.ztst
 Y03arguments.ztst
diff --git a/Test/V08zpty.ztst b/Test/V08zpty.ztst
new file mode 100644
index 000000000..d9d24c5e8
--- /dev/null
+++ b/Test/V08zpty.ztst
@@ -0,0 +1,20 @@
+# zpty is required by tests of interactive modes of the shell itself.
+# This tests some extra things.
+
+%prep
+
+  if ! zmodload zsh/zpty 2>/dev/null
+  then
+    ZTST_unimplemented="the zsh/zpty module is not available"
+    return 0
+  fi
+
+%test
+
+  zpty cat cat
+  print a line of text | zpty -w cat
+  var=
+  zpty -r cat var && print -r -- ${var%%$'\r\n'}
+  zpty -d cat
+0:zpty with a process that does not set up the terminal
+>a line of text