summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-17 10:38:19 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-17 10:38:19 +0000
commit8ae0a40d029efe557a6f6b7907b98b12dccaab6b (patch)
tree0b31b0466f5224aafe47b2b43d7b7b1b27ccc1fd
parent67d18f7ff78aa9da418f5b958e998807c15b7925 (diff)
* ext/pty/extconf.rb: check util.h for OpenBSD.
* ext/pty/pty.c: include util.h if available. fix variable name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--ext/pty/extconf.rb1
-rw-r--r--ext/pty/pty.c20
3 files changed, 26 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 05c9dc4164..724fdc626e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Dec 17 19:37:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/extconf.rb: check util.h for OpenBSD.
+
+ * ext/pty/pty.c: include util.h if available. fix variable name.
+
Wed Dec 17 19:23:28 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
* lib/matrix.rb: shut up warning. [ruby-dev:37481] [Bug #899]
diff --git a/ext/pty/extconf.rb b/ext/pty/extconf.rb
index b26600ab34..3d6d0f1e46 100644
--- a/ext/pty/extconf.rb
+++ b/ext/pty/extconf.rb
@@ -4,6 +4,7 @@ if /mswin|mingw|bccwin/ !~ RUBY_PLATFORM
have_header("sys/stropts.h")
have_func("setresuid")
have_header("libutil.h")
+ have_header("util.h") # OpenBSD openpty
have_header("pty.h")
have_library("util", "openpty")
if have_func("posix_openpt") or
diff --git a/ext/pty/pty.c b/ext/pty/pty.c
index 2798e88cc0..0044c5bbb4 100644
--- a/ext/pty/pty.c
+++ b/ext/pty/pty.c
@@ -16,6 +16,9 @@
#ifdef HAVE_LIBUTIL_H
#include <libutil.h>
#endif
+#ifdef HAVE_UTIL_H
+#include <util.h>
+#endif
#ifdef HAVE_PTY_H
#include <pty.h>
#endif
@@ -330,7 +333,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
if (!fail) return -1;
rb_raise(rb_eRuntimeError, "openpty() failed");
}
- if (no_mesg(slavedevice, nomesg) == -1) {
+ if (no_mesg(SlaveName, nomesg) == -1) {
if (!fail) return -1;
rb_raise(rb_eRuntimeError, "can't chmod slave pty");
}
@@ -448,6 +451,21 @@ pty_close_pty(VALUE assoc)
* master_io and slave_file is closed when return if they are not closed.
*
* The filename of the slave is slave_file.path.
+ *
+ * # make cut's stdout line buffered.
+ * # if IO.pipe is used instead of PTY.open,
+ * # this deadlocks because cut's stdout will be fully buffered.
+ * m, s = PTY.open
+ * system("stty raw", :in=>s) # disable newline conversion.
+ * r, w = IO.pipe
+ * pid = spawn("cut -c 3-8", :in=>r, :out=>s)
+ * r.close
+ * s.close
+ * w.puts "foo bar baz" #=> "o bar \n"
+ * p m.gets
+ * w.puts "hoge fuga moge" #=> "ge fug\n"
+ * p m.gets
+ *
*/
static VALUE
pty_open(VALUE klass)