[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] IO#nread compatibility for Rubinius (Linux-only)
From: |
Eric Wong |
Subject: |
[PATCH] IO#nread compatibility for Rubinius (Linux-only) |
Date: |
Sat, 12 Oct 2013 21:34:04 +0000 |
We don't deal with user-space buffers, so we should be fine
using this compatibility layer and only checking the kernel
buffers (until rbx implements a proper solution).
---
lib/dtas/buffer.rb | 2 ++
lib/dtas/buffer/read_write.rb | 1 -
lib/dtas/buffer/splice.rb | 1 -
lib/dtas/compat_rbx.rb | 12 ++++++++++++
lib/dtas/unix_accepted.rb | 1 +
lib/dtas/unix_client.rb | 1 +
6 files changed, 16 insertions(+), 2 deletions(-)
create mode 100644 lib/dtas/compat_rbx.rb
diff --git a/lib/dtas/buffer.rb b/lib/dtas/buffer.rb
index c0ba6a6..f2b0240 100644
--- a/lib/dtas/buffer.rb
+++ b/lib/dtas/buffer.rb
@@ -1,6 +1,8 @@
# Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
+require 'io/wait'
require_relative '../dtas'
+require_relative 'compat_rbx' # IO#nread
class DTAS::Buffer # :nodoc:
begin
diff --git a/lib/dtas/buffer/read_write.rb b/lib/dtas/buffer/read_write.rb
index 11d1a95..53b11de 100644
--- a/lib/dtas/buffer/read_write.rb
+++ b/lib/dtas/buffer/read_write.rb
@@ -1,6 +1,5 @@
# Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
-require 'io/wait'
require 'io/nonblock'
require_relative '../../dtas'
require_relative '../pipe'
diff --git a/lib/dtas/buffer/splice.rb b/lib/dtas/buffer/splice.rb
index 90c2e47..55ce3d5 100644
--- a/lib/dtas/buffer/splice.rb
+++ b/lib/dtas/buffer/splice.rb
@@ -1,6 +1,5 @@
# Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
-require 'io/wait'
require 'io/nonblock'
require 'io/splice'
require_relative '../../dtas'
diff --git a/lib/dtas/compat_rbx.rb b/lib/dtas/compat_rbx.rb
new file mode 100644
index 0000000..a64bf78
--- /dev/null
+++ b/lib/dtas/compat_rbx.rb
@@ -0,0 +1,12 @@
+# Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
+# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
+
+# ref: https://github.com/rubysl/rubysl-io-wait/issues/1
+# this ignores buffers and is Linux-only
+class IO
+ def nread
+ buf = "\0" * 8
+ ioctl(0x541B, buf)
+ buf.unpack("l_")[0]
+ end
+end if ! IO.method_defined?(:nread) && RUBY_PLATFORM =~ /linux/
diff --git a/lib/dtas/unix_accepted.rb b/lib/dtas/unix_accepted.rb
index be344c7..6658406 100644
--- a/lib/dtas/unix_accepted.rb
+++ b/lib/dtas/unix_accepted.rb
@@ -2,6 +2,7 @@
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
require 'socket'
require 'io/wait'
+require_relative 'compat_rbx'
class DTAS::UNIXAccepted # :nodoc:
attr_reader :to_io
diff --git a/lib/dtas/unix_client.rb b/lib/dtas/unix_client.rb
index fa94bbf..fa8b11c 100644
--- a/lib/dtas/unix_client.rb
+++ b/lib/dtas/unix_client.rb
@@ -5,6 +5,7 @@ require_relative 'xs'
require 'socket'
require 'io/wait'
require 'shellwords'
+require_relative 'compat_rbx'
class DTAS::UNIXClient # :nodoc:
attr_reader :to_io
--
1.8.4
- [PATCH] IO#nread compatibility for Rubinius (Linux-only),
Eric Wong <=